from typing import Tuple from azure.identity import ClientSecretCredential from azure.mgmt.alertsmanagement import AlertsManagementClient from app import app from app.alarms import get_proxy_alarm from app.models.alarms import AlarmState from app.models.mirrors import Proxy from app.terraform import BaseAutomation class AlarmProxyAzureCdnAutomation(BaseAutomation): short_name = "monitor_proxy_azure_cdn" description = "Import alarms for Azure CDN proxies" def automate(self, full: bool = False) -> Tuple[bool, str]: credential = ClientSecretCredential( tenant_id=app.config['AZURE_TENANT_ID'], client_id=app.config['AZURE_CLIENT_ID'], client_secret=app.config['AZURE_CLIENT_SECRET']) client = AlertsManagementClient( credential, app.config['AZURE_SUBSCRIPTION_ID'] ) firing = [x.name[len("bandwidth-out-high-bc-"):] for x in client.alerts.get_all() if x.name.startswith("bandwidth-out-high-bc-") and x.properties.essentials.monitor_condition == "Fired"] for proxy in Proxy.query.filter( Proxy.provider == "azure_cdn", Proxy.destroyed == None ): alarm = get_proxy_alarm(proxy.id, "bandwidth-out-high") if proxy.origin.group.group_name.lower() not in firing: alarm.update_state(AlarmState.OK, "Azure monitor alert not firing") else: alarm.update_state(AlarmState.CRITICAL, "Azure monitor alert firing") return True, ""