????
Current Path : /usr/local/lib/python3.9/site-packages/agent360/plugins/ |
Current File : //usr/local/lib/python3.9/site-packages/agent360/plugins/system.py |
#!/usr/bin/env python # -*- coding: utf-8 -*- try: import netifaces except ImportError: netifaces = None import os import platform from subprocess import Popen, PIPE import sys import time import psutil import plugins try: import distro except ImportError: distro = None def systemCommand(Command, newlines=True): Output = "" Error = "" try: proc = Popen(Command.split(), stdout=PIPE) Output = proc.communicate()[0] except Exception: pass if Output: if newlines is True: Stdout = Output.split("\n") else: Stdout = Output else: Stdout = [] if Error: Stderr = Error.split("\n") else: Stderr = [] return (Stdout, Stderr) def linux_hardware_memory(): block_size = 0 try: with open("/sys/devices/system/memory/block_size_bytes", "r") as f: block_size = int(f.readline().strip(), 16) memory = 0 with os.scandir("/sys/devices/system/memory/") as it: for entry in it: if not entry.name.startswith("memory"): continue with open(entry.path + "/state", "r") as f: if "online" != f.readline().strip(): continue else: memory += block_size return memory except Exception: return 0 def ip_addresses(): ip_list = {} ip_list['v4'] = {} ip_list['v6'] = {} if netifaces is None: return ip_list for interface in netifaces.interfaces(): link = netifaces.ifaddresses(interface) if netifaces.AF_INET in link: if interface not in ip_list['v4']: ip_list['v4'][interface] = [] ip_list['v4'][interface].append(link[netifaces.AF_INET]) if netifaces.AF_INET6 in link: if interface not in ip_list['v6']: ip_list['v6'][interface] = [] ip_list['v6'][interface].append(link[netifaces.AF_INET6]) return ip_list class Plugin(plugins.BasePlugin): __name__ = 'system' def run(self, *unused): systeminfo = {} cpu = {} cpu['brand'] = "Unknown CPU" cpu['count'] = 0 if(os.path.isfile("/proc/cpuinfo")): f = open('/proc/cpuinfo') if f: for line in f: # Ignore the blank line separating the information between # details about two processing units if line.strip(): if "model name" == line.rstrip('\n').split(':')[0].strip(): cpu['brand'] = line.rstrip('\n').split(':')[1].strip() if "Processor" == line.rstrip('\n').split(':')[0].strip(): cpu['brand'] = line.rstrip('\n').split(':')[1].strip() if "processor" == line.rstrip('\n').split(':')[0].strip(): cpu['count'] = line.rstrip('\n').split(':')[1].strip() if cpu['brand'] == "Unknown CPU": f = os.popen('lscpu').read().split('\n') if f: for line in f: # Ignore the blank line separating the information between # details about two processing units if line.strip(): if "Model name" == line.rstrip('\n').split(':')[0].strip(): cpu['brand'] = line.rstrip('\n').split(':')[1].strip() if "Processor" == line.rstrip('\n').split(':')[0].strip(): cpu['brand'] = line.rstrip('\n').split(':')[1].strip() if "CPU(s)" == line.rstrip('\n').split(':')[0].strip(): cpu['count'] = line.rstrip('\n').split(':')[1].strip() mem = psutil.virtual_memory().total if sys.platform == "linux" or sys.platform == "linux2": hw_mem = linux_hardware_memory() if hw_mem != 0: mem = hw_mem if distro is None: systeminfo['os'] = str(' '.join(platform.linux_distribution())) else: systeminfo['os'] = str(' '.join(distro.linux_distribution(full_distribution_name=True))) elif sys.platform == "darwin": systeminfo['os'] = "Mac OS %s" % platform.mac_ver()[0] cpu['brand'] = str(systemCommand('sysctl machdep.cpu.brand_string', False)[0]).split(': ')[1] #cpu['count'] = systemCommand('sysctl hw.ncpu') elif sys.platform == "freebsd10" or sys.platform == "freebsd11": systeminfo['os'] = "FreeBSD %s" % platform.release() cpu['brand'] = str(systemCommand('sysctl hw.model', False)[0]).split(': ')[1] cpu['count'] = systemCommand('sysctl hw.ncpu') elif sys.platform == "win32": # https://learn.microsoft.com/en-us/windows/release-health/windows11-release-information if sys.getwindowsversion().build >= 22000: systeminfo['os'] = "{} {}".format(platform.uname()[0], 11) else: systeminfo['os'] = "{} {}".format(platform.uname()[0], platform.uname()[2]) systeminfo['cpu'] = cpu['brand'] systeminfo['cores'] = cpu['count'] systeminfo['memory'] = mem systeminfo['psutil'] = '.'.join(map(str, psutil.version_info)) systeminfo['python_version'] = sys.version systeminfo['platform'] = platform.platform() systeminfo['uptime'] = int(time.time()-psutil.boot_time()) systeminfo['ip_addresses'] = ip_addresses() systeminfo['hostname'] = platform.node() return systeminfo if __name__ == '__main__': Plugin().execute()