api_controller.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import time
  2. from typing import Any
  3. from fastapi import Request
  4. from app.models.schemas import VisitRequest
  5. from app.use_cases.camoufox.visit import VisitUseCase
  6. from app.libs.log import log
  7. from app.libs.aras_response import aras_ok, aras_server_error
  8. class ApiController:
  9. def __init__(self) -> None:
  10. self.visit_use_case = VisitUseCase()
  11. def ping(self) -> dict[str, Any]:
  12. log.logger.info("Ping received")
  13. return aras_ok("pong")
  14. async def visit(self, request: Request, payload: VisitRequest) -> dict[str, Any]:
  15. start_time = time.time()
  16. try:
  17. options = payload.model_dump(exclude={"url"})
  18. options["headers"] = dict(request.scope.get("raw_headers_dict", {}))
  19. log.logger.info(f"Visiting URL: {payload.url}")
  20. log.logger.debug(f"Options: {options}")
  21. response = await self.visit_use_case.execute(str(payload.url), options)
  22. return aras_ok("OK", response)
  23. except Exception as exc:
  24. log.logger.error(exc)
  25. return aras_server_error(str(exc))
  26. finally:
  27. duration = time.time() - start_time
  28. log.logger.info(f"Execution time: {duration:.2f}s")