import json, requests
from multiprocessing import Pool

clients = []


BASE_URL = "http://127.0.0.1:8000/hiccup/"


def create_client():
    ret_client = {}
    register_url = "api/v1/devices/register/"
    params = {"board_date": "2017-01-01", "chipset": "HICCUPBENCH"}
    resp = requests.post(BASE_URL + register_url, params)
    data = json.loads(resp.text)
    ret_client["token"] = data["token"]
    ret_client["uuid"] = data["uuid"]
    return ret_client


def send_heartbeat(client):
    heartbeat_url = "api/v1/heartbeats/"
    params = {
        "uuid": client["uuid"],
        "build_fingerprint": "HICCUPBENCH",
        "uptime": "string",
        "date": "1984-06-02T19:05:00.000Z",
        "app_version": 2000000,
    }
    resp = requests.post(
        BASE_URL + heartbeat_url,
        params,
        headers={"Authorization": "Token " + client["token"]},
    )
    return resp


import time


def bench(client):
    start_time = time.time()
    for i in range(50):
        send_heartbeat(client)
    end_time = time.time()
    print(end_time - start_time)


clients = []
for i in range(20):
    clients = clients + [create_client()]

with Pool(20) as p:
    p.map(bench, clients)
