Skip to content

Instantly share code, notes, and snippets.

@reshefm
Created March 4, 2013 15:02
Show Gist options
  • Save reshefm/5082815 to your computer and use it in GitHub Desktop.
Save reshefm/5082815 to your computer and use it in GitHub Desktop.
from supervisor import childutils
import sys
import graypy
import logging
class GraylogNotifier(object):
def __init__(self, graylog_server):
self.logger = logging.getLogger('supervisord')
self.logger.addHandler(graypy.GELFHandler(graylog_server, 12201))
def run(self):
while True:
headers, payload = childutils.listener.wait()
sys.stderr.write(str(headers) + '\n')
sys.stderr.write(str(payload) + '\n')
if headers['eventname'] == 'PROCESS_STATE_EXITED':
payload = dict(v.split(':') for v in payload.split(' '))
if not int(payload['expected']):
adapter = logging.LoggerAdapter(self.logger, {'service': payload['processname']})
adapter.error('{} service has crashed unexpectedly.'.format(payload['processname']))
elif headers['eventname'] == 'PROCESS_LOG_STDERR':
payload, data = payload.split('\n', 1)
data = data.replace('\n', ' --- ')
payload = dict(v.split(':') for v in payload.split(' '))
adapter = logging.LoggerAdapter(self.logger, {'service': payload['processname']})
adapter.error(str(data))
childutils.listener.ok()
sys.stderr.flush()
if __name__ == '__main__':
graylog_server = sys.argv[1]
graylog_notifer = GraylogNotifier(graylog_server)
graylog_notifer.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment