本文整理汇总了Python中mo_logs.Log.alert方法的典型用法代码示例。如果您正苦于以下问题:Python Log.alert方法的具体用法?Python Log.alert怎么用?Python Log.alert使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类mo_logs.Log
的用法示例。
在下文中一共展示了Log.alert方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: not_monitor
# 需要导入模块: from mo_logs import Log [as 别名]
# 或者: from mo_logs.Log import alert [as 别名]
def not_monitor(self, please_stop):
Log.alert("metadata scan has been disabled")
please_stop.on_go(lambda: self.todo.add(THREAD_STOP))
while not please_stop:
column = self.todo.pop()
if column == THREAD_STOP:
break
if column.jx_type in STRUCT or split_field(column.es_column)[-1] == EXISTS_TYPE:
DEBUG and Log.note("{{column.es_column}} is a struct", column=column)
column.last_updated = Date.now()
continue
elif column.last_updated > Date.now() - TOO_OLD and column.cardinality is not None:
# DO NOT UPDATE FRESH COLUMN METADATA
DEBUG and Log.note("{{column.es_column}} is still fresh ({{ago}} ago)", column=column, ago=(Date.now()-Date(column.last_updated)).seconds)
continue
with Timer("Update {{col.es_index}}.{{col.es_column}}", param={"col": column}, silent=not DEBUG, too_long=0.05):
if untype_path(column.name) in ["build.type", "run.type"]:
try:
self._update_cardinality(column)
except Exception as e:
Log.warning("problem getting cardinality for {{column.name}}", column=column, cause=e)
else:
column.last_updated = Date.now()
示例2: _wait_for_exit
# 需要导入模块: from mo_logs import Log [as 别名]
# 或者: from mo_logs.Log import alert [as 别名]
def _wait_for_exit(please_stop):
"""
/dev/null PIPED TO sys.stdin SPEWS INFINITE LINES, DO NOT POLL AS OFTEN
"""
cr_count = 0 # COUNT NUMBER OF BLANK LINES
while not please_stop:
# if DEBUG:
# Log.note("inside wait-for-shutdown loop")
if cr_count > 30:
(Till(seconds=3) | please_stop).wait()
try:
line = sys.stdin.readline()
except Exception as e:
Except.wrap(e)
if "Bad file descriptor" in e:
_wait_for_interrupt(please_stop)
break
# if DEBUG:
# Log.note("read line {{line|quote}}, count={{count}}", line=line, count=cr_count)
if line == "":
cr_count += 1
else:
cr_count = -1000000 # NOT /dev/null
if line.strip() == "exit":
Log.alert("'exit' Detected! Stopping...")
return
示例3: not_monitor
# 需要导入模块: from mo_logs import Log [as 别名]
# 或者: from mo_logs.Log import alert [as 别名]
def not_monitor(self, please_stop):
Log.alert("metadata scan has been disabled")
please_stop.on_go(lambda: self.todo.add(THREAD_STOP))
while not please_stop:
c = self.todo.pop()
if c == THREAD_STOP:
break
if not c.last_updated or c.last_updated >= Date.now()-TOO_OLD:
continue
with self.meta.columns.locker:
self.meta.columns.update({
"set": {
"last_updated": Date.now()
},
"clear":[
"count",
"cardinality",
"partitions",
],
"where": {"eq": {"es_index": c.es_index, "es_column": c.es_column}}
})
if DEBUG:
Log.note("Could not get {{col.es_index}}.{{col.es_column}} info", col=c)
示例4: create_index
# 需要导入模块: from mo_logs import Log [as 别名]
# 或者: from mo_logs.Log import alert [as 别名]
def create_index(
self,
index,
alias=None,
create_timestamp=None,
schema=None,
limit_replicas=None,
read_only=False,
tjson=False,
kwargs=None
):
if not alias:
alias = kwargs.alias = kwargs.index
index = kwargs.index = proto_name(alias, create_timestamp)
if kwargs.alias == index:
Log.error("Expecting index name to conform to pattern")
if kwargs.schema_file:
Log.error('schema_file attribute not supported. Use {"$ref":<filename>} instead')
if schema == None:
Log.error("Expecting a schema")
elif isinstance(schema, basestring):
schema = mo_json.json2value(schema, leaves=True)
else:
schema = mo_json.json2value(convert.value2json(schema), leaves=True)
if limit_replicas:
# DO NOT ASK FOR TOO MANY REPLICAS
health = self.get("/_cluster/health")
if schema.settings.index.number_of_replicas >= health.number_of_nodes:
Log.warning("Reduced number of replicas: {{from}} requested, {{to}} realized",
{"from": schema.settings.index.number_of_replicas},
to= health.number_of_nodes - 1
)
schema.settings.index.number_of_replicas = health.number_of_nodes - 1
self.post(
"/" + index,
data=schema,
headers={"Content-Type": "application/json"}
)
# CONFIRM INDEX EXISTS
while True:
try:
state = self.get("/_cluster/state", retry={"times": 5}, timeout=3)
if index in state.metadata.indices:
break
Log.note("Waiting for index {{index}} to appear", index=index)
except Exception as e:
Log.warning("Problem while waiting for index {{index}} to appear", index=index, cause=e)
Till(seconds=1).wait()
Log.alert("Made new index {{index|quote}}", index=index)
es = Index(kwargs=kwargs)
return es
示例5: __init__
# 需要导入模块: from mo_logs import Log [as 别名]
# 或者: from mo_logs.Log import alert [as 别名]
def __init__(
self,
index, # NAME OF THE INDEX, EITHER ALIAS NAME OR FULL VERSION NAME
type=None, # SCHEMA NAME, (DEFAULT TO TYPE IN INDEX, IF ONLY ONE)
alias=None,
explore_metadata=True, # PROBING THE CLUSTER FOR METADATA IS ALLOWED
read_only=True,
tjson=False, # STORED AS TYPED JSON
timeout=None, # NUMBER OF SECONDS TO WAIT FOR RESPONSE, OR SECONDS TO WAIT FOR DOWNLOAD (PASSED TO requests)
consistency="one", # ES WRITE CONSISTENCY (https://www.elastic.co/guide/en/elasticsearch/reference/1.7/docs-index_.html#index-consistency)
debug=False, # DO NOT SHOW THE DEBUG STATEMENTS
cluster=None,
kwargs=None
):
if index==None:
Log.error("not allowed")
if index == alias:
Log.error("must have a unique index name")
self.cluster_state = None
self.debug = debug
self.settings = kwargs
if cluster:
self.cluster = cluster
else:
self.cluster = Cluster(kwargs)
try:
full_index = self.get_index(index)
if full_index and alias==None:
kwargs.alias = kwargs.index
kwargs.index = full_index
if full_index==None:
Log.error("not allowed")
if type == None:
# NO type PROVIDED, MAYBE THERE IS A SUITABLE DEFAULT?
with self.cluster.metadata_locker:
index_ = self.cluster._metadata.indices[self.settings.index]
if not index_:
indices = self.cluster.get_metadata().indices
index_ = indices[self.settings.index]
candidate_types = list(index_.mappings.keys())
if len(candidate_types) != 1:
Log.error("Expecting `type` parameter")
self.settings.type = type = candidate_types[0]
except Exception as e:
# EXPLORING (get_metadata()) IS NOT ALLOWED ON THE PUBLIC CLUSTER
Log.error("not expected", cause=e)
if not type:
Log.error("not allowed")
self.path = "/" + full_index + "/" + type
if self.debug:
Log.alert("elasticsearch debugging for {{url}} is on", url=self.url)
示例6: rollback
# 需要导入模块: from mo_logs import Log [as 别名]
# 或者: from mo_logs.Log import alert [as 别名]
def rollback(self):
if self.pending:
pending, self.pending = self.pending, []
for p in pending:
m = Message()
m.set_body(p.get_body())
self.queue.write(m)
for p in pending:
self.queue.delete_message(p)
if self.settings.debug:
Log.alert("{{num}} messages returned to queue", num=len(pending))
示例7: worker
# 需要导入模块: from mo_logs import Log [as 别名]
# 或者: from mo_logs.Log import alert [as 别名]
def worker(please_stop):
while not please_stop:
try:
response = requests.get("http://169.254.169.254/latest/meta-data/spot/termination-time")
if response.status_code not in [400, 404]:
Log.alert("Shutdown AWS Spot Node {{name}} {{type}}", name=machine_metadata.name, type=machine_metadata.aws_instance_type)
please_stop.go()
except Exception as e:
e = Except.wrap(e)
if "Failed to establish a new connection: [Errno 10060]" in e or "A socket operation was attempted to an unreachable network" in e:
Log.note("AWS Spot Detection has shutdown, probably not a spot node, (http://169.254.169.254 is unreachable)")
return
else:
Log.warning("AWS shutdown detection has problems", cause=e)
(Till(seconds=61) | please_stop).wait()
(Till(seconds=11) | please_stop).wait()
示例8: wait_for_shutdown_signal
# 需要导入模块: from mo_logs import Log [as 别名]
# 或者: from mo_logs.Log import alert [as 别名]
def wait_for_shutdown_signal(
self,
please_stop=False, # ASSIGN SIGNAL TO STOP EARLY
allow_exit=False, # ALLOW "exit" COMMAND ON CONSOLE TO ALSO STOP THE APP
wait_forever=True # IGNORE CHILD THREADS, NEVER EXIT. False => IF NO CHILD THREADS LEFT, THEN EXIT
):
"""
FOR USE BY PROCESSES THAT NEVER DIE UNLESS EXTERNAL SHUTDOWN IS REQUESTED
CALLING THREAD WILL SLEEP UNTIL keyboard interrupt, OR please_stop, OR "exit"
:param please_stop:
:param allow_exit:
:param wait_forever:: Assume all needed threads have been launched. When done
:return:
"""
self_thread = Thread.current()
if self_thread != MAIN_THREAD or self_thread != self:
Log.error("Only the main thread can sleep forever (waiting for KeyboardInterrupt)")
if isinstance(please_stop, Signal):
# MUTUAL TRIGGERING, SO THEY ARE EFFECTIVELY THE SAME
self.please_stop.on_go(please_stop.go)
please_stop.on_go(self.please_stop.go)
else:
please_stop = self.please_stop
if not wait_forever:
# TRIGGER SIGNAL WHEN ALL CHILDREN THEADS ARE DONE
with self_thread.child_lock:
pending = copy(self_thread.children)
all = AndSignals(please_stop, len(pending))
for p in pending:
p.stopped.on_go(all.done)
try:
if allow_exit:
_wait_for_exit(please_stop)
else:
_wait_for_interrupt(please_stop)
except KeyboardInterrupt as _:
Log.alert("SIGINT Detected! Stopping...")
except SystemExit as _:
Log.alert("SIGTERM Detected! Stopping...")
finally:
self.stop()
示例9: main
# 需要导入模块: from mo_logs import Log [as 别名]
# 或者: from mo_logs.Log import alert [as 别名]
def main():
try:
settings = startup.read_settings()
constants.set(settings.constants)
Log.start(settings.debug)
branches = _get_branches_from_hg(settings.hg)
es = elasticsearch.Cluster(kwargs=settings.hg.branches).get_or_create_index(kwargs=settings.hg.branches)
es.add_alias()
es.extend({"id": b.name + " " + b.locale, "value": b} for b in branches)
Log.alert("DONE!")
except Exception as e:
Log.error("Problem with etl", e)
finally:
Log.stop()
示例10: worker
# 需要导入模块: from mo_logs import Log [as 别名]
# 或者: from mo_logs.Log import alert [as 别名]
def worker(please_stop):
seen_problem = False
while not please_stop:
request_time = (time.time() - timer.START)/60 # MINUTES
try:
response = requests.get("http://169.254.169.254/latest/meta-data/spot/termination-time")
seen_problem = False
if response.status_code not in [400, 404]:
Log.alert("Shutdown AWS Spot Node {{name}} {{type}}", name=machine_metadata.name, type=machine_metadata.aws_instance_type)
please_stop.go()
except Exception as e:
e = Except.wrap(e)
if "Failed to establish a new connection: [Errno 10060]" in e or "A socket operation was attempted to an unreachable network" in e:
Log.note("AWS Spot Detection has shutdown, probably not a spot node, (http://169.254.169.254 is unreachable)")
return
elif seen_problem:
# IGNORE THE FIRST PROBLEM
Log.warning("AWS shutdown detection has more than one consecutive problem: (last request {{time|round(1)}} minutes since startup)", time=request_time, cause=e)
seen_problem = True
(Till(seconds=61) | please_stop).wait()
(Till(seconds=11) | please_stop).wait()
示例11: not_monitor
# 需要导入模块: from mo_logs import Log [as 别名]
# 或者: from mo_logs.Log import alert [as 别名]
def not_monitor(self, please_stop):
Log.alert("metadata scan has been disabled")
please_stop.on_go(lambda: self.todo.add(THREAD_STOP))
while not please_stop:
c = self.todo.pop()
if c == THREAD_STOP:
break
if c.last_updated >= Date.now()-TOO_OLD:
continue
with Timer("Update {{col.es_index}}.{{col.es_column}}", param={"col": c}, silent=not DEBUG, too_long=0.05):
self.meta.columns.update({
"set": {
"last_updated": Date.now()
},
"clear": [
"count",
"cardinality",
"multi",
"partitions",
],
"where": {"eq": {"es_index": c.es_index, "es_column": c.es_column}}
})
示例12: daemon
# 需要导入模块: from mo_logs import Log [as 别名]
# 或者: from mo_logs.Log import alert [as 别名]
def daemon(please_stop):
Till.enabled = True
sorted_timers = []
try:
while not please_stop:
now = time()
with Till.locker:
later = Till.next_ping - now
if later > 0:
try:
sleep(min(later, INTERVAL))
except Exception as e:
Log.warning(
"Call to sleep failed with ({{later}}, {{interval}})",
later=later,
interval=INTERVAL,
cause=e
)
continue
with Till.locker:
Till.next_ping = now + INTERVAL
new_timers, Till.new_timers = Till.new_timers, []
if DEBUG and new_timers:
if len(new_timers) > 5:
Log.note("{{num}} new timers", num=len(new_timers))
else:
Log.note("new timers: {{timers}}", timers=[t for t, _ in new_timers])
sorted_timers.extend(new_timers)
if sorted_timers:
sorted_timers.sort(key=actual_time)
for i, rec in enumerate(sorted_timers):
t = actual_time(rec)
if now < t:
work, sorted_timers = sorted_timers[:i], sorted_timers[i:]
Till.next_ping = min(Till.next_ping, sorted_timers[0].timestamp)
break
else:
work, sorted_timers = sorted_timers, []
if work:
DEBUG and Log.note(
"done: {{timers}}. Remaining {{pending}}",
timers=[t for t, s in work] if len(work) <= 5 else len(work),
pending=[t for t, s in sorted_timers] if len(sorted_timers) <= 5 else len(sorted_timers)
)
for t, r in work:
s = r()
if s is not None:
s.go()
except Exception as e:
Log.warning("unexpected timer shutdown", cause=e)
finally:
DEBUG and Log.alert("TIMER SHUTDOWN")
Till.enabled = False
# TRIGGER ALL REMAINING TIMERS RIGHT NOW
with Till.locker:
new_work, Till.new_timers = Till.new_timers, []
for t, r in new_work + sorted_timers:
s = r()
if s is not None:
s.go()
示例13: update_spot_requests
# 需要导入模块: from mo_logs import Log [as 别名]
# 或者: from mo_logs.Log import alert [as 别名]
def update_spot_requests(self, utility_required):
spot_requests = self._get_managed_spot_requests()
# ADD UP THE CURRENT REQUESTED INSTANCES
all_instances = UniqueIndex("id", data=self._get_managed_instances())
self.active = active = wrap([r for r in spot_requests if r.status.code in RUNNING_STATUS_CODES | PENDING_STATUS_CODES | PROBABLY_NOT_FOR_A_WHILE | MIGHT_HAPPEN])
for a in active.copy():
if a.status.code == "request-canceled-and-instance-running" and all_instances[a.instance_id] == None:
active.remove(a)
used_budget = 0
current_spending = 0
for a in active:
about = self.price_lookup[a.launch_specification.instance_type, a.launch_specification.placement]
discount = coalesce(about.type.discount, 0)
Log.note(
"Active Spot Request {{id}}: {{type}} {{instance_id}} in {{zone}} @ {{price|round(decimal=4)}}",
id=a.id,
type=a.launch_specification.instance_type,
zone=a.launch_specification.placement,
instance_id=a.instance_id,
price=a.price - discount
)
used_budget += a.price - discount
current_spending += coalesce(about.current_price, a.price) - discount
Log.note(
"Total Exposure: ${{budget|round(decimal=4)}}/hour (current price: ${{current|round(decimal=4)}}/hour)",
budget=used_budget,
current=current_spending
)
remaining_budget = self.settings.budget - used_budget
current_utility = coalesce(SUM(self.price_lookup[r.launch_specification.instance_type, r.launch_specification.placement].type.utility for r in active), 0)
net_new_utility = utility_required - current_utility
Log.note("have {{current_utility}} utility running; need {{need_utility}} more utility", current_utility=current_utility, need_utility=net_new_utility)
if remaining_budget < 0:
remaining_budget, net_new_utility = self.save_money(remaining_budget, net_new_utility)
if net_new_utility < 0:
if self.settings.allowed_overage:
net_new_utility = Math.min(net_new_utility + self.settings.allowed_overage * utility_required, 0)
net_new_utility = self.remove_instances(net_new_utility)
if net_new_utility > 0:
net_new_utility = Math.min(net_new_utility, self.settings.max_new_utility)
net_new_utility, remaining_budget = self.add_instances(net_new_utility, remaining_budget)
if net_new_utility > 0:
Log.alert(
"Can not fund {{num|round(places=2)}} more utility (all utility costs more than ${{expected|round(decimal=2)}}/hour). Remaining budget is ${{budget|round(decimal=2)}} ",
num=net_new_utility,
expected=self.settings.max_utility_price,
budget=remaining_budget
)
# Give EC2 a chance to notice the new requests before tagging them.
Till(timeout=3).wait()
with self.net_new_locker:
for req in self.net_new_spot_requests:
req.add_tag("Name", self.settings.ec2.instance.name)
Log.note("All requests for new utility have been made")
self.done_spot_requests.go()
示例14: daemon
# 需要导入模块: from mo_logs import Log [as 别名]
# 或者: from mo_logs.Log import alert [as 别名]
def daemon(please_stop):
from mo_logs import Log
Till.enabled = True
sorted_timers = []
try:
while not please_stop:
now = time()
with Till.locker:
later = Till.next_ping - now
if later > 0:
try:
sleep(min(later, INTERVAL))
except Exception as e:
from mo_logs import Log
Log.warning(
"Call to sleep failed with ({{later}}, {{interval}})",
later=later,
interval=INTERVAL,
cause=e
)
continue
with Till.locker:
Till.next_ping = now + INTERVAL
new_timers, Till.new_timers = Till.new_timers, []
if DEBUG and new_timers:
Log.note("new timers: {{timers}}", timers=[t for t, s in new_timers])
sorted_timers.extend(new_timers)
if sorted_timers:
sorted_timers.sort(key=lambda r: r[0])
for i, (t, s) in enumerate(sorted_timers):
if now < t:
work, sorted_timers = sorted_timers[:i], sorted_timers[i:]
Till.next_ping = min(Till.next_ping, sorted_timers[0][0])
break
else:
work, sorted_timers = sorted_timers, []
if work:
if DEBUG:
Log.note(
"done: {{timers}}. Remaining {{pending}}",
timers=[t for t, s in work],
pending=[t for t, s in sorted_timers]
)
for t, s in work:
s.go()
except Exception as e:
Log.warning("timer shutdown", cause=e)
finally:
if DEBUG:
Log.alert("TIMER SHUTDOWN")
Till.enabled = False
# TRIGGER ALL REMAINING TIMERS RIGHT NOW
with Till.locker:
new_work, Till.new_timers = Till.new_timers, []
for t, s in new_work + sorted_timers:
s.go()
示例15: test_shutdown
# 需要导入模块: from mo_logs import Log [as 别名]
# 或者: from mo_logs.Log import alert [as 别名]
def test_shutdown(config, app):
# SHOULD NOT ACCEPT A SHUTDOWN COMMAND, WILL BREAK OTHER TESTS
url = "http://localhost:" + text_type(config.flask.port) + "/shutdown"
http.get(url)
Log.alert("/shutdown sent, should have no effect")