[packages/nagios-alert-jabber] rel 8; try a second send if there's a resource name conflict
mmazur
mmazur at pld-linux.org
Tue Nov 27 13:57:13 CET 2012
commit 257cdecd13da28d11f59cc7b6e51262c292cbcb9
Author: Mariusz Mazur <mmazur at pld-linux.org>
Date: Tue Nov 27 13:53:40 2012 +0100
rel 8; try a second send if there's a resource name conflict
If sending fails due to stream error, most likely due to a resource name
conflict, wait a second and try to send again with a randomized resource
name.
For jabber clients with <thread> support these two past changes won't be
noticeable, however for the rest they'll mean that 99% of the times
msgs come from a constant jid/resource pair with only a very occasional
msg coming from a randomized resource.
nagios-alert-jabber.spec | 2 +-
nagios-jabber.alert | 61 ++++++++++++++++++++++++++++++++++--------------
2 files changed, 44 insertions(+), 19 deletions(-)
---
diff --git a/nagios-alert-jabber.spec b/nagios-alert-jabber.spec
index 0ba5e6a..3f23d4f 100644
--- a/nagios-alert-jabber.spec
+++ b/nagios-alert-jabber.spec
@@ -2,7 +2,7 @@ Summary: Program to send (Nagios) alerts via jabber
Summary(pl.UTF-8): Program do wysyłania alarmów (Nagiosa) przez jabbera
Name: nagios-alert-jabber
Version: 1.2
-Release: 7
+Release: 8
License: GPL
Group: Networking
Source0: nagios-jabber.alert
diff --git a/nagios-jabber.alert b/nagios-jabber.alert
index d426c90..7183f10 100644
--- a/nagios-jabber.alert
+++ b/nagios-jabber.alert
@@ -11,6 +11,7 @@
# jabber.alert [-x] [-a account_id][,otheraccount_id] [-t timeout ] [-J from_jid -P password] to_jid1 to_jid2 to_jid3
import os
+import hashlib
import re
import sys
import getopt
@@ -94,6 +95,12 @@ if len(body.strip()) == 0:
message_type = 'chat'
+class XMPPStreamError(Exception):
+ def __init__(self, msg):
+ self.msg = msg
+ def __str__(self):
+ return self.msg
+
class Client(JabberClient):
def session_started(self):
if (html == True):
@@ -105,7 +112,6 @@ class Client(JabberClient):
message = body
for r in recpt:
-
jid_r = JID(r)
msg = Message(to_jid = jid_r, body = message, subject = subject,
stanza_type = message_type, thread = "Nagios")
@@ -124,27 +130,46 @@ class Client(JabberClient):
if debug:
print "*** State changed: %s %r ***" % (state,arg)
+ def stream_error(self,err):
+ raise XMPPStreamError(err.get_message())
+
+
err = []
for section in jids:
- jid = JID(section['jid'])
- if not jid.resource:
- jid = JID(jid.node, jid.domain, "Nagios/%d" % os.getpid())
-
- c = Client(jid, section['password'], auth_methods = ['sasl:DIGEST-MD5', 'sasl:PLAIN', 'digest'],
- tls_settings = TLSSettings(require = False, verify_peer = False))
- try:
- c.connect()
+ for attempt in ('first', 'second'):
+ jid = JID(section['jid'])
+ resource = "Nagios/" + hashlib.md5(''.join(recpt)).hexdigest()[:10]
+ if attempt == 'second':
+ # if something went wrong the second time around, it's
+ # most likely a resource name conflict on login, so let's
+ # wait a bit, randomize the resource name and try again
+ resource = resource + '/' + repr(os.getpid())
+ time.sleep(0.8)
+ if not jid.resource:
+ jid = JID(jid.node, jid.domain, resource)
+
+ c = Client(jid, section['password'], auth_methods = ['sasl:DIGEST-MD5', 'sasl:PLAIN', 'digest'],
+ tls_settings = TLSSettings(require = False, verify_peer = False))
try:
- c.loop(1)
- except Exception, e:
- err.append("ERROR1: %s: %s" % (section['jid'], e))
+ c.connect()
+ try:
+ c.loop(1)
+ except XMPPStreamError, e:
+ # Most likely a duplicate stream problem
+ # don't log anything, just try again
+ c.disconnect()
+ continue
+ except Exception, e:
+ err.append("ERROR1: %s: %s" % (section['jid'], e))
+ c.disconnect()
+ # don't try another attempt, jump straigt to
+ # another section
+ break
c.disconnect()
- continue
- c.disconnect()
- # stop after first succeeded attempt
- sys.exit(0)
- except Exception, e:
- err.append("ERROR2: %s: %s" % (section['jid'], e))
+ # stop after first successful attempt at sending the msg
+ sys.exit(0)
+ except Exception, e:
+ err.append("ERROR2: %s: %s" % (section['jid'], e))
print >> sys.stderr, "\n".join(err)
sys.exit(1)
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/nagios-alert-jabber.git/commitdiff/257cdecd13da28d11f59cc7b6e51262c292cbcb9
More information about the pld-cvs-commit
mailing list