#!/bin/python
import argparse
import datetime
import sys
import time
import logging
import pprint

import zmq
import msgpack

log = logging.getLogger('blueox.ctl')

def setup_logging(options):
    if len(options.verbose) > 1:
        level = logging.DEBUG
    elif options.verbose:
        level = logging.INFO
    else:
        level = logging.WARNING
    
    log_format = "%(asctime)s %(levelname)s:%(name)s: %(message)s"
    logging.basicConfig(level=level, format=log_format, stream=sys.stdout)


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--verbose', '-v', dest='verbose', action='append_const', const=True, default=list())
    parser.add_argument('--host', '-H', dest='host', action='store', default="127.0.0.1:3513")
    parser.add_argument('--raw', '-r', dest='raw', action='store_true', default=False)

    options = parser.parse_args()

    setup_logging(options)

    context = zmq.Context()
    poller = zmq.Poller()
    sock = context.socket(zmq.REQ)
    sock.connect("tcp://" + options.host)
    poller.register(sock, zmq.POLLIN)

    sock.send(msgpack.packb({'cmd': 'STATUS'}))

    result = dict(poller.poll(5000))
    if sock in result:
        resp = msgpack.unpackb(sock.recv())
        if options.raw:
            print resp
        else:
            print "Host: %s" % options.host
            if resp.get('last'):
                print "Last: %s (%d secs ago)" % (datetime.datetime.fromtimestamp(resp['last']), time.time() - resp['last'])
            if resp.get('lag'):
                print "Lag: %f secs" % resp['lag']

            print
            for name, name_data in resp['hosts'].iteritems():
                print "  %32s  Last %s (%d secs ago)" % (name, datetime.datetime.fromtimestamp(name_data['last']), time.time() - name_data['last'])
            print
            for name, name_data in resp['events'].iteritems():
                print "  %32s  Last %s (%d secs ago)" % (name, datetime.datetime.fromtimestamp(name_data['last']), time.time() - name_data['last'])
    else:
        print >>sys.stderr, "Error connecting to server"
        sys.exit(1)

if __name__ == "__main__":
    main()
