Przeglądaj źródła

Added writing to Time Series Database KairosDB

pull/194/head
Johannes 7 lat temu
rodzic
commit
093d486f8e
4 zmienionych plików z 34 dodań i 20 usunięć
  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 Wyświetl plik

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




modules/ui/package-lock.json modules/ui/package-lock.json
logs/

+ 19
- 14
modules/core/core.py Wyświetl plik

@@ -148,24 +148,29 @@ class SensorAPI(object):


def save_to_file(self, id, value, prefix="sensor"): def save_to_file(self, id, value, prefix="sensor"):
sensor_name = "%s_%s" % (prefix, str(id)) 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): def log_action(self, text):
filename = "./logs/action.log" filename = "./logs/action.log"


+ 12
- 6
modules/logs/endpoints.py Wyświetl plik

@@ -61,12 +61,12 @@ class LogView(FlaskView):
return ('', 204) return ('', 204)


def querry_tsdb(self, type, id): 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=[ data = dict(metrics=[
{ {
"tags": {}, "tags": {},
"name": "%s_%s" % (type, id),
"name": "cbpi.%s_%s" % (type, id),
"aggregators": [ "aggregators": [
{ {
"name": "avg", "name": "avg",
@@ -94,9 +94,7 @@ class LogView(FlaskView):
else: 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_%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) filename = "./logs/%s_%s.log" % (type, id)
if os.path.isfile(filename) == False: if os.path.isfile(filename) == False:
return return
@@ -113,9 +111,17 @@ class LogView(FlaskView):
float(row[1])]) float(row[1])])
except: except:
pass pass
print(array)
return 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): def convert_chart_data_to_json(self, chart_data):
return {"name": chart_data["name"], 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"], chart_data["data_id"])}


+ 2
- 0
update/4_kairosdb_config.sql Wyświetl plik

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

Ładowanie…
Anuluj
Zapisz