mirror of
https://github.com/andrey271192/amnezia_web-PRO.git
synced 2026-11-04 00:43:15 +00:00
60 lines
3.0 KiB
Python
60 lines
3.0 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""Боевая проверка: на каждом сервере и каждом протоколе создаём тестового
|
||
клиента и тут же удаляем. Именно так работает кнопка «Добавить подключение».
|
||
|
||
Считаем пиров до и после: если после удаления число не вернулось — значит
|
||
за нами остался мусор, и это надо видеть.
|
||
"""
|
||
import json, sys, time
|
||
sys.path.insert(0, "/app")
|
||
from managers.ssh_manager import SSHManager
|
||
from managers.awg_manager import AWGManager
|
||
|
||
ИМЯ = "__проверка_связи_" + time.strftime("%d%m_%H%M")
|
||
ПРОТОКОЛЫ = ("awg", "awg2", "awg3", "awg31", "wireguard")
|
||
|
||
d = json.load(open("/app/data/data.json"))
|
||
итог = {"ok": 0, "сбой": 0, "мусор": 0}
|
||
|
||
for s in d["servers"]:
|
||
протоколы = [p for p in ПРОТОКОЛЫ
|
||
if (s.get("protocols", {}).get(p) or {}).get("installed")]
|
||
if not протоколы:
|
||
print(" – %-26s протоколов AWG не заведено" % s["name"][:26])
|
||
continue
|
||
for proto in протоколы:
|
||
метка = "%s / %s" % (s["name"][:22], proto)
|
||
try:
|
||
ssh = SSHManager(s["host"], s.get("ssh_port", 22), s["username"],
|
||
password=s.get("password") or None,
|
||
private_key=s.get("private_key") or None,
|
||
connect_timeout=10, connect_retries=1)
|
||
ssh.connect()
|
||
try:
|
||
m = AWGManager(ssh)
|
||
было = len(m._get_used_ips(proto))
|
||
порт = (s["protocols"][proto] or {}).get("port", "55424")
|
||
r = m.add_client(proto, ИМЯ, s["host"], порт)
|
||
cid = r.get("client_id") or r.get("clientId")
|
||
есть_конфиг = bool(r.get("config"))
|
||
стало = len(m._get_used_ips(proto))
|
||
m.remove_client(proto, cid)
|
||
после = len(m._get_used_ips(proto))
|
||
finally:
|
||
ssh.disconnect()
|
||
|
||
если_чисто = (после == было)
|
||
итог["ok" if (есть_конфиг and стало == было + 1) else "сбой"] += 1
|
||
if not если_чисто:
|
||
итог["мусор"] += 1
|
||
print(" %s %-30s пиров %d → %d → %d конфиг=%s" % (
|
||
"ok" if (есть_конфиг and стало == было + 1 and если_чисто) else "!!",
|
||
метка, было, стало, после, "есть" if есть_конфиг else "НЕТ"))
|
||
except Exception as e:
|
||
итог["сбой"] += 1
|
||
print(" !! %-30s %s" % (метка, str(e)[:70]))
|
||
|
||
print("\nсоздалось и убралось начисто: %d, сбоев: %d, осталось мусора: %d"
|
||
% (итог["ok"], итог["сбой"], итог["мусор"]))
|