1
0

snmp_notifier.py 1.4 KB

1234567891011121314151617181920212223242526272829
  1. #ident "@(#)$Format:LocalFoodAI_lanfr144:snmp_notifier.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
  2. import os
  3. import socket
  4. #ident "@(#)$Format:LocalFoodAI_lanfr144:snmp_notifier.py:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
  5. import socket
  6. class SNMPNotifier:
  7. def __init__(self, target_host=None, target_port=162):
  8. self.target_host = target_host or os.environ.get('ZABBIX_HOST', '192.168.130.170')
  9. self.target_port = target_port
  10. self.user = os.environ.get('ZABBIX_SNMP_USER', '')
  11. self.auth_key = os.environ.get('ZABBIX_SNMP_AUTHKEY', '')
  12. self.priv_key = os.environ.get('ZABBIX_SNMP_PRIVKEY', '')
  13. def send_alert(self, message):
  14. if os.environ.get('NETWORK_MODE', 'server') == 'local':
  15. print(f"[OFFLINE MODE] Suppressed SNMP trap: {message}")
  16. return
  17. try:
  18. # Using the standard snmptrap CLI which is more stable than pysnmp v7
  19. hostname = socket.gethostname()
  20. safe_message = str(message).replace("'", "").replace('"', '')
  21. cmd = f"snmptrap -v3 -l authPriv -u {self.user} -a SHA -A {self.auth_key} -x AES -X {self.priv_key} {self.target_host}:{self.target_port} '' 1.3.6.1.4.1.8072.3.2.10 1.3.6.1.2.1.1.1.0 s '[{hostname}] {safe_message}'"
  22. os.system(cmd)
  23. except Exception as e:
  24. print(f"Failed to send SNMPv3 trap: {e}")
  25. # Singleton instance
  26. notifier = SNMPNotifier()