lego-monitoring/archive-arch/send_ups_alert.py

42 lines
1.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
import asyncio
from os import environ
from sys import argv
from alerting import alerts
from alerting.enum import AlertType, Severity
type_priority_map = {
"ONLINE": Severity.INFO, # UPS is back online
"ONBATT": Severity.WARNING, # UPS is on battery
"LOWBATT": Severity.CRITICAL, # UPS is on battery and has a low battery (is critical)
"FSD": Severity.CRITICAL, # UPS is being shutdown by the primary (FSD = "Forced Shutdown")
"COMMOK": Severity.INFO, # Communications established with the UPS
"COMMBAD": Severity.WARNING, # Communications lost to the UPS
"SHUTDOWN": Severity.CRITICAL, # The system is being shutdown
"REPLBATT": Severity.WARNING, # The UPS battery is bad and needs to be replaced
"NOCOMM": Severity.WARNING, # A UPS is unavailable (cant be contacted for monitoring)
"NOPARENT": Severity.CRITICAL, # upsmon parent process died - shutdown impossible
"CAL": Severity.INFO, # UPS calibration in progress
"NOTCAL": Severity.INFO, # UPS calibration finished
"OFF": Severity.CRITICAL, # UPS administratively OFF or asleep
"NOTOFF": Severity.INFO, # UPS no longer administratively OFF or asleep
"BYPASS": Severity.WARNING, # UPS on bypass (powered, not protecting)
"NOTBYPASS": Severity.INFO, # UPS no longer on bypass
None: Severity.CRITICAL, # unknown alert type
}
async def main():
"""Sends an alert about a UPS event. Meant to be used from upsmon with NOTIFYCMD"""
if len(argv) != 2:
raise Exception("provide exactly one argument: alert message")
message = argv[1]
typestr = environ.get("NOTIFYTYPE", None)
severity = type_priority_map[typestr]
alert = alerts.Alert(alert_type=AlertType.UPS, message=message, severity=severity)
await alerts.send_alert(alert)
if __name__ == "__main__":
asyncio.run(main())