mirror of
https://github.com/anten-ka/gotelegram_pro.git
synced 2026-05-19 20:36:04 +00:00
v2.4.10: stats auto-install + i18n for show_proxy_info, traffic stats (SSH+bot)
This commit is contained in:
@@ -100,7 +100,7 @@ logger = logging.getLogger(__name__)
|
||||
# CONFIGURATION
|
||||
# ============================================================================
|
||||
|
||||
GOTELEGRAM_VERSION = "2.4.9"
|
||||
GOTELEGRAM_VERSION = "2.4.10"
|
||||
GOTELEGRAM_CONFIG = "/opt/gotelegram/config.json"
|
||||
TELEMT_CONFIG = "/etc/telemt/config.toml"
|
||||
TELEMT_SERVICE = "telemt"
|
||||
@@ -687,7 +687,7 @@ async def get_status_text(user_id: Optional[int] = None) -> str:
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
async def get_traffic_stats() -> str:
|
||||
async def get_traffic_stats(user_id: Optional[int] = None) -> str:
|
||||
"""Get formatted traffic statistics."""
|
||||
# Read current snapshot
|
||||
current_file = "/run/gotelegram/stats_current.json"
|
||||
@@ -697,7 +697,7 @@ async def get_traffic_stats() -> str:
|
||||
with open(current_file, "r") as f:
|
||||
current = json.load(f)
|
||||
except Exception:
|
||||
return "📊 <b>Статистика</b>\n\n<i>Данные недоступны. Убедитесь что модуль статистики включён.</i>"
|
||||
return f"📊 <b>{_t(user_id, 'stats_title', 'Statistics')}</b>\n\n<i>{_t(user_id, 'stats_unavailable', 'Data unavailable. Make sure stats module is enabled.')}</i>"
|
||||
|
||||
# Read history
|
||||
history = []
|
||||
@@ -754,21 +754,27 @@ async def get_traffic_stats() -> str:
|
||||
return format_bytes(diff), format_rate(rate)
|
||||
|
||||
periods = [
|
||||
("1 мин", 60),
|
||||
("5 мин", 300),
|
||||
("60 мин", 3600),
|
||||
("1 день", 86400),
|
||||
("7 дней", 604800),
|
||||
("30 дней", 2592000),
|
||||
("365 дней", 31536000),
|
||||
(_t(user_id, "stats_1min", "1 min"), 60),
|
||||
(_t(user_id, "stats_5min", "5 min"), 300),
|
||||
(_t(user_id, "stats_60min", "60 min"), 3600),
|
||||
(_t(user_id, "stats_1day", "1 day"), 86400),
|
||||
(_t(user_id, "stats_7days", "7 days"), 604800),
|
||||
(_t(user_id, "stats_30days", "30 days"), 2592000),
|
||||
(_t(user_id, "stats_365days", "365 days"), 31536000),
|
||||
]
|
||||
|
||||
lines = ["📊 <b>Статистика трафика</b>\n"]
|
||||
hdr_period = _t(user_id, "stats_hdr_period", "Period")
|
||||
hdr_traffic = _t(user_id, "stats_hdr_traffic", "Traffic")
|
||||
hdr_rate = _t(user_id, "stats_hdr_rate", "Rate")
|
||||
|
||||
for label, key in [("Proxy (telemt)", "proxy"), ("Сайт (nginx)", "site")]:
|
||||
lines = [f"📊 <b>{_t(user_id, 'stats_traffic_title', 'Traffic statistics')}</b>\n"]
|
||||
|
||||
lbl_proxy = _t(user_id, "stats_proxy_label", "Proxy (telemt)")
|
||||
lbl_site = _t(user_id, "stats_site_label", "Site (nginx)")
|
||||
for label, key in [(lbl_proxy, "proxy"), (lbl_site, "site")]:
|
||||
lines.append(f"\n<b>{label}:</b>")
|
||||
lines.append("<pre>")
|
||||
lines.append(f"{'Период':<10} │ {'Трафик':>10} │ {'Скорость':>10}")
|
||||
lines.append(f"{hdr_period:<10} │ {hdr_traffic:>10} │ {hdr_rate:>10}")
|
||||
lines.append("─" * 36)
|
||||
for name, secs in periods:
|
||||
total, rate = calc_for_period(secs, key)
|
||||
@@ -783,11 +789,12 @@ async def cb_menu_stats(update: Update, context: ContextTypes.DEFAULT_TYPE) -> N
|
||||
query = update.callback_query
|
||||
await query.answer()
|
||||
|
||||
stats_text = await get_traffic_stats()
|
||||
uid = _uid(update)
|
||||
stats_text = await get_traffic_stats(uid)
|
||||
|
||||
keyboard = [
|
||||
[InlineKeyboardButton("🔄 Обновить", callback_data="menu_stats")],
|
||||
[InlineKeyboardButton(_t(_uid(update), "btn_back"), callback_data="menu_main")],
|
||||
[InlineKeyboardButton(_t(uid, "btn_refresh", "🔄 Refresh"), callback_data="menu_stats")],
|
||||
[InlineKeyboardButton(_t(uid, "btn_back"), callback_data="menu_main")],
|
||||
]
|
||||
|
||||
await safe_edit_message(
|
||||
|
||||
@@ -112,5 +112,21 @@
|
||||
"cg_timeout": "❌ Clone timeout (repository too large or slow)",
|
||||
"cg_too_big": "❌ Repository too large (>100MB)",
|
||||
"cg_no_index": "❌ No index.html found in repository",
|
||||
"cg_ok_fmt": "✅ Custom template downloaded: %s"
|
||||
"cg_ok_fmt": "✅ Custom template downloaded: %s",
|
||||
|
||||
"stats_title": "Statistics",
|
||||
"stats_unavailable": "Data unavailable. Make sure stats module is enabled.",
|
||||
"stats_traffic_title": "Traffic statistics",
|
||||
"stats_proxy_label": "Proxy (telemt)",
|
||||
"stats_site_label": "Site (nginx)",
|
||||
"stats_hdr_period": "Period",
|
||||
"stats_hdr_traffic": "Traffic",
|
||||
"stats_hdr_rate": "Rate",
|
||||
"stats_1min": "1 min",
|
||||
"stats_5min": "5 min",
|
||||
"stats_60min": "60 min",
|
||||
"stats_1day": "1 day",
|
||||
"stats_7days": "7 days",
|
||||
"stats_30days": "30 days",
|
||||
"stats_365days": "365 days"
|
||||
}
|
||||
|
||||
@@ -112,5 +112,21 @@
|
||||
"cg_timeout": "❌ Таймаут клонирования (репозиторий слишком большой или медленный)",
|
||||
"cg_too_big": "❌ Репозиторий слишком большой (>100МБ)",
|
||||
"cg_no_index": "❌ В репозитории не найден index.html",
|
||||
"cg_ok_fmt": "✅ Свой шаблон загружен: %s"
|
||||
"cg_ok_fmt": "✅ Свой шаблон загружен: %s",
|
||||
|
||||
"stats_title": "Статистика",
|
||||
"stats_unavailable": "Данные недоступны. Убедитесь что модуль статистики включён.",
|
||||
"stats_traffic_title": "Статистика трафика",
|
||||
"stats_proxy_label": "Proxy (telemt)",
|
||||
"stats_site_label": "Сайт (nginx)",
|
||||
"stats_hdr_period": "Период",
|
||||
"stats_hdr_traffic": "Трафик",
|
||||
"stats_hdr_rate": "Скорость",
|
||||
"stats_1min": "1 мин",
|
||||
"stats_5min": "5 мин",
|
||||
"stats_60min": "60 мин",
|
||||
"stats_1day": "1 день",
|
||||
"stats_7days": "7 дней",
|
||||
"stats_30days": "30 дней",
|
||||
"stats_365days": "365 дней"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user