From 093d486f8e7133a3b1eb1899e951e3a0640bfd6c Mon Sep 17 00:00:00 2001 From: Johannes Date: Wed, 2 May 2018 12:29:17 +0200 Subject: [PATCH] Added writing to Time Series Database KairosDB --- .gitignore | 1 + modules/core/core.py | 33 +++++++++++++++++++-------------- modules/logs/endpoints.py | 18 ++++++++++++------ update/4_kairosdb_config.sql | 2 ++ 4 files changed, 34 insertions(+), 20 deletions(-) create mode 100644 update/4_kairosdb_config.sql diff --git a/.gitignore b/.gitignore index 928ac45..67cd145 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ yarn.lock modules/ui/package-lock.json +logs/ diff --git a/modules/core/core.py b/modules/core/core.py index 915dcfa..368f412 100644 --- a/modules/core/core.py +++ b/modules/core/core.py @@ -148,24 +148,29 @@ class SensorAPI(object): def save_to_file(self, id, value, prefix="sensor"): sensor_name = "%s_%s" % (prefix, str(id)) - filename = "./logs/%slog" % sensor_name - formatted_time = strftime("%Y-%m-%d %H:%M:%S", localtime()) - msg = str(formatted_time) + "," +str(value) + "\n" + use_kairosdb = (self.cache["config"]["kairos_db"].__dict__["value"] == "YES") - with open(filename, "a") as file: - file.write(msg) + 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 + }) + ] + + response = requests.post(kairosdb_server + "/api/v1/datapoints", json.dumps(data)) + else: + filename = "./logs/%s.log" % sensor_name + formatted_time = strftime("%Y-%m-%d %H:%M:%S", localtime()) + msg = str(formatted_time) + "," +str(value) + "\n" - kairosdb_server = "http://192.168.178.20:5001" + with open(filename, "a") as file: + file.write(msg) - data = [ - dict(name=sensor_name, datapoints=[ - [int(round(time.time() * 1000)), value] - ], tags={ - "cbpi": prefix - }) - ] - response = requests.post(kairosdb_server + "/api/v1/datapoints", json.dumps(data)) def log_action(self, text): filename = "./logs/action.log" diff --git a/modules/logs/endpoints.py b/modules/logs/endpoints.py index 384277d..fea6865 100644 --- a/modules/logs/endpoints.py +++ b/modules/logs/endpoints.py @@ -61,12 +61,12 @@ class LogView(FlaskView): return ('', 204) def querry_tsdb(self, type, id): - kairosdb_server = "http://192.168.178.20:5001" + kairosdb_server = "http://127.0.0.1:" + cbpi.cache["config"]["kairos_db_port"].__dict__["value"] data = dict(metrics=[ { "tags": {}, - "name": "%s_%s" % (type, id), + "name": "cbpi.%s_%s" % (type, id), "aggregators": [ { "name": "avg", @@ -94,9 +94,7 @@ class LogView(FlaskView): else: self.logger.warning("Failed to fetch time series for [%s_%s]. Response [%s]", type, id, response) - def read_log_as_json(self, type, id): - return self.querry_tsdb(type, id) - + def querry_log(self, type, id): filename = "./logs/%s_%s.log" % (type, id) if os.path.isfile(filename) == False: return @@ -113,9 +111,17 @@ class LogView(FlaskView): float(row[1])]) except: pass - print(array) return array + def read_log_as_json(self, type, id): + use_kairosdb = (cbpi.cache["config"]["kairos_db"].__dict__["value"] == "YES") + + if use_kairosdb: + return self.querry_tsdb(type, id) + else: + return self.querry_log(type, id) + + 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"])} diff --git a/update/4_kairosdb_config.sql b/update/4_kairosdb_config.sql new file mode 100644 index 0000000..35e0af8 --- /dev/null +++ b/update/4_kairosdb_config.sql @@ -0,0 +1,2 @@ +INSERT OR IGNORE INTO config VALUES ('kairos_db', 'NO', 'select', 'Use timeseries database KairosDB for storing sensor values. For now you have to install KairosDB by yourself.', '["YES","NO"]' ); +INSERT OR IGNORE INTO config VALUES ('kairos_db_port', 5001, 'number', 'Port for KairosDB. We assume the DB is running on your PI, so IP-Address is 127.0.0.1.', NULL ); \ No newline at end of file