mirror of
https://github.com/house-of-vanity/Wireguard-Peer-Manager.git
synced 2025-08-21 15:37:15 +00:00
Improve status
This commit is contained in:
12
bot.py
12
bot.py
@@ -94,30 +94,32 @@ def del_peer(update, context):
|
|||||||
wg_del_peer(peer_name)
|
wg_del_peer(peer_name)
|
||||||
update.message.reply_text("Done.")
|
update.message.reply_text("Done.")
|
||||||
|
|
||||||
# {'preshared_key': 'kl0iFpC0jtqPwWaGbasVyQQsUgOYS9KyH917IwJ6Izs=', 'endpoint': '(none)', 'latest_handshake': 0, 'transfer_rx': 0, 'transfer_tx': 0, 'persistent_keepalive': 'off', 'allowed_ips': ['10.150.200.14/32']}
|
|
||||||
@auth
|
@auth
|
||||||
def status(update, context):
|
def status(update, context):
|
||||||
stat = wg_json()
|
stat = wg_json(config)
|
||||||
|
peer_names = dict()
|
||||||
|
for peer in wg_list_peers():
|
||||||
|
peer_names[peer['ip']] = peer['name']
|
||||||
msg = []
|
msg = []
|
||||||
for _if in stat.items():
|
for _if in stat.items():
|
||||||
print(_if)
|
|
||||||
msg.append(f"<b>{_if[0]}</b>\nStarted {_if[1]['started']}")
|
msg.append(f"<b>{_if[0]}</b>\nStarted {_if[1]['started']}")
|
||||||
peers = {}
|
peers = {}
|
||||||
for peer in _if[1]['peers']:
|
for peer in _if[1]['peers']:
|
||||||
peers[peer['allowed_ips'][0]] = {
|
peers[peer['allowed_ips'][0]] = {
|
||||||
"tx": peer['transfer_rx'],
|
"tx": peer['transfer_rx'],
|
||||||
"rx": peer['transfer_tx'],
|
"rx": peer['transfer_tx'],
|
||||||
|
"name": peer_names[peer['allowed_ips'][0]],
|
||||||
"total": peer['transfer_rx'] + peer['transfer_tx']}
|
"total": peer['transfer_rx'] + peer['transfer_tx']}
|
||||||
peers_sorted = sorted(peers.items(), key=lambda x: x[1]['total'], reverse=True)
|
peers_sorted = sorted(peers.items(), key=lambda x: x[1]['total'], reverse=True)
|
||||||
peers_sorted = list(filter(lambda x: (x[1]['total'] != 0), peers_sorted))
|
peers_sorted = list(filter(lambda x: (x[1]['total'] != 0), peers_sorted))
|
||||||
for peer in peers_sorted:
|
for peer in peers_sorted:
|
||||||
t_msg = f" * <b>{peer[0]}</b>\n <b>Total</b> {size(peer[1]['total'])}<b> RX</b>: {size(peer[1]['rx'])} <b>TX</b>: {size(peer[1]['tx'])}"
|
t_msg = f" * <b>{peer[0]} {peer[1]['name']}</b>\n <b>Total</b> {size(peer[1]['total'])}<b> RX</b>: {size(peer[1]['rx'])} <b>TX</b>: {size(peer[1]['tx'])}"
|
||||||
if len(t_msg + "\n".join(msg)) >= tg_max_len:
|
if len(t_msg + "\n".join(msg)) >= tg_max_len:
|
||||||
msg = "\n".join(msg)
|
msg = "\n".join(msg)
|
||||||
update.message.reply_text(f"{msg}", parse_mode='HTML',)
|
update.message.reply_text(f"{msg}", parse_mode='HTML',)
|
||||||
msg = []
|
msg = []
|
||||||
msg.append(t_msg)
|
msg.append(t_msg)
|
||||||
msg.append("<b>Clients without any activity are skipped.</b>")
|
msg.append("<i>Clients without any activity are skipped.</i>")
|
||||||
msg = "\n".join(msg)
|
msg = "\n".join(msg)
|
||||||
update.message.reply_text(f"{msg}", parse_mode='HTML',)
|
update.message.reply_text(f"{msg}", parse_mode='HTML',)
|
||||||
|
|
||||||
|
45
gen.py
45
gen.py
@@ -112,8 +112,8 @@ class Wireguard(TypedDict):
|
|||||||
wg_state = Wireguard({})
|
wg_state = Wireguard({})
|
||||||
|
|
||||||
|
|
||||||
def wg_json():
|
def wg_json(config="all"):
|
||||||
cmd = ["/usr/bin/wg", "show", "all", "dump"]
|
cmd = ["/usr/bin/wg", "show", config, "dump"]
|
||||||
proc = Popen(cmd,
|
proc = Popen(cmd,
|
||||||
stdout=PIPE,
|
stdout=PIPE,
|
||||||
stderr=PIPE,
|
stderr=PIPE,
|
||||||
@@ -122,13 +122,6 @@ def wg_json():
|
|||||||
stdout, stderr = proc.communicate()
|
stdout, stderr = proc.communicate()
|
||||||
|
|
||||||
for v in stdout.split('\n'):
|
for v in stdout.split('\n'):
|
||||||
cmd = ["systemctl", "show", "wg-quick@wg0", "--property", "InactiveEnterTimestamp"]
|
|
||||||
proc = Popen(cmd,
|
|
||||||
stdout=PIPE,
|
|
||||||
stderr=PIPE,
|
|
||||||
universal_newlines=True
|
|
||||||
)
|
|
||||||
stdout, stderr = proc.communicate()
|
|
||||||
args = v.split('\t')
|
args = v.split('\t')
|
||||||
if len(args) == 5:
|
if len(args) == 5:
|
||||||
interface = Interface(
|
interface = Interface(
|
||||||
@@ -137,7 +130,7 @@ def wg_json():
|
|||||||
public_key=args[2],
|
public_key=args[2],
|
||||||
listen_port=args[3],
|
listen_port=args[3],
|
||||||
fwmark=args[4],
|
fwmark=args[4],
|
||||||
started=stdout.strip().split("=")[1],
|
started=None,
|
||||||
peers=[])
|
peers=[])
|
||||||
wg_state[interface['name']] = interface
|
wg_state[interface['name']] = interface
|
||||||
elif len(args) == 9:
|
elif len(args) == 9:
|
||||||
@@ -151,9 +144,38 @@ def wg_json():
|
|||||||
persistent_keepalive=args[8],
|
persistent_keepalive=args[8],
|
||||||
allowed_ips=allowed_ips)
|
allowed_ips=allowed_ips)
|
||||||
wg_state[args[0]]['peers'].append(peer)
|
wg_state[args[0]]['peers'].append(peer)
|
||||||
|
elif len(args) == 4:
|
||||||
|
interface = Interface(
|
||||||
|
name=config,
|
||||||
|
private_key=args[0],
|
||||||
|
public_key=args[1],
|
||||||
|
listen_port=args[2],
|
||||||
|
fwmark=args[3],
|
||||||
|
started=None,
|
||||||
|
peers=[])
|
||||||
|
wg_state[interface['name']] = interface
|
||||||
|
elif len(args) == 8:
|
||||||
|
allowed_ips = args[3].replace(' ', '').split(',')
|
||||||
|
peer = WG_peer(
|
||||||
|
preshared_key=args[0],
|
||||||
|
endpoint=args[2],
|
||||||
|
latest_handshake=int(args[4]),
|
||||||
|
transfer_rx=int(args[5]),
|
||||||
|
transfer_tx=int(args[6]),
|
||||||
|
persistent_keepalive=args[7],
|
||||||
|
allowed_ips=allowed_ips)
|
||||||
|
wg_state[config]['peers'].append(peer)
|
||||||
else:
|
else:
|
||||||
pass
|
pass
|
||||||
#return _json.dumps(wg_state)
|
for interface in set(wg_state):
|
||||||
|
cmd = ["systemctl", "show", f"wg-quick@{interface}", "--property", "InactiveEnterTimestamp"]
|
||||||
|
proc = Popen(cmd,
|
||||||
|
stdout=PIPE,
|
||||||
|
stderr=PIPE,
|
||||||
|
universal_newlines=True
|
||||||
|
)
|
||||||
|
stdout, stderr = proc.communicate()
|
||||||
|
wg_state[interface]['started'] = stdout.strip().split("=")[1]
|
||||||
return wg_state
|
return wg_state
|
||||||
|
|
||||||
class Peer:
|
class Peer:
|
||||||
@@ -307,7 +329,6 @@ if __name__ == '__main__':
|
|||||||
elif is_update:
|
elif is_update:
|
||||||
update_configs()
|
update_configs()
|
||||||
elif json:
|
elif json:
|
||||||
#print(_json.dumps(wg_json()))
|
|
||||||
print(wg_json()['wg0']['peers'][0])
|
print(wg_json()['wg0']['peers'][0])
|
||||||
else:
|
else:
|
||||||
print(help_msg)
|
print(help_msg)
|
||||||
|
Reference in New Issue
Block a user