Kaynağa Gözat

added logging of "action" into time series database

pull/194/head
Johannes 7 yıl önce
ebeveyn
işleme
cc6559144a
2 değiştirilmiş dosya ile 46 ekleme ve 39 silme
  1. +34
    -24
      modules/core/core.py
  2. +12
    -15
      modules/logs/endpoints.py

+ 34
- 24
modules/core/core.py Dosyayı Görüntüle

@@ -16,6 +16,7 @@ from hardware import *

import time
import uuid
import logging


class NotificationAPI(object):
@@ -85,6 +86,8 @@ class SensorAPI(object):
:return:
'''

self.logger = logging.getLogger(__name__)

self.app.logger.info("Init Sensors")

t = self.cache.get("sensor_types")
@@ -144,41 +147,48 @@ class SensorAPI(object):

def receive_sensor_value(self, id, value):
self.emit("SENSOR_UPDATE", self.cache.get("sensors")[id])
self.save_to_file(id, value)
self.save_to_file(id, value, "sensor")

def save_to_file(self, id, value, prefix="sensor"):
def save_to_file(self, id, value, prefix):
sensor_name = "%s_%s" % (prefix, str(id))
use_kairosdb = (self.cache["config"]["kairos_db"].__dict__["value"] == "YES")

if use_kairosdb:
kairosdb_server = "http://127.0.0.1:" + self.cache["config"]["kairos_db_port"].__dict__["value"]

data = [
dict(name="cbpi." + sensor_name, datapoints=[
[int(round(time.time() * 1000)), value]
], tags={
"cbpi": prefix,
"brew": self.cache["active_brew"]
})
]

response = requests.post(kairosdb_server + "/api/v1/datapoints", json.dumps(data))
self.write_to_tsdb(prefix, sensor_name, value)
else:
filename = "./logs/%s.log" % sensor_name
formatted_time = strftime("%Y-%m-%d %H:%M:%S", localtime())
msg = str(formatted_time) + "," +str(value) + "\n"
self.write_to_logfile(sensor_name, value)

def write_to_logfile(self, sensor_name, value):
filename = "./logs/%s.log" % sensor_name
formatted_time = strftime("%Y-%m-%d %H:%M:%S", localtime())
msg = str(formatted_time) + "," + str(value) + "\n"

with open(filename, "a") as file:
file.write(msg)
with open(filename, "a") as file:
file.write(msg)

def write_to_tsdb(self, prefix, sensor_name, value):
kairosdb_server = "http://127.0.0.1:" + self.cache["config"]["kairos_db_port"].__dict__["value"]

data = [
dict(name="cbpi." + sensor_name, datapoints=[
[int(round(time.time() * 1000)), value]
], tags={
"cbpi": prefix,
"brew": self.cache["active_brew"]
})
]

response = requests.post(kairosdb_server + "/api/v1/datapoints", json.dumps(data))
if not response.ok:
self.logger.warning("Failed to write time series entry for [%s]. Response [%s]", sensor_name, response)

def log_action(self, text):
filename = "./logs/action.log"
formatted_time = strftime("%Y-%m-%d %H:%M:%S", localtime())
with open(filename, "a") as file:
text = text.encode("utf-8")
file.write("%s,%s\n" % (formatted_time, text))
use_kairosdb = (self.cache["config"]["kairos_db"].__dict__["value"] == "YES")

if use_kairosdb:
self.write_to_tsdb("action", "action", text)
else:
self.write_to_logfile("action", text)

def shutdown_sensor(self, id):
self.cache.get("sensors")[id].stop()


+ 12
- 15
modules/logs/endpoints.py Dosyayı Görüntüle

@@ -1,6 +1,5 @@
import datetime
import os
import time
import requests
import logging
from flask import request, send_from_directory, json
@@ -22,11 +21,8 @@ class LogView(FlaskView):

@route('/actions')
def actions(self):
filename = "./logs/action.log"
array = self.query_log(filename, "string")

array = self.read_log_as_json("action")
json_dumps = json.dumps(array)
self.logger.debug("Loaded action.log [%s]", json_dumps)

return json_dumps

@@ -48,13 +44,13 @@ class LogView(FlaskView):
cbpi.notify("Failed to delete log", "", type="danger")
return ('', 204)

def query_tsdb(self, type, id):
def query_tsdb(self, sensor_name):
kairosdb_server = "http://127.0.0.1:" + cbpi.cache["config"]["kairos_db_port"].__dict__["value"]

data = dict(metrics=[
{
"tags": {},
"name": "cbpi.%s_%s" % (type, id),
"name": "cbpi.%s" % sensor_name,
"aggregators": [
{
"name": "avg",
@@ -81,11 +77,11 @@ class LogView(FlaskView):

response = requests.post(kairosdb_server + "/api/v1/datapoints/query", json.dumps(data))
if response.ok:
self.logger.debug("Fetching time series for [%s_%s] took [%s]", type, id, response.elapsed)
self.logger.debug("Time series for [%s_%s] is [%s]", type, id, response.json())
self.logger.debug("Fetching time series for [%s] took [%s]", sensor_name, response.elapsed)
self.logger.debug("Time series for [%s] is [%s]", sensor_name, response.json())
return response.json()["queries"][0]["results"][0]["values"]
else:
self.logger.warning("Failed to fetch time series for [%s_%s]. Response [%s]", type, id, response)
self.logger.warning("Failed to fetch time series for [%s]. Response [%s]", sensor_name, response)

def query_log(self, filename, value_type):
array = []
@@ -114,19 +110,19 @@ class LogView(FlaskView):
pass
return array

def read_log_as_json(self, type, id):
def read_log_as_json(self, sensor_name):
use_kairosdb = (cbpi.cache["config"]["kairos_db"].__dict__["value"] == "YES")

if use_kairosdb:
return self.query_tsdb(type, id)
return self.query_tsdb(sensor_name)
else:
filename = "./logs/%s_%s.log" % (type, id)
filename = "./logs/%s.log" % sensor_name
return self.query_log(filename, "float")


def convert_chart_data_to_json(self, chart_data):
return {"name": chart_data["name"],
"data": self.read_log_as_json(chart_data["data_type"], chart_data["data_id"])}
"data": self.read_log_as_json(chart_data["data_type"] + "_" + str(chart_data["data_id"]))}

@route('/<t>/<int:id>', methods=["POST"])
def get_logs_as_json(self, t, id):
@@ -134,7 +130,8 @@ class LogView(FlaskView):
result = []
if t == "s":
name = cbpi.cache.get("sensors").get(id).name
result.append({"name": name, "data": self.read_log_as_json("sensor", id)})
sensor_name = "%s_%s" % ("sensor", str(id))
result.append({"name": name, "data": self.read_log_as_json(sensor_name)})

if t == "k":
kettle = cbpi.cache.get("kettle").get(id)


Yükleniyor…
İptal
Kaydet