69 lines
1.9 KiB
Python
69 lines
1.9 KiB
Python
from fastapi import FastAPI, Request
|
|
from fastapi.staticfiles import StaticFiles
|
|
from fastapi.responses import HTMLResponse, JSONResponse
|
|
from fastapi.templating import Jinja2Templates
|
|
|
|
import uvicorn
|
|
|
|
from endurance_can import EnduranceDataManager
|
|
from logger import start_per_valve_logger
|
|
|
|
app = FastAPI()
|
|
|
|
# Static and templates
|
|
app.mount("/static", StaticFiles(directory="static"), name="static")
|
|
templates = Jinja2Templates(directory="templates")
|
|
|
|
# Global CAN manager
|
|
data_mgr = EnduranceDataManager()
|
|
data_mgr.connect_to_can()
|
|
|
|
start_per_valve_logger(data_mgr)
|
|
|
|
@app.get("/", response_class=HTMLResponse)
|
|
async def root(request: Request):
|
|
return templates.TemplateResponse("index.html", {"request": request})
|
|
|
|
@app.get("/api/valve-data")
|
|
async def get_valve_data():
|
|
return JSONResponse(content=data_mgr.get_valve_data())
|
|
|
|
@app.get("/api/flow-data")
|
|
async def get_flow_data():
|
|
return JSONResponse(content=data_mgr.get_flow_data())
|
|
|
|
@app.get("/api/pressure-data")
|
|
async def get_pressure_data():
|
|
return JSONResponse(content=data_mgr.get_pressure_data())
|
|
|
|
@app.get("/api/pump-rpm")
|
|
async def get_pump_rpm():
|
|
return JSONResponse(content={"rpm": data_mgr.get_pump_rpm()})
|
|
|
|
@app.post("/api/start-test")
|
|
async def start_test():
|
|
data_mgr.send_test_command(1)
|
|
return {"status": "started"}
|
|
|
|
@app.post("/api/stop-test")
|
|
async def stop_test():
|
|
data_mgr.send_test_command(0)
|
|
return {"status": "stopped"}
|
|
|
|
@app.get("/data")
|
|
def get_data():
|
|
return {
|
|
"valves": data_mgr.get_valve_data(),
|
|
"flow": data_mgr.get_flow_data(),
|
|
"pressure": data_mgr.get_pressure_data(),
|
|
"pump": data_mgr.get_pump_rpm()
|
|
}
|
|
|
|
@app.get("/graphs", response_class=HTMLResponse)
|
|
async def show_graphs(request: Request):
|
|
return templates.TemplateResponse("graphs.html", {"request": request})
|
|
|
|
|
|
if __name__ == "__main__":
|
|
uvicorn.run("main:app", host="0.0.0.0", port=8080, reload=True)
|