NorthStar-Endurance-TestBench/FASTapi/main.py

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)