ok
Direktori : /usr/lib/fm-agent/library/ |
Current File : //usr/lib/fm-agent/library/ipc_client.py |
import json import logging import os class IPCClient: def __init__(self, port, ipc_path=None): self.ipc_path = ipc_path if self.ipc_path is None: self.ipc_path = "/tmp/com.fortinet.fortimonitor" self.port = port if self.port is None: raise Exception("Missing port") self.log = logging.getLogger("ipc_client") def send_receive(self, command, payload=None): import socket if payload: command = "{}:{}".format(command, payload) command += "\n" # self.log.info('Send {}'.format(command)) try: with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as sock: sock.settimeout(10.0) sock.connect(os.path.join(self.ipc_path, self.port)) toSend = command.encode("utf-8") sock.sendall(toSend) receivedBytes = bytes() while True: r = sock.recv(1024) if self.log.isEnabledFor(logging.DEBUG): self.log.info(" received {} bytes".format(len(r))) if 0 == len(r): break receivedBytes += r # self.log.info('Send {} bytes: received {} bytes'.format(len(toSend), len(receivedBytes))) received = receivedBytes.decode("utf-8") if "nack" == received: return None return received except Exception as e: self.log.error("Send/recv failure: {}".format(e)) return None class DEMClient(IPCClient): def __init__(self, dem_port, ipc_path=None): super(DEMClient, self).__init__(dem_port, ipc_path) self.log = logging.getLogger("dem_client") def get_dem_wifi_info(self): response = self.send_receive("wifi-info") try: if not response: raise ValueError("No payload recorded") return json.loads(response) except Exception as err: logging.warning(f"Unable to communicate with service {err}") return None def get_dem_results(self): rv = {} response = self.send_receive("collect") if response is None: return rv return json.loads(response) def init_dem_schedules(self, schedules): try: """ schedules = { 'icmp_server_resources' : response.get('icmp_server_resources', []), 'monitor_schedules' : response.get('monitor_schedules', []), 'traceroute_checks' : response.get('traceroute_checks', []) } """ self.send_receive("initSchedules", payload=json.dumps(schedules)) except Exception as ex: self.log.error("init_schedules error: {}".format(str(ex))) return def update_schedules(self, newSchedules): _ = self.send_receive("update-schedules", payload=json.dumps(newSchedules))