diff --git a/modules/core/core.py b/modules/core/core.py index d93b9ae..e668772 100644 --- a/modules/core/core.py +++ b/modules/core/core.py @@ -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() diff --git a/modules/logs/endpoints.py b/modules/logs/endpoints.py index d7935c3..32b3e48 100644 --- a/modules/logs/endpoints.py +++ b/modules/logs/endpoints.py @@ -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('//', 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)