#!/usr/bin/python
# -*- coding: utf-8 -*-

from optparse import OptionParser
import sys
import logging

import collector
import processor

log = logging.getLogger('cbclusterstats')
log.setLevel(logging.INFO)
log.addHandler(logging.StreamHandler())


def parse_opt():
    usage = "usage: %prog CLUSTER USERNAME PASSWORD OPTIONS"

    parser = OptionParser(usage)

    parser.add_option('-c', '--cluster', dest='cluster', default='',
                      help='default port is 8091',
                      metavar='HOST[:PORT]')
    parser.add_option('-u', '--user', dest='user', default='',
                      help='admin username of the cluster',
                      metavar='USERNAME')
    parser.add_option('-p', '--password', dest='password', default='',
                      help='admin password of the cluster',
                      metavar='PASSWORD')
    parser.add_option('-o', '--output', dest='txtfile', default='clusterstats.txt',
                      help='default output filename is "clusterstats.txt"',
                      metavar='FILENAME')
    parser.add_option('-d', '--debug', dest='debug', default=False,
                      action="store_true")

    options, args = parser.parse_args()

    if options.debug:
        log.setLevel(logging.DEBUG)

    if not options.cluster or not options.user or not options.password:
        parser.print_help()
        sys.exit(2)

    return options.cluster, options.user, options.password, options.txtfile, \
        args


def main():
    (cluster, user, password, txtfile, opts) = parse_opt()
    #make snapshot for the current cluster status
    retriever = collector.StatsCollector(log)
    retriever.collect_data(cluster, user, password, opts)

    #analyze the snapshot and historic data
    performer = processor.StatsAnalyzer(log)
    performer.run_analysis()
    performer.run_report(txtfile)

if __name__ == '__main__':
    main()
