From a25f5b90664f635afafd50ed2700f04783ee9c4a Mon Sep 17 00:00:00 2001 From: David Vazgenovich Shakaryan Date: Tue, 20 Feb 2024 13:59:04 -0800 Subject: support matching multiple network interfaces via regex --- panel.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/panel.py b/panel.py index b67d2f2..34dc3d6 100755 --- a/panel.py +++ b/panel.py @@ -5,6 +5,7 @@ import os import psutil import queue +import re import subprocess import threading import time @@ -341,14 +342,19 @@ class ModInterval(Mod): self.timer.run() class ModNetIf(ModInterval): - def __init__(self, ifname, label=None, **kwargs): + def __init__(self, ifname, label=None, regex=False, **kwargs): super().__init__(**kwargs) self.ifname = ifname + self.regex = regex self.label = label or ifname def refresh(self): - stats = psutil.net_if_stats().get(self.ifname) - state = 'up' if stats and stats.isup else 'down' + stats = psutil.net_if_stats() + if self.regex: + arr = [v for k, v in stats.items() if re.fullmatch(self.ifname, k)] + else: + arr = [x] if (x := stats.get(self.ifname)) else [] + state = 'up' if any(x.isup for x in arr) else 'down' self.out = Fmt.labelled(self.label, state) class ModCPU(ModInterval): @@ -410,7 +416,7 @@ Panel( ModInputAvail( '/dev/input/by-id/usb-HID_Keyboard_HID_Keyboard-event-kbd', unavail_text='NO KEYBOARD'), - ModNetIf('wg0', interval=1), + ModNetIf('wg.*', regex=True, label='wg*', interval=1), ModCPU(interval=0.5), ModMem(interval=0.5), ModDate( -- cgit v1.2.3-70-g09d2