import argparse
import math
import datetime
import requests
import json
import time
from influxdb import InfluxDBClient

USER     = 'admin'
PASSWORD = 'admin'
DBNAME   = 'mydb'
HOST     = 'localhost'
PORT     = 8086
INTERVAL = 3
URL      = 'http://127.0.1.1:8000/api/controllers'
TOKEN    = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjJiOWY3ZTljLThlMDEtNDUxYS1iNGZiLTYzZmNkOTBkMzI2MCIsIm5hbWUiOiJhZG1pbiIsImlhdCI6MTYxOTcwNTYxNywiZXhwIjoxNjIyMjk3NjE3fQ.ZcbVkut0_TWMME1AqiVyYdoZJGBeUmAK6ruBxebrk44'

client = InfluxDBClient(HOST, PORT, USER, PASSWORD, DBNAME)
url    = URL
params = dict(name=USER,token=TOKEN)

lock = 0

def record_data(elapsed_time, remaining_time, received_ligne, total_ligne, tool_id, file_name):

  job_query = client.query('SELECT last(elapsed_time),job FROM mycnc')
  job       = job_query.raw['series'][0]['values'][0][2]

  data = [
    {
      "measurement": "mycnc",
      "tags": {
          "job": int(job)
      },
      "fields": {
          "elapsed_time"   : float(elapsed_time),
          "remaining_time" : float(remaining_time),
          "received_ligne" : float(received_ligne),
          "total_ligne"    : float(total_ligne),
          "tool_id"        : float(tool_id),
          "file_name"      : file_name
      }
    }
  ]
  client.write_points(data)

try:
    while True:
      
      response     = requests.get(url=url, params=params)
      controller   = response.json()
      active_state = controller[0]["controller"]["state"]["status"]["activeState"]

      if active_state == "Run":
        elapsed_time   = controller[0]["sender"]["elapsedTime"]
        remaining_time = controller[0]["sender"]["remainingTime"]
        received_ligne = controller[0]["sender"]["received"]
        total_ligne    = controller[0]["sender"]["total"]
        file_name      = controller[0]["sender"]["name"]
        tool_id        = controller[0]["sender"]["context"]["tool"]
        record_data(elapsed_time, remaining_time, received_ligne, total_ligne, tool_id, file_name)
        lock = 1
        
      elif active_state != "Run" and lock == 1:
        record_data(0, 0, 0, 0, 0, "none")
        lock = 0

      time.sleep(INTERVAL)

except KeyboardInterrupt:
    pass
