Spaces:
Sleeping
Sleeping
Commit
·
428a61d
1
Parent(s):
c4f4d59
added middleware
Browse files
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("/")
|