mirror of
https://github.com/Manuel83/craftbeerpi3
synced 2026-08-09 18:52:40 +02:00
First Version
This commit is contained in:
@@ -0,0 +1 @@
|
||||
import endpoints
|
||||
@@ -0,0 +1,109 @@
|
||||
import datetime
|
||||
import os
|
||||
from flask import Blueprint, request, send_from_directory, json
|
||||
from flask_classy import FlaskView, route
|
||||
from modules import cbpi
|
||||
|
||||
|
||||
class LogView(FlaskView):
|
||||
|
||||
@route('/', methods=['GET'])
|
||||
def get_all_logfiles(self):
|
||||
result = []
|
||||
for filename in os.listdir("./logs"):
|
||||
if filename.endswith(".log"):
|
||||
result.append(filename)
|
||||
return json.dumps(result)
|
||||
|
||||
@route('/actions')
|
||||
def actions(self):
|
||||
filename = "./logs/action.log"
|
||||
if os.path.isfile(filename) == False:
|
||||
return
|
||||
import csv
|
||||
array = []
|
||||
with open(filename, 'rb') as f:
|
||||
reader = csv.reader(f)
|
||||
for row in reader:
|
||||
try:
|
||||
array.append([int((datetime.datetime.strptime(row[0], "%Y-%m-%d %H:%M:%S") - datetime.datetime(1970, 1, 1)).total_seconds()) * 1000, row[1]])
|
||||
except:
|
||||
pass
|
||||
return json.dumps(array)
|
||||
|
||||
@route('/<file>', methods=["DELETE"])
|
||||
def clearlog(self, file):
|
||||
"""
|
||||
Overload delete method to shutdown sensor before delete
|
||||
:param id: sensor id
|
||||
:return: HTTP 204
|
||||
"""
|
||||
if not self.check_filename(file):
|
||||
return ('File Not Found', 404)
|
||||
|
||||
filename = "./logs/%s" % file
|
||||
if os.path.isfile(filename) == True:
|
||||
os.remove(filename)
|
||||
cbpi.notify("log deleted succesfully", "")
|
||||
else:
|
||||
cbpi.notify("Failed to delete log", "", type="danger")
|
||||
return ('', 204)
|
||||
|
||||
def read_log_as_json(self, type, id):
|
||||
filename = "./logs/%s_%s.log" % (type, id)
|
||||
if os.path.isfile(filename) == False:
|
||||
return
|
||||
|
||||
import csv
|
||||
array = []
|
||||
with open(filename, 'rb') as f:
|
||||
reader = csv.reader(f)
|
||||
for row in reader:
|
||||
try:
|
||||
array.append([int((datetime.datetime.strptime(row[0], "%Y-%m-%d %H:%M:%S") - datetime.datetime(1970, 1, 1)).total_seconds()) * 1000, float(row[1])])
|
||||
except:
|
||||
pass
|
||||
return array
|
||||
|
||||
|
||||
@route('/<t>/<int:id>', methods=["POST"])
|
||||
def get_logs_as_json(self, t, id):
|
||||
data = request.json
|
||||
result = []
|
||||
if t == "s":
|
||||
name = cbpi.cache.get("sensors").get(id).name
|
||||
result.append({"name": name, "data": self.read_log_as_json("sensor", id)})
|
||||
|
||||
if t == "k":
|
||||
kettle = cbpi.cache.get("kettle").get(id)
|
||||
result.append({"name": "Temp", "data": self.read_log_as_json("sensor", kettle.sensor)})
|
||||
result.append({"name": "Target Temp", "data": self.read_log_as_json("kettle", kettle.id)})
|
||||
|
||||
if t == "f":
|
||||
fermenter = cbpi.cache.get("fermenter").get(id)
|
||||
result.append({"name": "Temp", "data": self.read_log_as_json("sensor", fermenter.sensor)})
|
||||
result.append({"name": "Target Temp", "data": self.read_log_as_json("fermenter", fermenter.id)})
|
||||
return json.dumps(result)
|
||||
|
||||
@route('/download/<file>')
|
||||
@cbpi.nocache
|
||||
def download(self, file):
|
||||
if not self.check_filename(file):
|
||||
return ('File Not Found', 404)
|
||||
return send_from_directory('../logs', file, as_attachment=True, attachment_filename=file)
|
||||
|
||||
def check_filename(self, name):
|
||||
import re
|
||||
pattern = re.compile('^([A-Za-z0-9-_])+.log$')
|
||||
|
||||
return True if pattern.match(name) else False
|
||||
|
||||
@cbpi.initalizer()
|
||||
def init(app):
|
||||
"""
|
||||
Initializer for the message module
|
||||
:param app: the flask app
|
||||
:return: None
|
||||
"""
|
||||
print "INITIALIZE LOG MODULE"
|
||||
LogView.register(cbpi.app, route_base='/api/logs')
|
||||
Reference in New Issue
Block a user