Merge lp:~pconnell/endroid/pinger into lp:endroid

Proposed by Phil Connell
Status: Merged
Approved by: Paul Stanley
Approved revision: 102
Merged at revision: 98
Proposed branch: lp:~pconnell/endroid/pinger
Merge into: lp:endroid
Diff against target: 88 lines (+28/-11)
4 files modified
debian/changelog (+8/-0)
etc/init/endroid.conf (+1/-1)
setup.py (+1/-1)
src/endroid/plugins/periodicpinger.py (+18/-9)
To merge this branch: bzr merge lp:~pconnell/endroid/pinger
Reviewer Review Type Date Requested Status
Phil Connell Approve
Review via email: mp+238291@code.launchpad.net

This proposal supersedes a proposal from 2014-10-14.

Commit message

Improve reliability of periodic pinger

- Handle failures in wokkel/twisted (endroid bug 1380972)
- Log unexpected async errors for triageability
- Use addCallbacks so that errback is actually called!

Also tweak debian service file to log messages from twisted using the logging infra (rather than stderr).

Description of the change

Edit:
  - Tweak debian service config file, so that messages from twisted (e.g. unhandled deferred failure) are logged.
  - Fix bug in ping error handling.
  - Log StanzaErrors as debug rather than errors.

Improve reliability of periodic pinger

- Handle failures in wokkel/twisted (endroid bug 1380972)
- Log async errors for triageability
- Use addCallbacks so that errback is actually called!

To post a comment you must log in.
Revision history for this message
Phil Connell (pconnell) wrote : Posted in a previous version of this proposal

Ping to webex conference server *always* fails, so unconditional move to error logging in errback is no good.

root DEBUG Failed to ping conference.isj3.webex.com: StanzaError with condition u'bad-request'"

review: Needs Fixing
Revision history for this message
Paul Stanley (paul-stanley) : Posted in a previous version of this proposal
Revision history for this message
Phil Connell (pconnell) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'debian/changelog'
--- debian/changelog 2014-10-10 11:19:50 +0000
+++ debian/changelog 2014-10-14 12:34:13 +0000
@@ -1,3 +1,11 @@
1endroid (1.4.6) trusty; urgency=medium
2
3 * Bugfixes and robustness improvements for periodic pinger.
4 * When started as a debian service, log twisted messages to the endroid
5 logfile.
6
7 -- Phil Connell <phil.connell@ensoft.co.uk> Tue, 14 Oct 2014 13:33:00 +0100
8
1endroid (1.4.5) trusty; urgency=medium9endroid (1.4.5) trusty; urgency=medium
210
3 * Fix endroid_remote watch.11 * Fix endroid_remote watch.
412
=== modified file 'etc/init/endroid.conf'
--- etc/init/endroid.conf 2014-09-15 16:45:29 +0000
+++ etc/init/endroid.conf 2014-10-14 12:34:13 +0000
@@ -1,7 +1,7 @@
1description "EnDroid XMPP bot"1description "EnDroid XMPP bot"
2author "Ensoft Limited"2author "Ensoft Limited"
33
4exec /usr/bin/endroid -L /var/log/endroid.log --config /etc/endroid/endroid.conf4exec /usr/bin/endroid --logtwisted -L /var/log/endroid.log --config /etc/endroid/endroid.conf
5start on net-device-up5start on net-device-up
6stop on stopping network6stop on stopping network
7stop on starting shutdown7stop on starting shutdown
88
=== modified file 'setup.py'
--- setup.py 2014-10-10 11:19:50 +0000
+++ setup.py 2014-10-14 12:34:13 +0000
@@ -24,7 +24,7 @@
2424
2525
26setup(name='endroid',26setup(name='endroid',
27 version="1.4.5",27 version="1.4.6",
28 description='EnDroid: a modular XMPP bot',28 description='EnDroid: a modular XMPP bot',
29 url='http://open.ensoft.co.uk/EnDroid',29 url='http://open.ensoft.co.uk/EnDroid',
30 packages=[30 packages=[
3131
=== modified file 'src/endroid/plugins/periodicpinger.py'
--- src/endroid/plugins/periodicpinger.py 2014-10-02 12:51:59 +0000
+++ src/endroid/plugins/periodicpinger.py 2014-10-14 12:34:13 +0000
@@ -12,9 +12,11 @@
1212
1313
14import logging14import logging
15import functools
15import itertools16import itertools
1617
17import twisted.internet.task18import twisted.internet.task
19from twisted.words.protocols.jabber.error import StanzaError
1820
19from endroid.pluginmanager import Plugin21from endroid.pluginmanager import Plugin
2022
@@ -64,16 +66,23 @@
6466
65 for server in self.servers:67 for server in self.servers:
66 def _fail(fail, server):68 def _fail(fail, server):
67 # If the server returns an error then we don't really care, 69 if fail.check(StanzaError):
68 # since all we want to do is ensure server-to-server 70 # Some servers that don't support c2s pings return 'bad
69 # connections are kept open by sending ping traffic and we have 71 # request' rather than 'not supported'. This still serves
70 # achieved this. So just log for debugging purposes.72 # the keep-the-connection alive purpose, so don't log as an
71 logging.debug("Failed to ping {}: {}"73 # error.
72 .format(server, str(fail.value)))74 logger = self.log.debug
75 else:
76 logger = self.log.error
77 logger("Failed to ping {}: {}".format(server, fail.value))
73 def _success(response):78 def _success(response):
74 pass79 pass
75 d = self.usermanagement.ping(server)80 try:
76 d.addCallback(_success)81 d = self.usermanagement.ping(server)
77 d.addErrback(_fail, server)82 except Exception:
83 self.log.exception("Failed to send ping to {}:".format(server))
84 else:
85 d.addCallbacks(_success,
86 functools.partial(_fail, server=server))
7887
7988

Subscribers

People subscribed via source and target branches