``` import json import traceback from datetime import datetime import requests from lifeguard import NORMAL from lifeguard import WARNING from lifeguard import CRITICAL from lifeguard import PROBLEM from lifeguard.infrastructure.mongodb import ( read_last_notification, read_settings, update_notification, ) from lifeguard.json import converter from lifeguard.logger import lifeguard_logger as logger from lifeguard.settings import ( EXTERNAL_PROXY, LIFEGUARD_ENV, SKIP_PROXY, TEAMS_CHAT_URL, status_link, ) PROXIES = {"https": EXTERNAL_PROXY} TEXT_WHEN_HEALTH_IS_NORMAL = "Parece que a situação da validação: <b>{}</b> foi normalizada.<br>Detalhes: {} </a><br><div style=\"border-radius: 25px;width:70px; text-align: center; border: 1px solid #5cb85c;float:right;margin-top: -40px\"><p style=\"color:#b32d00;\">{}</p></div>" TEXT_WHEN_HEALTH_IS_WARNING = "Parece que a validação: <b>{}</b> encontrou um problema.<br>Detalhes: {}</a><br><div style='border-radius: 25px;width:70px; text-align: center; border: 1px solid #b32d00;float:right;margin-top: -40px'><p style='color:#f0ad4e;'>{}</p></div>" TEXT_WHEN_HEALTH_IS_PROBLEM = "<div>Parece que a validação: <b>{}</b> encontrou um problema.<br>Detalhes: {}</a><br><div style='border-radius: 25px;width:70px; text-align: center; border: 1px solid #b32d00;float:right;margin-top: -40px'><p style='color:#b32d00;'>{}</p></div>" TEXT_WHEN_HEALTH_IS_CRITICAL = "<div>Parece que a validação: <b>{}</b> encontrou um problema.<br>Detalhes: {}</a><br><div style='border-radius: 25px;width:70px; text-align: center; border: 1px solid #b32d00;float:right;margin-top: -40px'><p style='color:#b32d00;'>{}</p></div>" problem = "<div> Parece que a validação <b>check_etcd_connection</b> encontrou um problema. <br>Detalhes: </a><br> <div style=\"border-radius: 25px;width:70px; text-align: center; border: 1px solid #b32d00;float:right;margin-top: -40px\"> <p style=\"color:#b32d00;\">Crítico</p> </div> </div>" def notify(notification_settings, bot_message, health_response): headers = {"Content-Type": "text/html; charset=UTF-8"} group_url = TEAMS_CHAT_URL if notification_settings["staging"]: return request_args = { "url": group_url, "headers": headers, "data": bot_message, } if not SKIP_PROXY: request_args["proxies"] = PROXIES response = requests.post(**request_args) content = response.content.decode("utf-8") update_notification(health_response.health, "notify_teams", health_response.status) logger.info("teams notification response %s: %s", response.status_code, content) def notify_teams(health_response): if LIFEGUARD_ENV != "production": return try: logger.info("notify teams in production") notification_settings = read_settings(health_response.health)["notification"] last_notification = read_last_notification( health_response.health, "notify_teams" ) bot_message = None current_status = NORMAL delta = datetime.now() - datetime.min if last_notification: delta = datetime.now() - last_notification["sent_at"] current_status = last_notification["status"] # when normal if health_response.status == NORMAL and current_status != NORMAL: logger.info("teams: closing notification") bot_message = TEXT_WHEN_HEALTH_IS_NORMAL.format( health_response.health, status_link(health_response.health), NORMAL ) # when warning if ( notification_settings["when"] == health_response.status and notification_settings["interval"] <= delta.seconds ): logger.info("teams: opening notification") prefix = TEXT_WHEN_HEALTH_IS_WARNING.format( health_response.health ) text = "{}<br>Detalhes: <a>{}</a><br>".format( prefix, status_link(status_link(health_response.health), status_link(health_response.health), WARNING) ) # when problem if health_response.status == PROBLEM: logger.info("teams: opening PROBLEM notification") text = TEXT_WHEN_HEALTH_IS_PROBLEM.format( health_response.health, status_link(health_response.health), PROBLEM ) bot_message = text # when critical if health_response.status == CRITICAL: text = TEXT_WHEN_HEALTH_IS_CRITICAL.format( status_link(health_response.health), status_link(health_response.health), CRITICAL ) bot_message = text if bot_message: notify(notification_settings, bot_message, health_response) except Exception as exception: logger.error( "error on execute notify_group action", extra={"traceback": traceback.format_exc()}, ) ```