mirror of
https://github.com/anten-ka/gotelegram_pro.git
synced 2026-05-19 12:26:03 +00:00
v2.5.0: wait for telemt readiness in web admin
This commit is contained in:
@@ -16,6 +16,7 @@ import mimetypes
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import secrets
|
import secrets
|
||||||
|
import socket
|
||||||
import subprocess
|
import subprocess
|
||||||
import time
|
import time
|
||||||
import urllib.error
|
import urllib.error
|
||||||
@@ -152,7 +153,11 @@ def write_telemt_users(users: dict[str, str]) -> None:
|
|||||||
|
|
||||||
def restart_service(name: str) -> bool:
|
def restart_service(name: str) -> bool:
|
||||||
code, _, _ = run(["systemctl", "restart", name], timeout=25)
|
code, _, _ = run(["systemctl", "restart", name], timeout=25)
|
||||||
return code == 0
|
if code != 0:
|
||||||
|
return False
|
||||||
|
if name == "telemt":
|
||||||
|
return wait_tcp_port(read_telemt_port(), timeout=90)
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
def service_status(name: str) -> str:
|
def service_status(name: str) -> str:
|
||||||
@@ -168,6 +173,38 @@ def service_status(name: str) -> str:
|
|||||||
return "stopped"
|
return "stopped"
|
||||||
|
|
||||||
|
|
||||||
|
def read_telemt_port() -> int:
|
||||||
|
if not TELEMT_CONFIG.exists():
|
||||||
|
return 443
|
||||||
|
in_server = False
|
||||||
|
for raw in TELEMT_CONFIG.read_text(encoding="utf-8", errors="ignore").splitlines():
|
||||||
|
line = raw.strip()
|
||||||
|
if line == "[server]":
|
||||||
|
in_server = True
|
||||||
|
continue
|
||||||
|
if in_server and line.startswith("["):
|
||||||
|
break
|
||||||
|
if in_server and line.startswith("port") and "=" in line:
|
||||||
|
try:
|
||||||
|
return int(line.split("=", 1)[1].strip().split("#", 1)[0])
|
||||||
|
except ValueError:
|
||||||
|
return 443
|
||||||
|
return 443
|
||||||
|
|
||||||
|
|
||||||
|
def wait_tcp_port(port: int, timeout: int = 90) -> bool:
|
||||||
|
deadline = time.monotonic() + timeout
|
||||||
|
while time.monotonic() < deadline:
|
||||||
|
if service_status("telemt") not in {"running", "activating"}:
|
||||||
|
return False
|
||||||
|
try:
|
||||||
|
with socket.create_connection(("127.0.0.1", port), timeout=0.6):
|
||||||
|
return True
|
||||||
|
except OSError:
|
||||||
|
time.sleep(1)
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def public_ip() -> str:
|
def public_ip() -> str:
|
||||||
code, stdout, _ = run(["curl", "-s", "-4", "--max-time", "3", "https://api.ipify.org"], timeout=5)
|
code, stdout, _ = run(["curl", "-s", "-4", "--max-time", "3", "https://api.ipify.org"], timeout=5)
|
||||||
ip = stdout.strip()
|
ip = stdout.strip()
|
||||||
|
|||||||
Reference in New Issue
Block a user