#!/usr/bin/python3

import hmac
import json
import os
import pprint
import random
import socket
import time

import requests


hostname = socket.gethostbyaddr(socket.gethostname())[0]

def report_loadavg():
    now = time.time()
    load = os.getloadavg()
    with open("config.json") as fh:
        client_config = json.load(fh)
    baseurl = client_config["server"]

    while True:
        report = []
        for i, period in enumerate(("1m", "5m", "15m")):
            node = hostname
            timestamp = time.time()
            msg = (node + " " + str(timestamp)).encode("UTF-8")
            digest = hmac.new(client_config["key"].encode("UTF-8"), msg, "SHA256").hexdigest()
            report.append(
                {
                    "description": {
                        "hostname": hostname,
                        "measure": "loadavg",
                        "unit": "processes",
                        "period": period,
                    },
                    "data": [
                        [ now, load[i] ]
                    ],
                    "auth": {
                        "node": node,
                        "timestamp": timestamp,
                        "hmac": digest,
                    }
                },
            )
        pprint.pp(report)
        r = requests.post(baseurl + "report", json=report)
        print(r)
        if r.status_code != 409:
            return
        time.sleep(0.5 + random.random())

report_loadavg()