Parcourir la source

Added writing to Time Series Database KairosDB

pull/194/head
Johannes il y a 7 ans
Parent
révision
093d486f8e
4 fichiers modifiés avec 34 ajouts et 20 suppressions
  1. +1
    -0
      .gitignore
  2. +19
    -14
      modules/core/core.py
  3. +12
    -6
      modules/logs/endpoints.py
  4. +2
    -0
      update/4_kairosdb_config.sql

+ 1
- 0
.gitignore Voir le fichier

@@ -17,3 +17,4 @@ yarn.lock


modules/ui/package-lock.json
logs/

+ 19
- 14
modules/core/core.py Voir le fichier

@@ -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"


+ 12
- 6
modules/logs/endpoints.py Voir le fichier

@@ -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"])}


+ 2
- 0
update/4_kairosdb_config.sql Voir le fichier

@@ -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 );

Chargement…
Annuler
Enregistrer