From 1b42c7ff14bf6750189356b50372c35db8e4a36f Mon Sep 17 00:00:00 2001 From: stone-24tch3r <100294019+stone-w4tch3r@users.noreply.github.com> Date: Fri, 27 Sep 2024 23:49:47 +0500 Subject: [PATCH] added DTO mapping --- front/api_client.py | 6 ++++- front/main.py | 54 ++++++++++++++++++++++++++++++++++++--------- 2 files changed, 48 insertions(+), 12 deletions(-) diff --git a/front/api_client.py b/front/api_client.py index 12b49ba..5727d64 100644 --- a/front/api_client.py +++ b/front/api_client.py @@ -26,7 +26,11 @@ class APIClient: self, request: CertificateGenerateRequest ) -> CertificateGenerateResult: response = await self.client.post( - "/certificates/generate", json=request.dict(), params={"preview": False} + "/certificates/generate", + json=request.model_dump(), + params={ + "preview": False, + }, ) response.raise_for_status() return CertificateGenerateResult(**response.json()) diff --git a/front/main.py b/front/main.py index 4ed92db..f6e1d74 100644 --- a/front/main.py +++ b/front/main.py @@ -9,14 +9,11 @@ from pydantic import BaseModel from api_client import APIClient +API_BASE_URL = "http://localhost:5000" app = FastAPI() - app.mount("/static", StaticFiles(directory="static"), name="static") - templates = Jinja2Templates(directory="templates") -API_BASE_URL = "http://core-api:8000" # Adjust this to match your core API's URL - async def get_api_client(): client = APIClient(API_BASE_URL) @@ -26,7 +23,7 @@ async def get_api_client(): await client.close() -class LogFilterData(BaseModel): +class LogFilterTemplateData(BaseModel): commands_only: bool = False date_from: Optional[date] = None date_to: Optional[date] = None @@ -34,11 +31,34 @@ class LogFilterData(BaseModel): severity: List[str] = ["INFO", "WARN", "DEBUG", "ERROR"] +class CertificateTemplateData(BaseModel): + id: str + name: str + status: str + actions: List[str] + + +class LogTemplateData(BaseModel): + entry_id: str + timestamp: str + severity: str + trace_id: str + + @app.get("/", response_class=HTMLResponse) async def read_dashboard( request: Request, api_client: APIClient = Depends(get_api_client) ): - certificates = await api_client.list_certificates() + certificates = [ + CertificateTemplateData( + id=cert.id, + name=cert.name, + status=cert.status, + actions=["renew", "revoke", "download"], + ) + for cert in (await api_client.list_certificates()) + ] + return templates.TemplateResponse( "dashboard.html.j2", {"request": request, "certificates": certificates} ) @@ -54,18 +74,30 @@ async def read_logs( severity: List[str] = Query(["INFO", "WARN", "DEBUG", "ERROR"]), api_client: APIClient = Depends(get_api_client), ): - filter_data = LogFilterData( + filter_data = LogFilterTemplateData( commands_only=commands_only, date_from=date_from if date_from != "" else None, date_to=date_to if date_to != "" else None, keywords=keywords, severity=severity, ) - logs = await api_client.get_logs( - commands_only=filter_data.commands_only, severity=filter_data.severity - ) + logs = [ + LogTemplateData( + entry_id=str(log.entryId), + timestamp=log.timestamptz.isoformat(), + severity=log.severity.name, + trace_id=str(log.traceId), + ) + for log in ( + await api_client.get_logs( + commands_only=filter_data.commands_only, severity=filter_data.severity + ) + ) + ] + return templates.TemplateResponse( - "logs.html.j2", {"request": request, "logs": logs, "filter_data": filter_data} + "logs.html.j2", + {"request": request, "logs": logs, "filter_data": filter_data}, )