diff --git a/web/app.py b/web/app.py index f73bd49..c7bc1b7 100644 --- a/web/app.py +++ b/web/app.py @@ -167,11 +167,12 @@ async def dashboard(request: Request, username: str = Depends(get_current_admin) return templates.TemplateResponse(request=request, name="dashboard.html", context={ "username": username, - "stats": { - "users": users_count, "verified": verified_count, - "messages": messages_count, "ads": active_ads, - "polls": active_polls, "events": upcoming_events - }, + "users_count": users_count, + "verified_count": verified_count, + "messages_count": messages_count, + "active_ads": active_ads, + "active_polls": active_polls, + "upcoming_events": upcoming_events, "pending_count": pending_count }) @@ -728,6 +729,23 @@ async def api_emails_sync_ai(username: str = Depends(get_current_admin)): except Exception as e: return JSONResponse(status_code=500, content={"message": str(e)}) +@app.get("/api/emails/pipeline_status") +async def api_emails_pipeline_status(username: str = Depends(get_current_admin)): + import time + status_file = Path("/home/matrixhasyou/mutt/pipeline_status.json") + if not status_file.exists(): + return JSONResponse(content={"status": "idle", "step": "Неактивен", "updated_at": "-", "new_emails": 0, "total_emails": 0, "pdf_size_mb": 0.0}) + try: + with open(status_file) as f: + data = json.load(f) + mtime = status_file.stat().st_mtime + if data.get("status") == "running" and (time.time() - mtime > 600): + data["status"] = "stuck" + data["step"] = "Процесс завис или был остановлен" + return JSONResponse(content=data) + except Exception as e: + return JSONResponse(content={"status": "error", "message": str(e)}) + @app.get("/infra", response_class=HTMLResponse) async def get_infra_page(request: Request, username: str = Depends(get_current_admin)): async with AsyncSessionLocal() as session: diff --git a/web/templates/dashboard.html b/web/templates/dashboard.html index 38db077..b0cc514 100644 --- a/web/templates/dashboard.html +++ b/web/templates/dashboard.html @@ -67,7 +67,7 @@
СИСТЕМНЫЙ_СТАТУС
- [OK] Database: sqlite3/domovoy.db
+ [OK] Database: PostgreSQL (Synology NAS)
[OK] Telegram: @lkmthreeseven_bot
[OK] Proxy: Active (127.0.0.1:10808)
[OK] Node: {{ username }}@server
diff --git a/web/templates/digest_settings.html b/web/templates/digest_settings.html index eddbf9b..95dc6d9 100644 --- a/web/templates/digest_settings.html +++ b/web/templates/digest_settings.html @@ -7,19 +7,21 @@ {% block extra_style %} {% endblock %} diff --git a/web/templates/digests.html b/web/templates/digests.html index a0a8748..8f24c71 100644 --- a/web/templates/digests.html +++ b/web/templates/digests.html @@ -11,44 +11,47 @@ {% block content %} diff --git a/web/templates/emails.html b/web/templates/emails.html index ab41aa3..8c3a3c8 100644 --- a/web/templates/emails.html +++ b/web/templates/emails.html @@ -124,9 +124,32 @@
-
+ +
+ +
+ + +
-
ЛОГ_ПОСЛЕДНЕГО_ЗАПУСКА
+
ЛОГ_ПОСЛЕДНЕГО_ЗАПУСКА (БАЗА ДАННЫХ)
{% if last_log %} @@ -144,6 +167,77 @@
- {% endblock %} - +}); + +{% endblock %} diff --git a/web/templates/users.html b/web/templates/users.html index b3fb04c..b429621 100644 --- a/web/templates/users.html +++ b/web/templates/users.html @@ -19,36 +19,42 @@ + +
-
+

{{ total_count }}

- ВСЕГО + ⚡️ ВСЕГО
-
+

{{ verified_count }}

- ВЕРИФИЦИРОВАНЫ + ✅ ВЕРИФИЦИРОВАНЫ
-
+

{{ ig_count }}

- ИНИЦИАТИВНАЯ ГРУППА + 🔵 ИНИЦИАТИВНАЯ ГРУППА
-
+

{{ active_unverified }}

- АКТИВНЫЕ ГОСТИ + 🔥 АКТИВНЫЕ ГОСТИ