Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions hiddifypanel/drivers/telegram_metrics.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import re
from decimal import Decimal

_PROMETHEUS_NUMBER = r"([+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?)"
_TELEMT_PATTERN = re.compile(
r'telemt_user_octets_(from_client|to_client)\{user="([^"]+)"\}\s+'
+ _PROMETHEUS_NUMBER
)
_TELEGO_PATTERN = re.compile(
r'telego_traffic_(in|out)_bytes_total\{[^}]*user="([^"]+)"[^}]*\}\s+'
+ _PROMETHEUS_NUMBER
)


def parse_usage_metrics(raw_output: str, telegram_lib: str) -> dict[str, dict[str, int]]:
if telegram_lib == "telemt":
pattern = _TELEMT_PATTERN
upload_direction = "from_client"
elif telegram_lib == "telego":
pattern = _TELEGO_PATTERN
upload_direction = "in"
else:
return {}

data = {}
for line in raw_output.splitlines():
match = pattern.search(line)
if not match:
continue

direction, user, raw_value = match.groups()
usage = data.setdefault(user, {"down": 0, "up": 0})
key = "up" if direction == upload_direction else "down"
usage[key] = int(Decimal(raw_value))

return data
33 changes: 3 additions & 30 deletions hiddifypanel/drivers/telemt_api.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import json
import os
import re

import requests

from .abstract_driver import DriverABS
from .telegram_metrics import parse_usage_metrics
from hiddifypanel.models import User, hconfig, ConfigEnum
from hiddifypanel.panel.run_commander import Command, commander
import redis
Expand All @@ -21,7 +21,7 @@ def get_redis_client(self):
return self.redis_client

def is_enabled(self) -> bool:
return hconfig(ConfigEnum.telegram_enable) and hconfig(ConfigEnum.telegram_lib)=="telemt"
return hconfig(ConfigEnum.telegram_enable) and hconfig(ConfigEnum.telegram_lib) in {"telemt", "telego"}

def __init__(self) -> None:
super().__init__()
Expand Down Expand Up @@ -50,34 +50,7 @@ def get_metric(self):
return resp.text

def __get_tg_usages(self) -> dict:
raw_output = self.get_metric()
data = {}

# Example lines:
# telemt_user_octets_from_client{user="uuid"} 1983
# telemt_user_octets_to_client{user="uuid"} 2171

pattern = re.compile(
r'telemt_user_octets_(from_client|to_client)\{user="([^"]+)"\}\s+(\d+)'
)

for line in raw_output.splitlines():
match = pattern.search(line)
if not match:
continue

direction, user, value = match.groups()
value = int(value)

if user not in data:
data[user] = {"down": 0, "up": 0}

if direction == "from_client":
data[user]["up"] = value
else: # to_client
data[user]["down"] = value

return data
return parse_usage_metrics(self.get_metric(), hconfig(ConfigEnum.telegram_lib))

def __get_local_usage(self) -> dict:
usage_data = self.get_redis_client() .get(USERS_USAGE)
Expand Down
1 change: 1 addition & 0 deletions hiddifypanel/panel/admin/SettingAdmin.py
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@ class Meta:
("python", _("lib.telegram.python")),
("tgo", _("lib.telegram.go")),
("telemt", _("lib.telegram.telemt")),
("telego", "telEgo (no ad tag)"),
# ("orig", _("lib.telegram.orignal")),
]
field = wtf.SelectField(_("config.telegram_lib.label"), choices=libs, description=_("config.telegram_lib.description"), default=hconfig(ConfigEnum.telegram_lib))
Expand Down
2 changes: 1 addition & 1 deletion hiddifypanel/panel/commercial/restapi/v2/user/mtproxies.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def get(self):

# make mtproxy link
raw_sec = hconfig(ConfigEnum.shared_secret, d.child_id)
if hconfig(ConfigEnum.telegram_lib)=="telemt":
if hconfig(ConfigEnum.telegram_lib) in {"telemt", "telego"}:
raw_sec=g.account.uuid
secret_hex = str(raw_sec).replace('-', '')
telegram_faketls_domain_hex = hconfig(ConfigEnum.telegram_fakedomain, d.child_id).encode('utf-8').hex()
Expand Down
8 changes: 6 additions & 2 deletions hiddifypanel/panel/user/templates/home/telegram.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
{% macro tg_proxy_btn(d) -%}
<div class="btn-group">
{% set hexuuid=hconfigs[ConfigEnum.shared_secret].replace("-","") %}
{% if hconfigs[ConfigEnum.telegram_lib] in ["telemt", "telego"] %}
{% set hexuuid=user.uuid.replace("-", "") %}
{% else %}
{% set hexuuid=hconfigs[ConfigEnum.shared_secret].replace("-", "") %}
{% endif %}
<a href="tg://proxy?server={{d.domain}}&amp;port=443&amp;secret=ee{{hexuuid}}{{hconfigs[ConfigEnum.telegram_fakedomain].encode('utf-8').hex()}}" class="btn btn-primary orig-link">{{_("user.home.telegram.clickbtn")}}
<span class="badge ltr badge-info">{{d.alias or d.domain}}</span></a>
</div>
Expand All @@ -13,4 +17,4 @@
{% if d.mode =='direct' or d.mode =='relay' %}
{{tg_proxy_btn(d)}}
{% endif %}
{% endfor %}
{% endfor %}
Loading