SilverElixir commited on
Commit
a726d19
·
1 Parent(s): 8fdbe53

Retryable 503 on broken webhook body, tz-aware export timestamp

Browse files
Files changed (1) hide show
  1. lumen_admin.py +5 -2
lumen_admin.py CHANGED
@@ -11,7 +11,7 @@ import hmac
11
  import logging
12
  import os
13
  import time
14
- from datetime import datetime
15
  from typing import Any
16
 
17
  import aiohttp
@@ -164,6 +164,9 @@ async def webhook_handler(request: Request) -> Any:
164
  return JSONResponse(status_code=503, content={"ok": False, "retry": True})
165
  except Exception as exc:
166
  log.warning("[webhook] Failed to process incoming update: %s", exc)
 
 
 
167
  return {"ok": True}
168
 
169
  async def probe_url(session: Any, url: str, *, timeout_sec: float = 6.0, redact: str = "") -> dict[str, Any]:
@@ -251,7 +254,7 @@ async def export_state(request: Request) -> dict[str, Any]:
251
  # Квота вложенная (счётчики per-model) — только deepcopy отцепляет её целиком.
252
  quota = copy.deepcopy(dict(bot.GLOBAL_QUOTA))
253
  return {
254
- "exported_at": datetime.now().isoformat(),
255
  "chats": chats,
256
  "global_quota": quota,
257
  }
 
11
  import logging
12
  import os
13
  import time
14
+ from datetime import datetime, timezone
15
  from typing import Any
16
 
17
  import aiohttp
 
164
  return JSONResponse(status_code=503, content={"ok": False, "retry": True})
165
  except Exception as exc:
166
  log.warning("[webhook] Failed to process incoming update: %s", exc)
167
+ # Битое тело — не успех: пусть Telegram повторит, а не считает дроп
168
+ # обработанным (аудит M2, 10.2026).
169
+ return JSONResponse(status_code=503, content={"ok": False, "retry": True})
170
  return {"ok": True}
171
 
172
  async def probe_url(session: Any, url: str, *, timeout_sec: float = 6.0, redact: str = "") -> dict[str, Any]:
 
254
  # Квота вложенная (счётчики per-model) — только deepcopy отцепляет её целиком.
255
  quota = copy.deepcopy(dict(bot.GLOBAL_QUOTA))
256
  return {
257
+ "exported_at": datetime.now(timezone.utc).isoformat(),
258
  "chats": chats,
259
  "global_quota": quota,
260
  }