예제 #1
0
 def test_init(self, _):
     dict_ = {
         "config_update_delay": 10,
         "server": {
             "ip": "localhost",
             "port": 8081
         },
         "send_frequency": 10,
         "send_agent_errors": False,
         "sys_logs": {
             "send": True,
             "limit": 200,
             "reverse": True,
             "priority": "ERROR"
         }
     }
     mock = mock_open(read_data=json.dumps(dict_))
     with patch("configuration.open", mock):
         conf = Config()
         self.assertEqual(10, conf.get_send_frequency())
         self.assertEqual('localhost', conf.get_server_ip())
         self.assertEqual(8081, conf.get_server_port())
         self.assertEqual(dict_['sys_logs'], conf.logs_config.__dict__)
예제 #2
0
파일: agent.py 프로젝트: Premwoik/Onitor
class DaemonLogger(Daemon):
    """"main class for agent. holds the main loop method"""
    last_update = None
    """"time of last update"""
    client = None
    """"holds client object"""
    config = None
    """"hold newest configuration"""
    agentLog = None
    """"log data"""

    def setup(self):
        """"preform basic configuration, create the Config object which enables configuration to preform
        configuration with usage of config.json"""
        logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        self.config = Config()
        self.config.start()
        self.client = Client(self.config)
        self.agentLog = collector.AgentLogCollector()
        logging.info("Agent initialized successfully!")

    def loop(self):
        """"Main loop  function of the deamon. collects all the data, and sends it to server"""
        data = self.__collect_data()
        response = self.client.send_info(data.to_json())
        self.agentLog.logs.clear()
        logging.debug("response: {}".format(response.status))

    def __collect_data(self):
        sys_info = collector.SystemDataCollector()
        logs = self.__setup_logs_collector()
        json_b = rest.InfoJsonBuilder()
        self.exc_assist(json_b.add_name, sys_info.get_hostname)
        self.exc_assist(json_b.add_disc_operations, sys_info.drive_operations)
        self.exc_assist(json_b.add_io_interface, sys_info.interface_load)
        self.exc_assist(json_b.add_ram, sys_info.ram_usage)
        self.exc_assist(json_b.add_processor, sys_info.processor_usage)
        self.exc_assist(json_b.add_discs_space, sys_info.drive_space)
        self.exc_assist(json_b.add_temperature, sys_info.get_temp)
        self.exc_assist(json_b.add_mac, sys_info.get_mac)
        if self.config.logs_config.send:
            self.exc_assist(json_b.add_logs, self.agentLog.add_to_list, logs.collect)
        return json_b

    def __setup_logs_collector(self):
        logs = collector.JournalLogCollector()
        logs.set_from_config(self.config.logs_config)
        if self.last_update is not None:
            logs.set_since_date(self.last_update)
        return logs

    def exc_assist(self, *args):
        try:
            result = args[-1]()
            for i in range(2, len(args) + 1):
                result = args[-i](result)
            return result

        except collector.CollectorException as ex:
            logging.exception(ex)
            self.agentLog.add_collector_log(ex)
        except Exception as ex:
            logging.exception(ex)
            self.agentLog.add_log(ex)
        return 'error'

    def run(self):
        """"loops endlessly, collecting data and sending it to server"""
        self.last_update = datetime.datetime.now()
        self.setup()
        while True:
            try:
                self.loop()
                self.last_update = datetime.datetime.now()
            except Exception as ex:
                logging.exception(ex)
                self.agentLog.add_log(ex)
            finally:
                time.sleep(self.config.get_send_frequency())