class _Server: """ A simple TCP server that implements the guest side of the guest network Collector. """ def __init__(self, config): self.config = config self.logger = logging.getLogger('mom.Collectors.GuestNetworkDaemon.Server') # Borrow a HostMemory Collector to get the needed data self.collector = HostMemory(None) self.vmstat = open_datafile("/proc/vmstat") # Socket Setup self.listen_ip = config.get('main', 'host') self.listen_port = config.getint('main', 'port') self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.socket.bind((self.listen_ip, self.listen_port)) self.socket.listen(1) self.min_free = config.get('main', 'min_free') self.max_free = config.get('main', 'max_free') def __del__(self): sock_close(self.socket) if self.vmstat is not None: self.vmstat.close() def send_props(self, conn): response = "min_free:" + self.min_free + ",max_free:" + self.max_free sock_send(conn, response) def send_stats(self, conn): data = self.collector.collect() self.vmstat.seek(0) contents = self.vmstat.read() minflt = parse_int("^pgfault (.*)", contents) majflt = parse_int("^pgmajfault (.*)", contents) response = "mem_available:%i,mem_unused:%i,swap_in:%i,swap_out:%i," \ "major_fault:%i,minor_fault:%i" % \ (data['mem_available'], data['mem_free'], data['swap_in'], \ data['swap_out'], majflt, minflt) sock_send(conn, response) def session(self, conn, addr): self.logger.debug("Connection received from %s", addr) conn.settimeout(10) while self.running: try: cmd = sock_receive(conn) if cmd == "props": self.send_props(conn) elif cmd == "stats": self.send_stats(conn) else: break except socket.error, msg: self.logger.warn("Exception: %s" % msg) break sock_close(conn) self.logger.debug("Connection closed")
class _Server: """ A simple TCP server that implements the guest side of the guest network Collector. """ def __init__(self, config): self.config = config self.logger = logging.getLogger( 'mom.Collectors.GuestNetworkDaemon.Server') # Borrow a HostMemory Collector to get the needed data self.collector = HostMemory(None) self.vmstat = open_datafile("/proc/vmstat") # Socket Setup self.listen_ip = config.get('main', 'host') self.listen_port = config.getint('main', 'port') self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.socket.bind((self.listen_ip, self.listen_port)) self.socket.listen(1) self.min_free = config.get('main', 'min_free') self.max_free = config.get('main', 'max_free') def __del__(self): sock_close(self.socket) if self.vmstat is not None: self.vmstat.close() def send_props(self, conn): response = "min_free:" + self.min_free + ",max_free:" + self.max_free sock_send(conn, response) def send_stats(self, conn): data = self.collector.collect() self.vmstat.seek(0) contents = self.vmstat.read() minflt = parse_int("^pgfault (.*)", contents) majflt = parse_int("^pgmajfault (.*)", contents) # DRG stat = open_datafile("/proc/stat") stats = stat.readline().split() user = int(stats[1]) nice = int(stats[2]) system = int(stats[3]) idle = int(stats[4]) iowait = int(stats[5]) irq = int(stats[6]) softirq = int(stats[7]) steal = int(stats[8]) total = user + nice + system + idle + iowait + irq + softirq + steal #self.logger.info("iowait:%s, irq:%s", iowait, irq) response = "mem_available:%i,mem_unused:%i,swap_in:%i,swap_out:%i,swap_total:%i,swap_usage:%i," \ "major_fault:%i,minor_fault:%i,user:%i,nice:%i,system:%i,idle:%i,iowait:%i,irq:%i,softirq:%i,steal:%i,total:%i" % \ (data['mem_available'], data['mem_free'], data['swap_in'], \ data['swap_out'], data['swap_total'], data['swap_usage'], majflt, minflt, \ user, nice, system, idle, iowait, irq, softirq, steal, total) sock_send(conn, response) if stat is not None: stat.close() def session(self, conn, addr): self.logger.debug("Connection received from %s", addr) conn.settimeout(10) while self.running: try: cmd = sock_receive(conn) if cmd == "props": self.send_props(conn) elif cmd == "stats": self.send_stats(conn) else: break except socket.error, msg: self.logger.warn("Exception: %s" % msg) break sock_close(conn) self.logger.debug("Connection closed")