Remove NetUtil class, don't inherit from object, slight refactoring.
This commit is contained in:
parent
a9116fa592
commit
8425db8d8d
@ -2,35 +2,32 @@
|
|||||||
import netifaces
|
import netifaces
|
||||||
import basiciw
|
import basiciw
|
||||||
import psutil
|
import psutil
|
||||||
from itertools import zip_longest
|
|
||||||
from i3pystatus import IntervalModule
|
from i3pystatus import IntervalModule
|
||||||
from i3pystatus.core.color import ColorRangeModule
|
from i3pystatus.core.color import ColorRangeModule
|
||||||
from i3pystatus.core.util import make_graph, round_dict, make_bar
|
from i3pystatus.core.util import make_graph, round_dict, make_bar
|
||||||
|
|
||||||
|
|
||||||
class NetUtil(object):
|
def count_bits(integer):
|
||||||
@staticmethod
|
|
||||||
def count_bits(integer):
|
|
||||||
bits = 0
|
bits = 0
|
||||||
while (integer):
|
while (integer):
|
||||||
integer &= integer - 1
|
integer &= integer - 1
|
||||||
bits += 1
|
bits += 1
|
||||||
return bits
|
return bits
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def v6_to_int(v6):
|
def v6_to_int(v6):
|
||||||
return int(v6.replace(":", ""), 16)
|
return int(v6.replace(":", ""), 16)
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def prefix6(mask):
|
|
||||||
return NetUtil.count_bits(NetUtil.v6_to_int(mask))
|
|
||||||
|
|
||||||
@staticmethod
|
def prefix6(mask):
|
||||||
def cidr6(addr, mask):
|
return count_bits(v6_to_int(mask))
|
||||||
return "{addr}/{bits}".format(addr=addr, bits=NetUtil.prefix6(mask))
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def v4_to_int(v4):
|
def cidr6(addr, mask):
|
||||||
|
return "{addr}/{bits}".format(addr=addr, bits=prefix6(mask))
|
||||||
|
|
||||||
|
|
||||||
|
def v4_to_int(v4):
|
||||||
sum = 0
|
sum = 0
|
||||||
mul = 1
|
mul = 1
|
||||||
for part in reversed(v4.split(".")):
|
for part in reversed(v4.split(".")):
|
||||||
@ -38,16 +35,16 @@ class NetUtil(object):
|
|||||||
mul *= 2 ** 8
|
mul *= 2 ** 8
|
||||||
return sum
|
return sum
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def prefix4(mask):
|
|
||||||
return NetUtil.count_bits(NetUtil.v4_to_int(mask))
|
|
||||||
|
|
||||||
@staticmethod
|
def prefix4(mask):
|
||||||
def cidr4(addr, mask):
|
return count_bits(v4_to_int(mask))
|
||||||
return "{addr}/{bits}".format(addr=addr, bits=NetUtil.prefix4(mask))
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def get_bonded_slaves():
|
def cidr4(addr, mask):
|
||||||
|
return "{addr}/{bits}".format(addr=addr, bits=prefix4(mask))
|
||||||
|
|
||||||
|
|
||||||
|
def get_bonded_slaves():
|
||||||
try:
|
try:
|
||||||
with open("/sys/class/net/bonding_masters") as f:
|
with open("/sys/class/net/bonding_masters") as f:
|
||||||
masters = f.read().split()
|
masters = f.read().split()
|
||||||
@ -60,8 +57,8 @@ class NetUtil(object):
|
|||||||
slaves[slave] = master
|
slaves[slave] = master
|
||||||
return slaves
|
return slaves
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def sysfs_interface_up(interface, unknown_up=False):
|
def sysfs_interface_up(interface, unknown_up=False):
|
||||||
try:
|
try:
|
||||||
with open("/sys/class/net/{}/operstate".format(interface)) as f:
|
with open("/sys/class/net/{}/operstate".format(interface)) as f:
|
||||||
status = f.read().strip()
|
status = f.read().strip()
|
||||||
@ -72,7 +69,7 @@ class NetUtil(object):
|
|||||||
return status == "up" or unknown_up and status == "unknown"
|
return status == "up" or unknown_up and status == "unknown"
|
||||||
|
|
||||||
|
|
||||||
class NetworkInfo(object):
|
class NetworkInfo():
|
||||||
"""
|
"""
|
||||||
Retrieve network information.
|
Retrieve network information.
|
||||||
"""
|
"""
|
||||||
@ -87,21 +84,19 @@ class NetworkInfo(object):
|
|||||||
self.unknown_up = unknown_up
|
self.unknown_up = unknown_up
|
||||||
|
|
||||||
def get_info(self, interface):
|
def get_info(self, interface):
|
||||||
format_dict = dict(
|
format_dict = dict(v4="", v4mask="", v4cidr="", v6="", v6mask="", v6cidr="")
|
||||||
zip_longest(["v4", "v4mask", "v4cidr", "v6", "v6mask", "v6cidr"], [], fillvalue=""))
|
iface_up = sysfs_interface_up(interface, self.unknown_up)
|
||||||
|
|
||||||
iface_up = NetUtil.sysfs_interface_up(interface, self.unknown_up)
|
|
||||||
if not iface_up:
|
if not iface_up:
|
||||||
return format_dict
|
return format_dict
|
||||||
|
|
||||||
network_info = netifaces.ifaddresses(interface)
|
network_info = netifaces.ifaddresses(interface)
|
||||||
slaves = NetUtil.get_bonded_slaves()
|
slaves = get_bonded_slaves()
|
||||||
try:
|
try:
|
||||||
master = slaves[interface]
|
master = slaves[interface]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
if NetUtil.sysfs_interface_up(interface, self.unknown_up):
|
if sysfs_interface_up(interface, self.unknown_up):
|
||||||
master_info = netifaces.ifaddresses(master)
|
master_info = netifaces.ifaddresses(master)
|
||||||
for af in (netifaces.AF_INET, netifaces.AF_INET6):
|
for af in (netifaces.AF_INET, netifaces.AF_INET6):
|
||||||
try:
|
try:
|
||||||
@ -128,25 +123,25 @@ class NetworkInfo(object):
|
|||||||
v4 = network_info[netifaces.AF_INET][0]
|
v4 = network_info[netifaces.AF_INET][0]
|
||||||
info["v4"] = v4["addr"]
|
info["v4"] = v4["addr"]
|
||||||
info["v4mask"] = v4["netmask"]
|
info["v4mask"] = v4["netmask"]
|
||||||
info["v4cidr"] = NetUtil.cidr4(v4["addr"], v4["netmask"])
|
info["v4cidr"] = cidr4(v4["addr"], v4["netmask"])
|
||||||
if netifaces.AF_INET6 in network_info:
|
if netifaces.AF_INET6 in network_info:
|
||||||
for v6 in network_info[netifaces.AF_INET6]:
|
for v6 in network_info[netifaces.AF_INET6]:
|
||||||
info["v6"] = v6["addr"]
|
info["v6"] = v6["addr"]
|
||||||
info["v6mask"] = v6["netmask"]
|
info["v6mask"] = v6["netmask"]
|
||||||
info["v6cidr"] = NetUtil.cidr6(v6["addr"], v6["netmask"])
|
info["v6cidr"] = cidr6(v6["addr"], v6["netmask"])
|
||||||
if not v6["addr"].startswith("fe80::"): # prefer non link-local addresses
|
if not v6["addr"].startswith("fe80::"): # prefer non link-local addresses
|
||||||
break
|
break
|
||||||
return info
|
return info
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def extract_wireless_info(interface):
|
def extract_wireless_info(interface):
|
||||||
|
info = dict(essid="", freq="", quality=0.0, quality_bar="")
|
||||||
try:
|
try:
|
||||||
iwi = basiciw.iwinfo(interface)
|
iwi = basiciw.iwinfo(interface)
|
||||||
except Exception:
|
except Exception:
|
||||||
# Not a wireless interface
|
# Not a wireless interface
|
||||||
return dict(essid="", freq="", quality=0.0, quality_bar="")
|
return info
|
||||||
|
|
||||||
info = dict()
|
|
||||||
info["essid"] = iwi["essid"]
|
info["essid"] = iwi["essid"]
|
||||||
info["freq"] = iwi["freq"]
|
info["freq"] = iwi["freq"]
|
||||||
quality = iwi["quality"]
|
quality = iwi["quality"]
|
||||||
@ -160,7 +155,7 @@ class NetworkInfo(object):
|
|||||||
return info
|
return info
|
||||||
|
|
||||||
|
|
||||||
class NetworkTraffic(object):
|
class NetworkTraffic():
|
||||||
"""
|
"""
|
||||||
Retrieve network traffic information
|
Retrieve network traffic information
|
||||||
"""
|
"""
|
||||||
@ -198,7 +193,7 @@ class NetworkTraffic(object):
|
|||||||
self.update_counters(interface)
|
self.update_counters(interface)
|
||||||
usage = dict(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0)
|
usage = dict(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0)
|
||||||
|
|
||||||
if not NetUtil.sysfs_interface_up(interface, self.unknown_up) or not self.pnic_before:
|
if not sysfs_interface_up(interface, self.unknown_up) or not self.pnic_before:
|
||||||
return usage
|
return usage
|
||||||
else:
|
else:
|
||||||
usage["bytes_sent"] = self.get_bytes_sent()
|
usage["bytes_sent"] = self.get_bytes_sent()
|
||||||
@ -330,11 +325,11 @@ class Network(IntervalModule, ColorRangeModule):
|
|||||||
else:
|
else:
|
||||||
raise Exception("graph_type must be either 'input' or 'output'!")
|
raise Exception("graph_type must be either 'input' or 'output'!")
|
||||||
|
|
||||||
format_values['interface'] = self.interface
|
|
||||||
format_values['network_graph'] = self.get_network_graph(kbs)
|
format_values['network_graph'] = self.get_network_graph(kbs)
|
||||||
format_values['kbs'] = "{0:.1f}".format(round(kbs, 2)).rjust(6)
|
format_values['kbs'] = "{0:.1f}".format(round(kbs, 2)).rjust(6)
|
||||||
|
format_values['interface'] = self.interface
|
||||||
|
|
||||||
if NetUtil.sysfs_interface_up(self.interface, self.unknown_up):
|
if sysfs_interface_up(self.interface, self.unknown_up):
|
||||||
if self.dynamic_color:
|
if self.dynamic_color:
|
||||||
color = self.get_gradient(kbs, self.colors, self.upper_limit)
|
color = self.get_gradient(kbs, self.colors, self.upper_limit)
|
||||||
else:
|
else:
|
||||||
|
Loading…
Reference in New Issue
Block a user