#!/usr/bin/env python import os import json import urllib import urllib2 from munin import MuninPlugin class HookboxPlugin(MuninPlugin): title = 'hookbox' args = "--base 1000" vlabel = "Y" info = "Subscribed users" scale = False def get_channels(self): return os.environ.get('HOOKBOX_CHANNELS', '').split(',') def get_url(self): return os.environ.get('HOOKBOX_URL', 'http://localhost:8001/rest') def get_secret(self): return os.environ.get('HOOKBOX_SECRET', '') @property def fields(self): return ( (channel, dict( label=channel, info="%s - users" % channel, type="GAUGE", )) for channel in self.get_channels() ) def get_channel_info(self, channel_name): values = { 'channel_name': channel_name, 'secret': self.get_secret(), } req = urllib2.Request("%s/get_channel_info?%s" % (self.get_url(), urllib.urlencode(values))) resp = urllib2.urlopen(req) return json.loads(resp.read()) def get_subscribers(self, channel_name): try: return len(self.get_channel_info(channel_name)[1]['subscribers']) except (urllib2.URLError, KeyError), e: return 'U' def execute(self): return dict( (channel_name, self.get_subscribers(channel_name)) for channel_name in self.get_channels() ) if __name__ == "__main__": HookboxPlugin().run()