]> git.pld-linux.org Git - packages/nagios-alert-jabber.git/commitdiff
- added support for fallback between multiple source accounts
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Sun, 12 Jul 2009 08:10:54 +0000 (08:10 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    nagios-jabber.alert -> 1.15

nagios-jabber.alert

index fe409769cc615e63983886a8cfe7bc4c718fc540..be73d9963ca556c9a8398f5c381d45db625ee950 100644 (file)
@@ -6,8 +6,9 @@
 # glen@pld-linux.org,arekm@pld-linux.org, 2006-11-13 - added config file support
 # glen@pld-linux.org, 2006-12-07 - added html messages support (-x), thx goes to to jajcus
 # luzik@pld-linux.org, 2007-03 - added digest auth method(jabber.gda.pl)
+# arekm@pld-linux.org, 2009-07 - added fallback accounts support
 # usage:
-#   jabber.alert [-x] [-a account_id] [-J from_jid -P password] to_jid1 to_jid2 to_jid3
+#   jabber.alert [-x] [-a account_id][,otheraccount_id] [-J from_jid -P password] to_jid1 to_jid2 to_jid3
 
 import os
 import re
@@ -26,40 +27,45 @@ from pyxmpp.streamtls import TLSSettings
 try:
        opts, args = getopt.getopt(sys.argv[1:], "J:P:a:dx")
 except getopt.GetoptError, e:
-       print "%s: %s " % (sys.argv[0], e)
+       print >> sys.stderr, "%s: %s " % (sys.argv[0], e)
        sys.exit(1)
 
-jid = None
-password = None
+jids = []
 html = False
 debug = False
 
+tjid = None
 for o, a in opts:
        if o == '-d':
                debug = True
        if o == '-x':
                html = True
        if o == '-J':
-               jid = a
+               tjid = a
        if o == '-P':
-               password = a
+               jids.append({ 'jid': tjid, 'password': a })
        if o == '-a':
                import ConfigParser
 
                config = ConfigParser.ConfigParser()
                config.read('/etc/nagios/jabber-notify.ini')
 
-               jid = config.get(a, 'jid')
-               password = config.get(a, 'password')
+               for section in a.split(','):
+                       jids.append({ 'jid': config.get(section, 'jid'), 'password': config.get(section, 'password')})
 
 recpt = args
 
-if jid == None or password == None:
-       print "%s: jid (-J) and password (-P) are required" % sys.argv[0]
+for section in jids:
+       if not section['jid'] or not section['password']:
+               print >> sys.stderr, "%s: jid (-J) and password (-P) are required for `%s'" % (sys.argv[0], section)
+               sys.exit(1)
+
+if not jids:
+       print >> sys.stderr, "%s: no configured jid accounts found" % sys.argv[0]
        sys.exit(1)
 
-if recpt == None or len(recpt) == 0:
-       print "%s: recipient jids are required" % sys.argv[0]
+if not recpt:
+       print >> sys.stderr, "%s: recipient jids are required" % sys.argv[0]
        sys.exit(1)
 
 if debug:
@@ -68,8 +74,6 @@ if debug:
        logger.setLevel(logging.DEBUG)
 
 subject = "Nagios alert"
-server = None
-port = None
 
 body = ""
 stdin_body = ""
@@ -84,10 +88,6 @@ if len(body.strip()) == 0:
 
 message_type = 'chat'
 
-jid = JID(jid)
-if not jid.resource:
-       jid = JID(jid.node, jid.domain, "Nagios")
-
 class Client(JabberClient):
        def session_started(self):
                if (html == True):
@@ -117,12 +117,27 @@ class Client(JabberClient):
                if debug:
                        print "*** State changed: %s %r ***" % (state,arg)
 
-
-c = Client(jid, password, server = server, port = port, auth_methods = ['sasl:DIGEST-MD5', 'sasl:PLAIN', 'digest'], tls_settings = TLSSettings(require = False, verify_peer = False))
-c.connect()
-try:
-       c.loop(1)
-except Exception, e:
-       print "ERROR: %s" % e
-       c.disconnect()
-c.disconnect()
+err = []
+for section in jids:
+       jid = JID(section['jid'])
+       if not jid.resource:
+               jid = JID(jid.node, jid.domain, "Nagios")
+
+       c = Client(jid, section['password'], auth_methods = ['sasl:DIGEST-MD5', 'sasl:PLAIN', 'digest'],
+                       tls_settings = TLSSettings(require = False, verify_peer = False))
+       try:
+               c.connect()
+               try:
+                       c.loop(1)
+               except Exception, e:
+                       err.append("ERROR1: %s: %s" % (section['jid'], e))
+                       c.disconnect()
+                       continue
+               c.disconnect()
+               # stop after first succeeded attempt
+               sys.exit(0)
+       except Exception, e:
+               err.append("ERROR2: %s: %s" % (section['jid'], e))
+
+print >> sys.stderr, "\n".join(err)
+sys.exit(1)
This page took 0.607685 seconds and 4 git commands to generate.