api.py 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from fastapi import FastAPI, HTTPException
  2. import uvicorn
  3. from api_config import ApiConfig
  4. from cargo_service import CargoHeightService
  5. from request_logging import setup_request_logging
  6. config = ApiConfig.from_env()
  7. service = CargoHeightService(config)
  8. app = FastAPI(title="Cargo Height API")
  9. setup_request_logging(
  10. app,
  11. max_response_len=config.request_log_max_len,
  12. max_bytes=config.request_log_max_bytes,
  13. backup_count=config.request_log_backup_count,
  14. )
  15. @app.on_event("startup")
  16. def on_startup() -> None:
  17. service.startup()
  18. @app.on_event("shutdown")
  19. def on_shutdown() -> None:
  20. service.shutdown()
  21. @app.get("/height")
  22. def get_height():
  23. result = service.measure_height()
  24. if result is None:
  25. raise HTTPException(status_code=503, detail="Insufficient valid samples from depth camera")
  26. return result
  27. @app.get("/health")
  28. def health():
  29. return {"status": "ok"}
  30. def main() -> None:
  31. uvicorn.run("api:app", host=config.api_host, port=config.api_port, log_level="info")
  32. if __name__ == "__main__":
  33. main()