#!/usr/bin/env python import sys import optparse from os import path sys.path.append(path.join(path.dirname(__file__), '..')) import humbug # Nagios passes the notification details as command line options. # In Nagios, "output" means "first line of output", and "long # output" means "other lines of output". parser = optparse.OptionParser() parser.add_option('--output', default='') parser.add_option('--long-output', default='') for opt in ('type', 'host', 'service', 'state'): parser.add_option('--' + opt) (opts, args) = parser.parse_args() msg = dict(type='stream', to='nagios') # Set a subject based on the host or service in question. This enables # threaded discussion of multiple concurrent issues, and provides useful # context when narrowed. # # We send PROBLEM and RECOVERY messages to the same subject. if opts.service is None: # Host notification thing = 'host' msg['subject'] = 'host %s' % (opts.host,) else: # Service notification thing = 'service' msg['subject'] = 'service %s on %s' % (opts.service, opts.host) # e.g. **PROBLEM**: service is CRITICAL msg['content'] = '**%s**: %s is %s' % (opts.type, thing, opts.state) # The "long output" can contain newlines represented by "\n" escape sequences. # The Nagios mail command uses /usr/bin/printf "%b" to expand these. # We will be more conservative and handle just this one escape sequence. output = (opts.output + '\n' + opts.long_output.replace(r'\n', '\n')).strip() if output: # Block-quote any command output. msg['content'] += ('\n\n' + '\n'.join('> ' + ln for ln in output.splitlines())) client = humbug.HumbugAPI( email = 'humbug+nagios@humbughq.com', api_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', site = 'https://staging.humbughq.com') client.send_message(msg)