ahmed-eisa commited on
Commit
428a61d
·
1 Parent(s): c4f4d59

added middleware

Browse files
Files changed (1) hide show
  1. main.py +43 -2
main.py CHANGED
@@ -1,11 +1,15 @@
1
  # main.py
2
- from fastapi import FastAPI,status,Response
3
  from fastapi.responses import StreamingResponse
4
  from models import load_text_model,generate_text,load_audio_model,generate_audio,load_image_model, generate_image
5
  from schemas import VoicePresets
6
  from utils import audio_array_to_buffer,img_to_bytes
7
  from contextlib import asynccontextmanager
8
- from typing import AsyncIterator
 
 
 
 
9
 
10
  models = {}
11
 
@@ -17,6 +21,43 @@ async def lifespan(_: FastAPI) -> AsyncIterator[None]:
17
 
18
  app = FastAPI(lifespan=lifespan)
19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  # app = FastAPI()
21
 
22
  @app.get("/")
 
1
  # main.py
2
+ from fastapi import FastAPI,status,Response,Request
3
  from fastapi.responses import StreamingResponse
4
  from models import load_text_model,generate_text,load_audio_model,generate_audio,load_image_model, generate_image
5
  from schemas import VoicePresets
6
  from utils import audio_array_to_buffer,img_to_bytes
7
  from contextlib import asynccontextmanager
8
+ from typing import AsyncIterator,Callable,Awaitable
9
+ from uuid import uuid4
10
+ import time
11
+ from datetime import datetime, timezone
12
+ import csv
13
 
14
  models = {}
15
 
 
21
 
22
  app = FastAPI(lifespan=lifespan)
23
 
24
+ csv_header = [
25
+ "Request ID", "Datetime", "Endpoint Triggered", "Client IP Address",
26
+ "Response Time", "Status Code", "Successful"
27
+ ]
28
+
29
+
30
+ @app.middleware("http")
31
+ async def monitor_service(
32
+ req: Request, call_next: Callable[[Request], Awaitable[Response]]
33
+ ) -> Response:
34
+ request_id = uuid4().hex
35
+ request_datetime = datetime.now(timezone.utc).isoformat()
36
+ start_time = time.perf_counter()
37
+ response: Response = await call_next(req)
38
+ response_time = round(time.perf_counter() - start_time, 4)
39
+ response.headers["X-Response-Time"] = str(response_time)
40
+ response.headers["X-API-Request-ID"] = request_id
41
+ with open("usage.csv", "a", newline="") as file:
42
+ writer = csv.writer(file)
43
+ if file.tell() == 0:
44
+ writer.writerow(csv_header)
45
+ writer.writerow(
46
+ [
47
+ request_id,
48
+ request_datetime,
49
+ req.url,
50
+ req.client.host,
51
+ response_time,
52
+ response.status_code,
53
+ response.status_code < 400,
54
+ ]
55
+ )
56
+ return response
57
+
58
+
59
+
60
+
61
  # app = FastAPI()
62
 
63
  @app.get("/")