mirror of
https://github.com/house-of-vanity/Wireguard-Peer-Manager.git
synced 2025-07-07 01:34:08 +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)
|
||||
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
|
||||
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 = []
|
||||
for _if in stat.items():
|
||||
print(_if)
|
||||
msg.append(f"<b>{_if[0]}</b>\nStarted {_if[1]['started']}")
|
||||
peers = {}
|
||||
for peer in _if[1]['peers']:
|
||||
peers[peer['allowed_ips'][0]] = {
|
||||
"tx": peer['transfer_rx'],
|
||||
"rx": peer['transfer_tx'],
|
||||
"name": peer_names[peer['allowed_ips'][0]],
|
||||
"total": peer['transfer_rx'] + peer['transfer_tx']}
|
||||
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))
|
||||
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:
|
||||
msg = "\n".join(msg)
|
||||
update.message.reply_text(f"{msg}", parse_mode='HTML',)
|
||||
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)
|
||||
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({})
|
||||
|
||||
|
||||
def wg_json():
|
||||
cmd = ["/usr/bin/wg", "show", "all", "dump"]
|
||||
def wg_json(config="all"):
|
||||
cmd = ["/usr/bin/wg", "show", config, "dump"]
|
||||
proc = Popen(cmd,
|
||||
stdout=PIPE,
|
||||
stderr=PIPE,
|
||||
@ -122,13 +122,6 @@ def wg_json():
|
||||
stdout, stderr = proc.communicate()
|
||||
|
||||
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')
|
||||
if len(args) == 5:
|
||||
interface = Interface(
|
||||
@ -137,7 +130,7 @@ def wg_json():
|
||||
public_key=args[2],
|
||||
listen_port=args[3],
|
||||
fwmark=args[4],
|
||||
started=stdout.strip().split("=")[1],
|
||||
started=None,
|
||||
peers=[])
|
||||
wg_state[interface['name']] = interface
|
||||
elif len(args) == 9:
|
||||
@ -151,9 +144,38 @@ def wg_json():
|
||||
persistent_keepalive=args[8],
|
||||
allowed_ips=allowed_ips)
|
||||
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:
|
||||
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
|
||||
|
||||
class Peer:
|
||||
@ -307,7 +329,6 @@ if __name__ == '__main__':
|
||||
elif is_update:
|
||||
update_configs()
|
||||
elif json:
|
||||
#print(_json.dumps(wg_json()))
|
||||
print(wg_json()['wg0']['peers'][0])
|
||||
else:
|
||||
print(help_msg)
|
||||
|
Reference in New Issue
Block a user