#!/opt/virtualenvs/hwparserino/bin/python

import argparse
import requests
import subprocess
import sys


class HwparserinoCheck(object):
    _EXIT_CODE_TO_MSG_MAP = {
        0: 'OK',
        1: 'WARN',
        2: 'CRIT',
        3: 'UNK',
    }

    @classmethod
    def app(cls):
        test_url = 'https://hwparserino.internal.justin.tv/lshw/fakeuuiderino'
        try:
            resp = requests.post(test_url, data={})
        except Exception as e:
            return cls.message(retval=2, msg=e.message)

        data = {}
        try:
            data = resp.json()
        except ValueError:
            return cls.message(
                retval=2, msg='expecting json response, got something else')

        if resp.status_code == 404 and data.get('err') is not None:
            return cls.message(
                retval=0, msg='application responding correctly')
        else:
            return cls.message(
                retval=2, msg='Expecting HTTP status code 404, got {}.')


    @classmethod
    def message(cls, retval, msg):
        print("{}: {}".format(cls._EXIT_CODE_TO_MSG_MAP.get(retval), msg))
        sys.exit(retval)


def parse_args():
    parser = argparse.ArgumentParser(description='hwparserino nagios check')
    parser.add_argument(
        '-s', required=True, dest='service',
        help='Name of service to check. One of ["app"].')
    args = parser.parse_args()
    return args


def main(args):
    check = getattr(HwparserinoCheck, args.service)
    check()


if __name__ == '__main__':
    main(parse_args())
