import logging as log from zabbix_utils import ZabbixAPI from config import conf from datetime import datetime, timedelta def get_active_problems() -> dict: api = ZabbixAPI(url=conf.zabbix.url, token=conf.zabbix.token) try: problems = api.problem.get( output=[ "eventid", "suppressed", "severity", ], ) event_ids = [] for problem in problems: if ( problem["suppressed"] == "0" and int(problem["severity"]) >= conf.zabbix.min_severity ): event_ids.append(problem["eventid"]) events = api.event.get( selectHosts=["host"], eventids=event_ids, output=[ "eventid", "name", "severity", ], ) events_dict = {"event_ids": []} for event in events: event["host"] = event.pop("hosts", None)[0]["host"] events_dict[event["eventid"]] = event events_dict["event_ids"].append(event["eventid"]) return events_dict except: log.warning("Get event from zabbix error") def event_acknowledge(event_id: int, mute_time: int): api = ZabbixAPI(url=conf.zabbix.url, token=conf.zabbix.token) if mute_time == 0: mute_to = 0 else: mute_to = int((datetime.now() + timedelta(hours=mute_time)).timestamp()) try: response = api.event.acknowledge( eventids=event_id, action=34, suppress_until=mute_to, ) if response: log.info(f"Event {event_id} acknowledged") return True except: log.warning(f"Acknowledge event {event_id} from zabbix error") return False def event_close(event_id: int): api = ZabbixAPI(url=conf.zabbix.url, token=conf.zabbix.token) try: response = api.event.acknowledge( eventids=event_id, action=1, ) print(response) if response: log.info(f"Event {event_id} closed") return True except: log.warning(f"Closed event {event_id} from zabbix error") return False