#!/usr/bin/python

import sys
import argparse

from os_nagios.plugins import base, swiftrecon


def swift_objmd5_handler(args):
    return swiftrecon.objmd5_plugin(args.verbose, args.swiftdir)


def swift_diskusage_handler(args):
    return swiftrecon.diskusage_plugin(args.verbose, args.swiftdir,
                                       args.warning, args.critical)


def get_argparser():
    parser = argparse.ArgumentParser(description='Swift recon observer.')
    parser.add_argument('-v', '--verbose', type=int, default=0,
                        choices=range(0, 4),
                        help='Verbose output mode, available (0,1,2,3)')
    parser.add_argument('-d', '--swiftdir', default='/etc/swift/',
                        help='Directory with location ring files.')

    subparsers = parser.add_subparsers()

    p = subparsers.add_parser('objmd5', help='Swift recon objmd5.')
    p.set_defaults(handler=swift_objmd5_handler)

    p = subparsers.add_parser('diskusage', help='Swift recon diskusage.')
    p.set_defaults(handler=swift_diskusage_handler)
    p.add_argument('-w', '--warning', default="@20", help='Warning thresholds')
    p.add_argument('-c', '--critical', default="@10", help='Critical threshlods')

    return parser


def main(args):
    def return_result(code, message):
        # TODO: support verbose modes (0,1,2,3)
        sys.stdout.write(message[0][0])
        sys.stdout.write('\n')
        sys.stdout.flush()
        sys.exit(code)

    try:
        (code, message) = args.handler(args)
    except Exception as errmsg:
        msg = "Plugin error - '%s'" % (errmsg,)
        return_result(base.RET_UNKNOWN, [(msg, None)])
    else:
        return_result(code, message)


if __name__ == '__main__':
    parser = get_argparser()
    args = parser.parse_args()
    main(args)
