Merge pull request #138 from simon04/network_traffic_down

network_traffic: allow to hide down interfaces
This commit is contained in:
enkore 2014-11-07 11:09:42 +01:00
commit 6691e7d6fc

View File

@ -21,12 +21,16 @@ class NetworkTraffic(IntervalModule):
interval = 1 interval = 1
settings = ( settings = (
("format", "format string"), ("format", "format string"),
("format_down", "format string if the interface is down (unless hide_down is set)"),
("hide_down", "whether to not display a interface which is down"),
("interface", "network interface"), ("interface", "network interface"),
("divisor", "divide all byte values by this value"), ("divisor", "divide all byte values by this value"),
("round_size", "defines number of digits in round"), ("round_size", "defines number of digits in round"),
) )
format = "{interface} \u2197{bytes_sent}kB/s \u2198{bytes_recv}kB/s" format = "{interface} \u2197{bytes_sent}kB/s \u2198{bytes_recv}kB/s"
format_down = "{interface} \u2013"
hide_down = False
interface = "eth0" interface = "eth0"
divisor = 1024 divisor = 1024
round_size = None round_size = None
@ -36,7 +40,8 @@ class NetworkTraffic(IntervalModule):
def update_counters(self): def update_counters(self):
self.pnic_before = self.pnic self.pnic_before = self.pnic
self.pnic = psutil.net_io_counters(pernic=True)[self.interface] counters = psutil.net_io_counters(pernic=True)
self.pnic = counters[self.interface] if self.interface in counters else None
def get_bytes_sent(self): def get_bytes_sent(self):
return (self.pnic.bytes_sent - self.pnic_before.bytes_sent) / self.divisor return (self.pnic.bytes_sent - self.pnic_before.bytes_sent) / self.divisor
@ -50,19 +55,40 @@ class NetworkTraffic(IntervalModule):
def get_packets_received(self): def get_packets_received(self):
return self.pnic.packets_recv - self.pnic_before.packets_recv return self.pnic.packets_recv - self.pnic_before.packets_recv
def sysfs_interface_up(self):
try:
sysfs = "/sys/class/net/{}/operstate".format(self.interface)
with open(sysfs) as operstate:
status = operstate.read().strip()
return status == "up" or status == "unknown"
except FileNotFoundError:
return False
def run(self): def run(self):
self.update_counters() self.update_counters()
if not self.pnic_before: if self.sysfs_interface_up():
if not self.pnic_before:
return
cdict = {
"bytes_sent": self.get_bytes_sent(),
"bytes_recv": self.get_bytes_received(),
"packets_sent": self.get_packets_sent(),
"packets_recv": self.get_packets_received(),
}
round_dict(cdict, self.round_size)
cdict["interface"] = self.interface
self.output = {
"full_text": self.format.format(**cdict),
"instance": self.interface,
}
elif self.hide_down:
self.output = None
return return
cdict = { else:
"bytes_sent": self.get_bytes_sent(), cdict = {
"bytes_recv": self.get_bytes_received(), "interface": self.interface,
"packets_sent": self.get_packets_sent(), }
"packets_recv": self.get_packets_received(), self.output = {
} "full_text": self.format_down.format(**cdict),
round_dict(cdict, self.round_size) "instance": self.interface,
cdict["interface"] = self.interface }
self.output = {
"full_text": self.format.format(**cdict),
"instance": self.interface,
}