def judge_and_alert(instance):
def _get_query_datas():
# ??????????ES????
alert_items = get_alert_items()
_query_constructor = partial(
get_alert_type_strategy_and_query_body, hostname=instance)
return map(_query_constructor, alert_items)
querys = _get_query_datas()
strategys = {q['alertname']: q['strategy'] for q in querys}
# alertname?key???es??????value
workdic = {q['alertname']: send_es_query(q['query_body']) for q in querys}
# ?????????ES????
waiter = gen.WaitIterator(**workdic)
while not waiter.done():
try:
es_ret = yield waiter.next()
except Exception as e:
logging.error(e, exc_info=True)
else:
alertname = waiter.current_index
# ?????es????
alert_content = yield judge_result_and_make_alert_msg(alertname,
strategys[alertname],
json.loads(es_ret))
# ???????????
if alert_content.get('body'):
receive_group = strategys[alertname]['contact_group']
alert_level = strategys[alertname]['level']
alerting = Alert(receive_group, alert_level, alert_content)
# ???????
yield alerting.send()
评论列表
文章目录