diff --git a/bot/handlers/admin/common.py b/bot/handlers/admin/common.py
index 0592fdb..ec42332 100644
--- a/bot/handlers/admin/common.py
+++ b/bot/handlers/admin/common.py
@@ -105,6 +105,10 @@ async def admin_panel_actions_callback_handler(
elif action == "view_logs_menu":
await admin_logs_handlers.display_logs_menu(callback, i18n_data,
settings, session)
+ elif action == "promo_management":
+ from . import promo_codes as admin_promo_handlers
+ await admin_promo_handlers.promo_management_handler(
+ callback, i18n_data, settings, session)
elif action == "sync_panel":
await admin_sync_handlers.sync_command_handler(
diff --git a/bot/handlers/admin/statistics.py b/bot/handlers/admin/statistics.py
index 485dda1..54622aa 100644
--- a/bot/handlers/admin/statistics.py
+++ b/bot/handlers/admin/statistics.py
@@ -208,63 +208,6 @@ async def show_statistics_handler(callback: types.CallbackQuery,
else:
stats_text_parts.append(f"\n{_('admin_sync_status_never_run')}")
- # Panel Statistics
- stats_text_parts.append(f"\n🖥 {_('admin_panel_stats_header', default='Статистика панели')}")
-
- try:
- async with PanelApiService(settings) as panel_service:
- # Get panel system statistics
- logging.info("Fetching panel statistics...")
- panel_stats = await panel_service.get_panel_statistics()
- nodes_stats = await panel_service.get_nodes_statistics()
- online_count = await panel_service.get_online_users_count()
- users_activity = await panel_service.get_users_activity_stats()
-
- logging.info(f"Panel stats response: panel_stats={panel_stats}, nodes_stats={nodes_stats}, online_count={online_count}, users_activity={users_activity}")
-
- # Online users
- if online_count is not None:
- stats_text_parts.append(f"🟢 Онлайн сейчас: {online_count}")
- else:
- stats_text_parts.append(f"🟢 Онлайн сейчас: N/A")
-
- # Users activity
- if users_activity:
- today_connected = users_activity.get('today_connected', 'N/A')
- week_connected = users_activity.get('week_connected', 'N/A')
- never_connected = users_activity.get('never_connected', 'N/A')
- stats_text_parts.append(f"📅 Подключались сегодня: {today_connected}")
- stats_text_parts.append(f"📅 Подключались за неделю: {week_connected}")
- stats_text_parts.append(f"❌ Никогда не подключались: {never_connected}")
- else:
- stats_text_parts.append(f"📅 Активность пользователей: N/A")
-
- # Nodes statistics
- if nodes_stats:
- active_nodes = len([node for node in nodes_stats if node.get('status') == 'active'])
- total_nodes = len(nodes_stats)
- stats_text_parts.append(f"🔗 Активных нод: {active_nodes}/{total_nodes}")
- else:
- stats_text_parts.append(f"🔗 Ноды: N/A")
-
- # System statistics
- if panel_stats:
- system_info = panel_stats.get('system', {})
- if system_info:
- memory_usage = system_info.get('memory_usage_percent', 'N/A')
- cpu_usage = system_info.get('cpu_usage_percent', 'N/A')
- stats_text_parts.append(f"💾 Использование RAM: {memory_usage}%")
- stats_text_parts.append(f"🔄 Загрузка CPU: {cpu_usage}%")
- else:
- stats_text_parts.append(f"💾 Системная информация: N/A")
- else:
- stats_text_parts.append(f"💾 Системная статистика: N/A")
-
- except Exception as e:
- logging.error(f"Failed to fetch panel statistics: {e}", exc_info=True)
- stats_text_parts.append("❌ Ошибка получения данных с панели")
- stats_text_parts.append(f"⚠️ Детали: {str(e)}")
-
final_text = "\n".join(stats_text_parts)
try: