#!/usr/bin/env python2
import json
import requests
import sys
import logging
from gridadmin_tools.tools import run_system_diag, get_system_info, get_nw_interfaces, get_disk_info

# TODO: Add logging, and improve message accuracy


def make_request(host, data, ssl):
    headers = {'Content-Type': 'application/json'}
    prefix = 'https' if ssl else 'http'
    url = prefix+"://"+str(host)+"/api/servers/"
    if len(host.split(':')) == 1:
        url += str(443) if ssl else str(80)
    response = requests.post(url, headers=headers, data=json.dumps(data))
    if not response or response.status_code != 200:
        raise Exception(response.__dict__)
        logging.warning('Could not send data to %s', url)
        return None
    else:
        return response


def main():
    if len(sys.argv) < 3:
        print('Usage: discover.py [host(:port)] [key] (ssl_flag)')
        return
    else:
        data = {}
        url = sys.argv[1]
        data['key'] = sys.argv[2]
        stats = run_system_diag()
        data['fqdn'] = stats['ansible_fqdn']
        data['sysinfo'] = get_system_info(stats)
        data['network'] = get_nw_interfaces(stats)
        data['devices'], data['mounts'] = get_disk_info(stats)
        ssl = True if len(sys.argv) == 4 else False
        try:
            result = make_request(url, data, ssl)
            if not result:
                logging.warning('Request failed: %s', str(result))
        except Exception as e:
            raise e
main()
