Remove NetUtil class, don't inherit from object, slight refactoring.

This commit is contained in:
facetoe 2015-01-04 10:46:15 +08:00
parent a9116fa592
commit 8425db8d8d

View File

@ -2,14 +2,11 @@
import netifaces
import basiciw
import psutil
from itertools import zip_longest
from i3pystatus import IntervalModule
from i3pystatus.core.color import ColorRangeModule
from i3pystatus.core.util import make_graph, round_dict, make_bar
class NetUtil(object):
@staticmethod
def count_bits(integer):
bits = 0
while (integer):
@ -17,19 +14,19 @@ class NetUtil(object):
bits += 1
return bits
@staticmethod
def v6_to_int(v6):
return int(v6.replace(":", ""), 16)
@staticmethod
def prefix6(mask):
return NetUtil.count_bits(NetUtil.v6_to_int(mask))
return count_bits(v6_to_int(mask))
@staticmethod
def cidr6(addr, mask):
return "{addr}/{bits}".format(addr=addr, bits=NetUtil.prefix6(mask))
return "{addr}/{bits}".format(addr=addr, bits=prefix6(mask))
@staticmethod
def v4_to_int(v4):
sum = 0
mul = 1
@ -38,15 +35,15 @@ class NetUtil(object):
mul *= 2 ** 8
return sum
@staticmethod
def prefix4(mask):
return NetUtil.count_bits(NetUtil.v4_to_int(mask))
return count_bits(v4_to_int(mask))
@staticmethod
def cidr4(addr, mask):
return "{addr}/{bits}".format(addr=addr, bits=NetUtil.prefix4(mask))
return "{addr}/{bits}".format(addr=addr, bits=prefix4(mask))
@staticmethod
def get_bonded_slaves():
try:
with open("/sys/class/net/bonding_masters") as f:
@ -60,7 +57,7 @@ class NetUtil(object):
slaves[slave] = master
return slaves
@staticmethod
def sysfs_interface_up(interface, unknown_up=False):
try:
with open("/sys/class/net/{}/operstate".format(interface)) as f:
@ -72,7 +69,7 @@ class NetUtil(object):
return status == "up" or unknown_up and status == "unknown"
class NetworkInfo(object):
class NetworkInfo():
"""
Retrieve network information.
"""
@ -87,21 +84,19 @@ class NetworkInfo(object):
self.unknown_up = unknown_up
def get_info(self, interface):
format_dict = dict(
zip_longest(["v4", "v4mask", "v4cidr", "v6", "v6mask", "v6cidr"], [], fillvalue=""))
iface_up = NetUtil.sysfs_interface_up(interface, self.unknown_up)
format_dict = dict(v4="", v4mask="", v4cidr="", v6="", v6mask="", v6cidr="")
iface_up = sysfs_interface_up(interface, self.unknown_up)
if not iface_up:
return format_dict
network_info = netifaces.ifaddresses(interface)
slaves = NetUtil.get_bonded_slaves()
slaves = get_bonded_slaves()
try:
master = slaves[interface]
except KeyError:
pass
else:
if NetUtil.sysfs_interface_up(interface, self.unknown_up):
if sysfs_interface_up(interface, self.unknown_up):
master_info = netifaces.ifaddresses(master)
for af in (netifaces.AF_INET, netifaces.AF_INET6):
try:
@ -128,25 +123,25 @@ class NetworkInfo(object):
v4 = network_info[netifaces.AF_INET][0]
info["v4"] = v4["addr"]
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:
for v6 in network_info[netifaces.AF_INET6]:
info["v6"] = v6["addr"]
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
break
return info
@staticmethod
def extract_wireless_info(interface):
info = dict(essid="", freq="", quality=0.0, quality_bar="")
try:
iwi = basiciw.iwinfo(interface)
except Exception:
# Not a wireless interface
return dict(essid="", freq="", quality=0.0, quality_bar="")
return info
info = dict()
info["essid"] = iwi["essid"]
info["freq"] = iwi["freq"]
quality = iwi["quality"]
@ -160,7 +155,7 @@ class NetworkInfo(object):
return info
class NetworkTraffic(object):
class NetworkTraffic():
"""
Retrieve network traffic information
"""
@ -198,7 +193,7 @@ class NetworkTraffic(object):
self.update_counters(interface)
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
else:
usage["bytes_sent"] = self.get_bytes_sent()
@ -330,11 +325,11 @@ class Network(IntervalModule, ColorRangeModule):
else:
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['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:
color = self.get_gradient(kbs, self.colors, self.upper_limit)
else: