#!/usr/bin/env python
"""igcollect - Zookeeper

Copyright (c) 2016 InnoGames GmbH
"""

from argparse import ArgumentParser
from socket import socket, AF_INET, SOCK_STREAM, SHUT_WR
from time import time


def parse_args():
    parser = ArgumentParser()
    parser.add_argument('--prefix', default='zookeeper')
    return parser.parse_args()


def main():
    args = parse_args()
    template = args.prefix + '.{} {} ' + str(int(time()))
    names = {
        'zk_avg_latency',
        'zk_max_latency',
        'zk_min_latency',
        'zk_packets_received',
        'zk_packets_sent',
        'zk_ephemerals_count',
        'zk_approximate_data_size',
        'zk_open_file_descriptor_count',
        'zk_max_file_descriptor_count',
        'zk_znode_count',
        'zk_watch_count',
    }

    data = netcat('localhost', 2181, 'mntr').rstrip('\n')
    for line in data.splitlines():
        key, value = line.split('\t')
        if key in names:
            print(template.format(key, value))


def netcat(hostname, port, content):
    mntr = ''
    conn = socket(AF_INET, SOCK_STREAM)
    conn.connect((hostname, port))
    conn.sendall(content)
    conn.shutdown(SHUT_WR)
    while True:
        data = conn.recv(1024)
        if data == '':
            break
        mntr += data
    conn.close()
    return mntr


if __name__ == '__main__':
    main()