#!/usr/bin/python

import sys
import os
import re
import zmq

SLUG_UNFRIENDLY = re.compile(r'[^0-9a-z_]')

ctx = zmq.Context()

def getServerStatus(munin_prefix):
    status_addr = os.environ.get('status_addr', 'tcp://127.0.0.1:2345')

    collector = ctx.socket(zmq.REQ)
    collector.connect(status_addr)

    collector.send('STATS')
    ss = collector.recv_json()

    for prefix, data in ss.items():
        if re.sub(SLUG_UNFRIENDLY, '_', prefix.lower()) == munin_prefix:
            return prefix, data

    return None, None

def doData(munin_prefix):
    prefix, ss = getServerStatus(munin_prefix)
    print 'started.value %s' % ss['started']
    print 'finished.value %s' % ss['finished']

def doConfig(munin_prefix):
    prefix, ss = getServerStatus(munin_prefix)

    print 'graph_title Gunicorn requests for %s' % prefix
    print 'graph_args --base 1000 -l 0'
    print 'graph_vlabel requests / ${graph_period}'
    print 'graph_category gunicorn'

    for k in ['started', 'finished']:
        print '%s.label %s' % (k, k)
        print '%s.min 0' % k
        print '%s.type DERIVE' % k

if __name__ == '__main__':
    munin_prefix = sys.argv[0].split('_', 1)[1]

    if not munin_prefix:
        print 'please link as %s<prefix>' % os.path.basename(sys.argv[0])
        exit(1)

    if len(sys.argv) > 1 and sys.argv[1] == 'config':
        doConfig(munin_prefix)
    else:
        doData(munin_prefix)

