Baida07 commited on
Commit
3ad2ea6
·
1 Parent(s): 603f423

sync: 193 file da Baida98/AI@52f96f4f (2026-08-28 09:13 UTC) [deploy-all] (#135)

Browse files

- sync: 193 file da Baida98/AI@52f96f4f (2026-08-28 09:13 UTC) [deploy-all] (6819abe673c768afa4e5c3a7e8d6160ed15746bf)

Files changed (2) hide show
  1. api/performance_rum.py +0 -76
  2. main.py +0 -2
api/performance_rum.py CHANGED
@@ -18,7 +18,6 @@ import re
18
  import time
19
  from datetime import datetime, timezone
20
  from typing import Annotated, Any
21
- from urllib.parse import parse_qs, urlsplit
22
 
23
  from fastapi import APIRouter, Depends, Header, HTTPException, Request, status
24
  from pydantic import BaseModel, ConfigDict, Field, field_validator
@@ -26,7 +25,6 @@ from pydantic import BaseModel, ConfigDict, Field, field_validator
26
  from .auth_guard import AuthRole, require_role
27
 
28
  router = APIRouter(prefix="/api/performance", tags=["performance"])
29
- debug_router = APIRouter(prefix="/api/debug", tags=["debug"])
30
  admin_dependency = Depends(require_role(AuthRole.ADMIN))
31
 
32
  _RELEASE_RE = re.compile(r"^[0-9a-f]{7,40}$")
@@ -124,28 +122,6 @@ def _db_url() -> str:
124
  return value
125
 
126
 
127
- def _db_target_metadata() -> dict[str, Any]:
128
- """Return only non-secret connection metadata for the temporary probe."""
129
- raw = _db_url()
130
- parsed = urlsplit(raw)
131
- host = (parsed.hostname or "").lower()
132
- port = parsed.port or 5432
133
- query = parse_qs(parsed.query)
134
- sslmode = query.get("sslmode", [None])[0]
135
- if "pooler" in host or port in {6543, 6544}:
136
- target = "pooler"
137
- else:
138
- target = "direct"
139
- return {
140
- "scheme": parsed.scheme,
141
- "target": target,
142
- "port": port,
143
- "sslmode_in_url": sslmode or "not_explicit",
144
- "has_database": bool(parsed.path and parsed.path != "/"),
145
- "has_username": bool(parsed.username),
146
- "has_password": bool(parsed.password),
147
- }
148
-
149
 
150
  def _execute(sql: str, params: dict[str, Any], *, fetch: bool = False) -> list[dict[str, Any]]:
151
  import psycopg2
@@ -214,58 +190,6 @@ async def ingest_metric(
214
  return {"accepted": True}
215
 
216
 
217
- @debug_router.get("/db-check", include_in_schema=False)
218
- async def debug_db_check(role: AuthRole = Depends(require_role(AuthRole.MACHINE))) -> dict[str, Any]:
219
- """Temporary internal DB probe; remove after diagnosing Supabase connectivity."""
220
- started = time.perf_counter()
221
- try:
222
- rows = await asyncio.to_thread(_execute, "select now() as db_now", {}, fetch=True)
223
- elapsed_ms = round((time.perf_counter() - started) * 1000, 1)
224
- return {
225
- "ok": True,
226
- "db_now": rows[0].get("db_now") if rows else None,
227
- "connection": _db_target_metadata(),
228
- "latency_ms": elapsed_ms,
229
- "tls_required": True,
230
- "connect_timeout_s": 5,
231
- "statement_timeout_ms": 5000,
232
- }
233
- except Exception as exc:
234
- elapsed_ms = round((time.perf_counter() - started) * 1000, 1)
235
- name = type(exc).__name__
236
- lowered = name.lower()
237
- if "timeout" in lowered or "cancel" in lowered:
238
- category = "timeout"
239
- elif "ssl" in lowered or "certificate" in lowered:
240
- category = "tls"
241
- elif "auth" in lowered or "password" in lowered:
242
- category = "authentication"
243
- elif "operational" in lowered or "connection" in lowered:
244
- category = "connectivity"
245
- else:
246
- category = "database"
247
- pgcode = getattr(exc, "pgcode", None)
248
- _logger.error("RUM db probe failed type=%s category=%s elapsed_ms=%s", name, category, elapsed_ms)
249
- metadata: dict[str, Any]
250
- try:
251
- metadata = _db_target_metadata()
252
- except Exception:
253
- metadata = {"configuration": "invalid_or_unavailable"}
254
- return {
255
- "ok": False,
256
- "error_category": category,
257
- "exception_type": name,
258
- "connection": metadata,
259
- "sqlstate": pgcode[:5] if isinstance(pgcode, str) else None,
260
- "latency_ms": elapsed_ms,
261
- "tls_required": True,
262
- "connect_timeout_s": 5,
263
- "statement_timeout_ms": 5000,
264
- }
265
-
266
-
267
- extra_routers = (debug_router,)
268
-
269
 
270
  @router.get("/admin/summary", dependencies=[admin_dependency])
271
  async def performance_summary(
 
18
  import time
19
  from datetime import datetime, timezone
20
  from typing import Annotated, Any
 
21
 
22
  from fastapi import APIRouter, Depends, Header, HTTPException, Request, status
23
  from pydantic import BaseModel, ConfigDict, Field, field_validator
 
25
  from .auth_guard import AuthRole, require_role
26
 
27
  router = APIRouter(prefix="/api/performance", tags=["performance"])
 
28
  admin_dependency = Depends(require_role(AuthRole.ADMIN))
29
 
30
  _RELEASE_RE = re.compile(r"^[0-9a-f]{7,40}$")
 
122
  return value
123
 
124
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
125
 
126
  def _execute(sql: str, params: dict[str, Any], *, fetch: bool = False) -> list[dict[str, Any]]:
127
  import psycopg2
 
190
  return {"accepted": True}
191
 
192
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
 
194
  @router.get("/admin/summary", dependencies=[admin_dependency])
195
  async def performance_summary(
main.py CHANGED
@@ -189,8 +189,6 @@ for prefix, module_name in _ROUTER_MAP.items():
189
  module = importlib.import_module(f"api.{module_name}")
190
  if hasattr(module, "router"):
191
  app.include_router(module.router)
192
- for extra_router in getattr(module, "extra_routers", ()):
193
- app.include_router(extra_router)
194
  _logger.info(f"✅ Route montata: /api/{prefix} (da api.{module_name})")
195
  else:
196
  _logger.warning(f"⚠️ Modulo api.{module_name} non ha un attributo 'router'")
 
189
  module = importlib.import_module(f"api.{module_name}")
190
  if hasattr(module, "router"):
191
  app.include_router(module.router)
 
 
192
  _logger.info(f"✅ Route montata: /api/{prefix} (da api.{module_name})")
193
  else:
194
  _logger.warning(f"⚠️ Modulo api.{module_name} non ha un attributo 'router'")