67 lines
2.3 KiB
Python
67 lines
2.3 KiB
Python
from fastapi import FastAPI, Request
|
|
from pydantic import BaseModel
|
|
import engine
|
|
|
|
app = FastAPI()
|
|
|
|
sensors = {
|
|
"teplota": 24,
|
|
"vlhkosť": 25,
|
|
"počet ľudí": 10,
|
|
"doba čakania": 2
|
|
}
|
|
log = engine.Log(print_m=True, debug=True)
|
|
|
|
location = "izba"
|
|
ID = 55
|
|
IP = "192.168.1.25"
|
|
filesystem = {
|
|
"otvaracie_hod": ["t", {"pon": "10-25"}, {"uto": "10-25"}],
|
|
"prehliadka": ["pdf", "/files/prehliadka.pdf"],
|
|
"fotky_hrad": ["png_z", ["/files/hrad1.png", "/files/hrad2.png"]]
|
|
}
|
|
heartbeat_table = {
|
|
"ID": [1, 2, 3, 4, 5, 6, 7],
|
|
"IP": ["192.168.1.11", "192.168.1.12", "192.168.1.13", "192.168.1.14", "192.168.1.16", "192.168.1.17"],
|
|
"location": ["1", "2", "3", "4", "5", "6", "hrad"],
|
|
"file_system": ["x", "x", "x", "x", "x", "x", "x"],
|
|
"last_heartbeat": [15, 15, 15, 15, 15, 15, 15]
|
|
}
|
|
|
|
|
|
class Server_table(BaseModel):
|
|
ID: list
|
|
IP: list
|
|
location: list
|
|
file_system: list
|
|
last_heartbeat: list
|
|
|
|
|
|
@app.post("/heartbeat")
|
|
def heartbeat(s_table: Server_table, request: Request):
|
|
log.message(f"heartbeat requested: {request.client.host}:{request.client.port}")
|
|
log.debug(f"Recieved server table: {s_table}")
|
|
try:
|
|
for position, server_id in enumerate(s_table.ID):
|
|
if server_id in heartbeat_table["ID"]:
|
|
if heartbeat_table["last_heartbeat"][heartbeat_table["ID"].index(server_id)] > s_table.last_heartbeat[
|
|
position]:
|
|
heartbeat_table["last_heartbeat"][heartbeat_table["ID"].index(server_id)] = s_table.last_heartbeat[
|
|
position]
|
|
else:
|
|
heartbeat_table["ID"].append(s_table.ID[position])
|
|
heartbeat_table["IP"].append(s_table.IP[position])
|
|
heartbeat_table["location"].append(s_table.location[position])
|
|
heartbeat_table["file_system"].append(s_table.file_system[position])
|
|
heartbeat_table["last_heartbeat"].append(s_table.last_heartbeat[position])
|
|
except Exception as error:
|
|
log.error(f"heartbeat > {error}")
|
|
return heartbeat_table, {"ID": ID, "file_system": filesystem, "location": location}
|
|
|
|
|
|
@app.get("/sensors")
|
|
def get_sensors(request: Request):
|
|
log.message(f"sensor data sent to {request.client.host}:{request.client.port}")
|
|
log.debug(f"sensor data: {sensors}")
|
|
return sensors
|