PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB` import agent_util import sys import os from datetime import datetime from agent_util import float import fnmatch class BandwidthPlugin(agent_util.Plugin): textkey = "bandwidth" label = "Bandwidth" @classmethod def get_metadata(self, config): def add_to_interfaces(iface): if any(fnmatch.fnmatch(iface, f) for f in filter_interfaces): return if type(interfaces) == set: interfaces.add(iface) else: interfaces.append(iface) status = agent_util.SUPPORTED msg = None interfaces = set() filter_interfaces = [] filter_interfaces_config = config.get("filter_interfaces") if filter_interfaces_config: if filter_interfaces_config[0] == '[': filter_interfaces_config = filter_interfaces_config.strip("[]") for f in filter_interfaces_config.split(","): f = f.strip() if f: if f[0] == '"': f = f.strip('"') elif f[0] == "'": f = f.strip("'") if f: filter_interfaces.append(f) if 'freebsd' in sys.platform or "darwin" in sys.platform: netstat_binary = agent_util.which("netstat") if not netstat_binary: self.log.info("netstat not found") status = agent_util.UNSUPPORTED msg = "Please install netstat." return {} if status is agent_util.SUPPORTED: ret, output = agent_util.execute_command("%s -ib" % netstat_binary) self.log.debug("BANDWIDTH INFO") self.log.debug(output) if config.get("debug", False): self.log.debug('#####################################################') self.log.debug("Bandwidth command 'netstat -ib' output:") self.log.debug(output) self.log.debug('#####################################################') output = output.splitlines()[1:] for line in output: if line == '' or 'lo' in line: continue stuff = line.strip().split() iface = stuff[0] add_to_interfaces(iface) elif 'aix' in sys.platform: if not agent_util.which("netstat"): self.log.info("netstat not found") status = agent_util.UNSUPPORTED msg = "Please install netstat." return {} # Get the list of network devices interfaces = [] ret, output = agent_util.execute_command("netstat -v | grep 'ETHERNET STATISTICS'") output = output.strip().split('\n') for line in output: fields = line.split() try: add_to_interfaces(fields[2].strip('(').strip(')')) except: pass metadata = {} metadata["bandwidth.kbytes.in"] = { "label": "Kilobytes IN per second", "options": interfaces, "status": status, "error_message": msg, "unit": "kB" } metadata["bandwidth.kbytes.out"] = { "label": "Kilobytes OUT per second", "options": interfaces, "status": status, "error_message": msg, "unit": "kB" } metadata["bandwidth.packets.in"] = { "label": "Packets IN per second", "options": interfaces, "status": status, "error_message": msg, "unit": "packets" } metadata["bandwidth.packets.out"] = { "label": "Packets OUT per second", "options": interfaces, "status": status, "error_message": msg, "unit": "packets" } return metadata elif 'sunos' in sys.platform: if not agent_util.which("netstat"): self.log.info("netstat not found") status = agent_util.UNSUPPORTED msg = "Please install netstat." return {} # Get the list of network devices interfaces = [] ret, output = agent_util.execute_command("netstat -i") output = output.strip().split('\n') for line in output: fields = line.split() if not fields: continue if fields[0] in ('lo', 'inet', 'ether', 'Name'): continue try: add_to_interfaces(fields[0]) except: pass metadata = {} metadata["bandwidth.kbytes.in"] = { "label": "Kilobytes IN per second", "options": interfaces, "status": status, "error_message": msg, "unit": "kB" } metadata["bandwidth.kbytes.out"] = { "label": "Kilobytes OUT per second", "options": interfaces, "status": status, "error_message": msg, "unit": "kB" } metadata["bandwidth.packets.in"] = { "label": "Packets IN per second", "options": interfaces, "status": status, "error_message": msg, "unit": "packets" } metadata["bandwidth.packets.out"] = { "label": "Packets OUT per second", "options": interfaces, "status": status, "error_message": msg, "unit": "packets" } return metadata elif 'vmware' in sys.platform: if not agent_util.which("esxcli"): self.log.info("esxcli not found") status = agent_util.UNSUPPORTED msg = "Please confirm esxcli is installed." return {} interfaces = [] ret, out = agent_util.execute_command("esxcli network nic list") iface_table = out.split('\n') for iface in iface_table: # skip the headers, dividers and any empty items if iface.startswith("Name") or iface.startswith("--") or iface == '': continue add_to_interfaces(iface.split()[0]) metadata = {} metadata["bandwidth.kbytes.in"] = { "label": "Kilobytes IN per second", "options": interfaces, "status": status, "error_message": msg, "unit": "kB" } metadata["bandwidth.kbytes.out"] = { "label": "Kilobytes OUT per second", "options": interfaces, "status": status, "error_message": msg, "unit": "kB" } metadata["bandwidth.packets.in"] = { "label": "Packets IN per second", "options": interfaces, "status": status, "error_message": msg, "unit": "packets" } metadata["bandwidth.packets.out"] = { "label": "Packets OUT per second", "options": interfaces, "status": status, "error_message": msg, "unit": "packets" } return metadata elif 'hp-ux' in sys.platform: ret, out = agent_util.execute_command('nwmgr -g') iface_table = out.splitlines() interfaces = [] for line in iface_table: if not line.lower().startswith('lan'): continue iface = line.split() if iface[1] != 'UP': continue add_to_interfaces(iface[0]) metadata = {} metadata["bandwidth.kbytes.in"] = { "label": "Kilobytes IN per second", "options": interfaces, "status": status, "error_message": msg, "unit": "kB" } metadata["bandwidth.kbytes.out"] = { "label": "Kilobytes OUT per second", "options": interfaces, "status": status, "error_message": msg, "unit": "kB" } metadata["bandwidth.packets.in"] = { "label": "Packets IN per second", "options": interfaces, "status": status, "error_message": msg, "unit": "packets" } metadata["bandwidth.packets.out"] = { "label": "Packets OUT per second", "options": interfaces, "status": status, "error_message": msg, "unit": "packets" } return metadata else: # Default Linux options if not os.path.exists("/proc/net/dev"): self.log.info("/proc/net/dev not found") status = agent_util.UNSUPPORTED msg = "/proc/net/dev not found" return {} if status is agent_util.SUPPORTED: # get the interfaces output = open("/proc/net/dev", "r").read() output = output.splitlines() if config.get("debug", False): self.log.debug('#####################################################') self.log.debug("Content of file '/proc/net/dev':") self.log.debug(str(output)) self.log.debug('#####################################################') for line in output[2:]: stuff = line.strip().split() iface, bytes_read = stuff[0].split(":") add_to_interfaces(iface) interfaces = list(interfaces) interfaces.sort() if status is agent_util.SUPPORTED and not interfaces: status = agent_util.MISCONFIGURED msg = "No network interfaces found." metadata = {} metadata["bandwidth.kbytes.in"] = { "label": "Kilobytes IN per second", "options": interfaces, "status": status, "error_message": msg, "unit": "kB" } metadata["bandwidth.kbytes.out"] = { "label": "Kilobytes OUT per second", "options": interfaces, "status": status, "error_message": msg, "unit": "kB" } metadata["bandwidth.packets.in"] = { "label": "Packets IN per second", "options": interfaces, "status": status, "error_message": msg, "unit": "packets" } metadata["bandwidth.packets.out"] = { "label": "Packets OUT per second", "options": interfaces, "status": status, "error_message": msg, "unit": "packets" } if 'freebsd' not in sys.platform and "darwin" not in sys.platform: metadata["bandwidth.monthly.in"] = { "label": "Kilobytes IN for the month", "options": interfaces, "status": status, "error_message": msg, "unit": "kB" } metadata["bandwidth.monthly.out"] = { "label": "Kilobytes OUT for the month", "options": interfaces, "status": status, "error_message": msg, "unit": "kB" } return metadata def check(self, textkey, interface, config): interface_found = False if 'freebsd' in sys.platform: ret, output = agent_util.execute_command("netstat -ib") lines = output.splitlines()[1:] for line in lines: if 'lo' in line or line == '': continue line = line.split() si, mtu, network, addr, packets_read, ierr, idrop, bytes_read, packets_written, oerr, bytes_written, coll = line packets_read = int(packets_read) packets_written = int(packets_written) kbytes_read = int(bytes_read) / 1024 kbytes_written = int(bytes_written) / 1024 if si == interface and network.startswith("