Thread: [Mon-commit] mon-contrib/alerts/sms/bulksms README,NONE,1.1 bulksms.alert.py,NONE,1.1 bulksms.conf,N
Brought to you by:
trockij
|
From: Jim T. <tr...@us...> - 2005-09-18 12:40:04
|
Update of /cvsroot/mon/mon-contrib/alerts/sms/bulksms In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28216/bulksms Added Files: README bulksms.alert.py bulksms.conf Log Message: added bulksms from Aled Treharne <ale...@gm...> --- NEW FILE: README --- Date: Thu, 15 Sep 2005 14:41:09 +0100 From: Aled Treharne <ale...@gm...> To: mo...@li... Subject: New alert for sending sms alerts through www.bulksms.co.uk Hi. To get around a problem we have here, I've written an alert script which uses bulksms.co.uk to send sms messages to preconfigured mobiles phones for alerting. It's attached, however a few caveats: 1) I'm a python geek, not a perl geek, so it's written in python. Sorry. :) 2) It requires the BulkSMS API as found on their site as well as a few other python bits. 3) It uses FreeBSD assumptions for file locations. Any problems, please let me know. Thanks, Aled. _______________________________________________ mon mailing list mo...@li... http://linux.kernel.org/mailman/listinfo/mon --- NEW FILE: bulksms.conf --- [BulkSMS] # Defaults for all BulkSMS operations # Your BulkSMS user details username: boxuk password: 0ffice # Which is your preferred cost route - see http://www.bulksms.co.uk/w/pricing.htm default_cost_route: 1 # From address # Not necessarily honoured, see BulkSMS documentation # ' delimited string source: '447956548902' # Recipients, specified as a python list recipients: ['447956548902'] --- NEW FILE: bulksms.alert.py --- #!/usr/local/bin/python ''' bulksms.alert - Alert script for mon to pass SMS messages to the www.bulksms.co.uk system. ''' import BulkSMS # API for Bulksms.co.uk - see import ConfigParser import os import getopt import sys import string import time # Keep the main settings in a config file so that we can share them # Look in /usr/local/etc/mon/bulksms.conf and ./bulksms.conf def get_config(): # Set all of our default config options # NB: During testing, pretend is default settings = ConfigParser.ConfigParser() settings.read(['/usr/local/etc/mon/bulksms.conf','./bulksms.conf']) config = { 'userid' : settings.get('BulkSMS','username'), 'password' : settings.get('BulkSMS','password'), 'cost' : settings.get('BulkSMS','default_cost_route'), 'from' : settings.get('BulkSMS','source'), 'recipients' : string.split(settings.get('BulkSMS','recipients'),','), 'LAST_SUMMARY' : os.getenv('MON_LAST_SUMMARY'), 'LAST_OUTPUT' : os.getenv('MON_LAST_OUTPUT'), 'LAST_FAILURE' : os.getenv('MON_LAST_FAILURE'), 'FIRST_FAILURE' : os.getenv('MON_FIRST_FAILURE'), 'LAST_SUCCESS' : os.getenv('MON_LAST_SUCCESS'), 'DESCRIPTION' : os.getenv('MON_DESCRIPTION'), 'GROUP' : os.getenv('MON_GROUP'), 'SERVICE' : os.getenv('MON_SERVICE'), 'RETVAL' : os.getenv('MON_RETVAL'), 'OPSTATUS' : os.getenv('MON_OPSTATUS'), 'ALERTTYPE' : os.getenv('MON_ALERTTYPE'), 'TRAP_INTENDED' : os.getenv('MON_TRAP_INTENDED'), 'LOGDIR' : os.getenv('MON_LOGDIR'), 'STATEDIR' : os.getenv('MON_STATEDIR'), 'subject' : sys.stdin.readline(), 'hosts' : '', 'alertevery' : '', 'trap_timeout' : 0, 'time' : '', 'trap_triggered': 0, 'upalert': 0 } short_opt = 's:g:h:l:Ot:Tu?' try: (opts, extras) = getopt.getopt(sys.argv[1:], short_opt) except getopt.GetoptError, ex: raise UsageError, ex debug(opts) debug(extras) debug(sys.argv) for item in opts: if item[0] == '-s': config['SERVICE'] = item[1] elif item[0] == '-g': config['GROUP'] = item[1] elif item[0] == '-h': config['hosts'] = item[1] elif item[0] == '-l': config['alertevery'] = item[1] elif item[0] == '-O': config['trap_timeout'] = 1 elif item[0] == '-t': if item[1].isdigit(): config['time'] = time.ctime(float(item[1])) else: raise RuntimeError, 'Type mismatch on time parameter: not float' elif item[0] == '-T': config['trap_triggered'] = 1 elif item[0] == '-u': config['upalert'] = 1 elif item[0] == '-?': raise UsageError, 'Help requested' else: raise RuntimeError, 'Error in parameters' return config def debug(message): debug=1 errlog = open('/tmp/bulksms.log','a') if debug: errlog.write('%s\n' % message) errlog.close() def usage(ex): if str(ex) == 'Help requested': print __doc__ elif str(ex) == 'Version information requested': version_info() else: sys.stderr.write("\n%s\n" % __doc__) sys.stderr.write("Error: %s\n" % str(ex)) def version_info(): version = "%s v%s" % (os.path.basename(sys.argv[0]), __version__) print version class UsageError(Exception): pass # Here endeth the standard lesson...er...section. ################################################ # Ok, up until this point it's all been stuff about making this pretty. # Here's where the actual guts of the thing starts. # The main bit. def main(): #Get the config sorted debug('started') config=get_config() debug('Got config.') debug(config) #Set up our BulkSMS interface sms = BulkSMS.BulkSMS(config['userid'],config['password']) sms.cost_route = config['cost'] if config['upalert']: message = 'UPALERT %s/%s: %s is now showing OK' % ( config['GROUP'], config['SERVICE'], config['hosts'] ) else: message = 'ALERT %s/%s: %s (Last tested OK %s)' % ( config['GROUP'], config['SERVICE'], config['hosts'], config['LAST_SUCCESS']) debug(message) ## fd = open('/tmp/output.test','w') ## debug(fd) msgid = sms.send_sms(config['recipients'], message, sender = config['from']) debug(msgid) ## fd.write(message) ## fd.write('%s' % msgid) ## fd.close # EOG (End of Guts - the end of the guts of the application) # This is the main application. It does nothing except pump us back up # into where we should be and raise a usage exception if something screwed up. if __name__ == '__main__': try: main() except UsageError, ex: usage(ex) |