From 1745ad0be459aea850a1fcbae557a0c0e1f38b37 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 4 Feb 2017 11:34:47 +0100 Subject: [PATCH] New scripts for Icinga and Observium --- icinga_host_notify.py | 45 +++++++++++++++++++++++ observium_sms.py | 27 ++++++++++++++ send_sms.py | 83 ------------------------------------------- 3 files changed, 72 insertions(+), 83 deletions(-) create mode 100755 icinga_host_notify.py create mode 100755 observium_sms.py delete mode 100755 send_sms.py diff --git a/icinga_host_notify.py b/icinga_host_notify.py new file mode 100755 index 0000000..79b5a21 --- /dev/null +++ b/icinga_host_notify.py @@ -0,0 +1,45 @@ +#!/usr/bin/python3 + +import logging +import os +from pydbus import SystemBus +from gi.repository import GLib +import sms_functions + +def assemble_sms(): + str_list = [] + str_list.append("Icinga {}\n".format(os.environ.get('NOTIFICATIONTYPE'))) + str_list.append("{} is {} [{}]\n".format(os.environ.get('HOSTALIAS'), os.environ.get('HOSTSTATE'), os.environ.get('HOSTADDRESS'))) + str_list.append("since {}\n".format(os.environ.get('LASTSTATECHANGE'))) + str_list.append("Comment: [{}] {}".format(os.environ.get('NOTIFICATIONAUTHORNAME'), os.environ.get('NOTIFICATIONCOMMENT'))) + return ''.join(str_list) + +# Setup logging +logfile = "/opt/sms/sms.log" +FORMAT = '%(asctime)-15s %(message)s' +logging.basicConfig(format=FORMAT,filename=logfile,level=10) +logger = logging.getLogger('observiumsms') + +# check param +smsrcpt = os.environ.get('USERMOBILE') +if not smsrcpt: + logger.error('No SMS number given') + raise Exception('No SMS number given for message') + +# Assemble SMS +smsstring = assemble_sms() +logger.info("Sending SMS: %s", smsstring) + +success = False +retries = 0 +max_retries = 3 + +while not success and retries < max_retries: + retries += 1 + try: + # Contact ModemManager, unlock SIM and send SMS to emergency numbers + sms_functions.send_sms([ smsrcpt ], smsstring) + except sms_functions.ModemManagerError as err: + logger.error('Error when sending SMS: {0}'.format(e.value)) + else: + success = True diff --git a/observium_sms.py b/observium_sms.py new file mode 100755 index 0000000..8c63e48 --- /dev/null +++ b/observium_sms.py @@ -0,0 +1,27 @@ +#!/usr/bin/python3 + +import logging +import os +from pydbus import SystemBus +from gi.repository import GLib +import sms_functions + +def assemble_sms(): + str_list = [] + str_list.append("Observium {}\n".format(os.environ.get('OBSERVIUM_TITLE'))) + str_list.append("{} [{}]\n".format(os.environ.get('OBSERVIUM_ENTITY_NAME'), os.environ.get('OBSERVIUM_ENTITY_DESCRIPTION'))) + str_list.append("{}".format(os.environ.get('OBSERVIUM_DURATION'))) + return ''.join(str_list) + +# Setup logging +logfile = "/opt/sms/sms.log" +FORMAT = '%(asctime)-15s %(message)s' +logging.basicConfig(format=FORMAT,filename=logfile,level=10) +logger = logging.getLogger('observiumsms') + +# Assemble SMS +smsstring = assemble_sms() +logger.info("Sending SMS: %s", smsstring) + +# Contact ModemManager, unlock SIM and send SMS to emergency numbers +sms_functions.send_sms(, smsstring) diff --git a/send_sms.py b/send_sms.py deleted file mode 100755 index a92439a..0000000 --- a/send_sms.py +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/python3 - -import logging -import os -from pydbus import SystemBus -from gi.repository import GLib - -def assemble_sms(): - str_list = [] - str_list.append("Observium {}\n".format(os.environ.get('OBSERVIUM_TITLE'))) - str_list.append("{} [{}]\n".format(os.environ.get('OBSERVIUM_ENTITY_NAME'), os.environ.get('OBSERVIUM_ENTITY_DESCRIPTION'))) - str_list.append("{}".format(os.environ.get('OBSERVIUM_DURATION'))) - return ''.join(str_list) - -# Setup logging -logfile = "/opt/sms/sms.log" -FORMAT = '%(asctime)-15s %(message)s' -logging.basicConfig(format=FORMAT,filename=logfile,level=10) -logger = logging.getLogger('observiumsms') - -# Path to file with SMS numbers -emergency_file = "/opt/sms/emergency_numbers.txt" - -# Assemble SMS -smsstring = assemble_sms() -logger.info("Sending SMS: %s", smsstring) - -# Contact ModemManager, unlock SIM and send SMS to emergency numbers -with SystemBus() as bus: - mm = bus.get('.ModemManager1') - modems = mm.GetManagedObjects() - modem_path = list(modems.keys())[0] - - logger.info("Going with %s", modem_path) - modem = bus.get(".ModemManager1", modem_path) - - sim_path = modem.Sim - if not sim_path: - logger.critical("No SIM") - quit() - - # unlock SIM, if not alreadY - props = modem.GetStatus() - print(props) - if props and props['state'] == 2: - logger.info("Trying to unlock %s", sim_path) - sim = bus.get('.ModemManager1', sim_path) - sim.SendPin("1234", timeout=10000) - props = modem.GetStatus() - if props and props['state'] == 2: - logger.critical("Wrong PIN!") - quit() - - # enable the modem - modem.Enable(True) - - # test sending SMS - modem_msg = modem['org.freedesktop.ModemManager1.Modem.Messaging'] - smses = modem_msg.List() - - print(modem.GetStatus()['signal-quality']) - - raise Exception('TODO phone numbers') - - for line in fnums: - line = line.strip() - if not line: - continue - - logger.info("Creating new SMS for %s", line) - smstext = GLib.Variant('s', smsstring) - smsnumber = GLib.Variant('s', line) - - dictsms = { 'text': smstext, 'number': smsnumber } - - msgpath = modem_msg.Create(dictsms) - logger.info("Created new SMS %s", msgpath) - - logger.info("Sending SMS %s", msgpath) - sms = bus.get(".ModemManager1", msgpath) - sms.Send(timeout=30000) - - logger.info("SMS %s state %s", msgpath, sms.State)