Spaces:
Running
on
T4
Running
on
T4
Update app.py
Browse files
app.py
CHANGED
|
@@ -165,17 +165,23 @@ async def shutdown_db():
|
|
| 165 |
logger.info("MongoDB connection closed")
|
| 166 |
|
| 167 |
# --------------------- Logging API Hits ---------------------
|
| 168 |
-
async def log_faceswap_hit(user_email: str, status: str
|
| 169 |
global database
|
| 170 |
if database is None:
|
| 171 |
return
|
|
|
|
|
|
|
|
|
|
| 172 |
await database.api_logs.insert_one({
|
| 173 |
"user": user_email,
|
| 174 |
"endpoint": "/face-swap",
|
| 175 |
"status": status,
|
| 176 |
-
"
|
|
|
|
|
|
|
| 177 |
})
|
| 178 |
|
|
|
|
| 179 |
# --------------------- Face Swap Pipeline ---------------------
|
| 180 |
swap_lock = threading.Lock()
|
| 181 |
|
|
@@ -280,6 +286,7 @@ async def face_swap_api(
|
|
| 280 |
target_category_id: str = Form(...),
|
| 281 |
user_email: str = Depends(verify_firebase_token)
|
| 282 |
):
|
|
|
|
| 283 |
try:
|
| 284 |
src_bytes = await source.read()
|
| 285 |
src_key = f"bikini-theme/source/{uuid.uuid4().hex}_{source.filename}"
|
|
@@ -316,14 +323,16 @@ async def face_swap_api(
|
|
| 316 |
result_bytes = f.read()
|
| 317 |
result_key = f"bikini-theme/result/{uuid.uuid4().hex}_enhanced.png"
|
| 318 |
result_url = upload_to_spaces(result_bytes, result_key, content_type="image/png")
|
| 319 |
-
|
| 320 |
-
await log_faceswap_hit(user_email, status="success")
|
| 321 |
|
| 322 |
return {"result_url": result_url}
|
| 323 |
|
| 324 |
-
|
| 325 |
-
|
| 326 |
-
|
|
|
|
|
|
|
| 327 |
|
| 328 |
@fastapi_app.get("/preview/{result_key:path}")
|
| 329 |
async def preview_result(result_key: str):
|
|
|
|
| 165 |
logger.info("MongoDB connection closed")
|
| 166 |
|
| 167 |
# --------------------- Logging API Hits ---------------------
|
| 168 |
+
async def log_faceswap_hit(user_email: str, status: str, start_time: datetime, end_time: datetime):
|
| 169 |
global database
|
| 170 |
if database is None:
|
| 171 |
return
|
| 172 |
+
|
| 173 |
+
response_time_ms = (end_time - start_time).total_seconds() * 1000
|
| 174 |
+
|
| 175 |
await database.api_logs.insert_one({
|
| 176 |
"user": user_email,
|
| 177 |
"endpoint": "/face-swap",
|
| 178 |
"status": status,
|
| 179 |
+
"start_time": start_time,
|
| 180 |
+
"end_time": end_time,
|
| 181 |
+
"response_time_ms": response_time_ms
|
| 182 |
})
|
| 183 |
|
| 184 |
+
|
| 185 |
# --------------------- Face Swap Pipeline ---------------------
|
| 186 |
swap_lock = threading.Lock()
|
| 187 |
|
|
|
|
| 286 |
target_category_id: str = Form(...),
|
| 287 |
user_email: str = Depends(verify_firebase_token)
|
| 288 |
):
|
| 289 |
+
start_time = datetime.utcnow()
|
| 290 |
try:
|
| 291 |
src_bytes = await source.read()
|
| 292 |
src_key = f"bikini-theme/source/{uuid.uuid4().hex}_{source.filename}"
|
|
|
|
| 323 |
result_bytes = f.read()
|
| 324 |
result_key = f"bikini-theme/result/{uuid.uuid4().hex}_enhanced.png"
|
| 325 |
result_url = upload_to_spaces(result_bytes, result_key, content_type="image/png")
|
| 326 |
+
end_time = datetime.utcnow()
|
| 327 |
+
await log_faceswap_hit(user_email, status="success", start_time=start_time, end_time=end_time)
|
| 328 |
|
| 329 |
return {"result_url": result_url}
|
| 330 |
|
| 331 |
+
except Exception as e:
|
| 332 |
+
end_time = datetime.utcnow()
|
| 333 |
+
await log_faceswap_hit(user_email, status="error", start_time=start_time, end_time=end_time)
|
| 334 |
+
raise HTTPException(status_code=500, detail=f"Face swap failed: {str(e)}")
|
| 335 |
+
|
| 336 |
|
| 337 |
@fastapi_app.get("/preview/{result_key:path}")
|
| 338 |
async def preview_result(result_key: str):
|