#!/usr/bin/env python3
""" Get load data from Zabbix API"""

import argparse
import sys
import urllib3

from pyzabbix import ZabbixAPI
from datetime import datetime

config = { "private": {} }
exec(open("master-private.cfg").read(), config, { })

# manage arguments
parser = argparse.ArgumentParser(description="Get zabbix alert")
parser.add_argument("-s", "--server", type=str, default="https://monitoring.mariadb.org")
parser.add_argument("-t", "--token", type=str, default=config["private"]["zabbix_token"])
parser.add_argument("-S", "--nossl", action="store_true")

args = parser.parse_args()

def get_metric(host_id, metric):
    hostitems = zapi.item.get(filter={"hostid": host_id, "name": metric})
    
    assert len(hostitems) == 1
    hostitem = hostitems[0]

    last_value = hostitem['lastvalue']
    last_time = datetime.fromtimestamp(int(hostitem['lastclock']))

    elapsed_from_last = (datetime.now() - last_time).total_seconds()
   
    # The latest data is no older than 80 seconds
    assert elapsed_from_last < 80
    
    return last_value

# set API
zapi = ZabbixAPI(args.server)

# SSL by default (use --nossl for internal check)
if args.nossl:
    urllib3.disable_warnings()
    zapi.session.verify = False
else:
    zapi.session.verify = True

# timeout (in seconds)
zapi.timeout = 10

# connect to API
try:
    if args.token:
        zapi.login(api_token=args.token)
    else:
        zapi.login(args.user, args.password)

except ConnectionRefusedError:
    cprint("Error: unable to authenticate to Zabbix API")
    sys.exit(1)

for h in zapi.host.get(output="extend"):
    if h['host'] == 'ibm-s390x-ubuntu20.04':
        print(get_metric(h["hostid"], "Load average (1m avg)"))
        print(get_metric(h["hostid"], "CPU utilization"))

