def test_hostinfo_register_suse(self, hvlc_mock, hvrc_mock, eac_mock, cf_mock, jp_mock, cls_mock, cu_mock, gir_mock, gipbr_mock, gipbn_mock, gpd_mock, aip_mock, aap_mock, whcf_mock, odas_mock, os_umask_mock, get_os_type_mock): hvlc_mock.return_value = 1 hvrc_mock.return_value = 1 gipbr_mock.return_value = ["pkg1"] gipbn_mock.return_value = ["pkg2"] gpd_mock.return_value = ["pkg1", "pkg2"] odas_mock.return_value = [{'name':'name1'}] get_os_type_mock.return_value = "suse" hostInfo = HostInfo() dict = {} hostInfo.register(dict, False, False) self.assertFalse(gir_mock.called) self.assertFalse(gpd_mock.called) self.assertFalse(aip_mock.called) self.assertFalse(aap_mock.called) self.assertTrue(odas_mock.called) self.assertTrue(os_umask_mock.called) self.assertFalse(whcf_mock.called) self.assertTrue(0 == len(dict['installedPackages'])) self.assertTrue('agentTimeStampAtReporting' in dict['hostHealth'])
def test_hostinfo_register_suse(self, cit_mock, hvlc_mock, hvrc_mock, eac_mock, cf_mock, jp_mock, cls_mock, cu_mock, gir_mock, gipbr_mock, gipbn_mock, gpd_mock, aip_mock, aap_mock, whcf_mock, os_umask_mock, get_os_type_mock): cit_mock.return_value = True hvlc_mock.return_value = 1 hvrc_mock.return_value = 1 gipbr_mock.return_value = ["pkg1"] gipbn_mock.return_value = ["pkg2"] gpd_mock.return_value = ["pkg1", "pkg2"] get_os_type_mock.return_value = "suse" hostInfo = HostInfo() dict = {} hostInfo.register(dict, False, False) self.assertTrue(cit_mock.called) self.assertTrue(gir_mock.called) self.assertTrue(gpd_mock.called) self.assertTrue(aip_mock.called) self.assertTrue(aap_mock.called) self.assertTrue(os_umask_mock.called) self.assertTrue(whcf_mock.called) self.assertTrue(0 < len(dict['installedPackages'])) self.assertTrue('agentTimeStampAtReporting' in dict['hostHealth'])
def build(self, id='-1', add_state=False, componentsMapped=False): global clusterId, clusterDefinitionRevision, firstContact timestamp = int(time.time()*1000) queueResult = self.actionQueue.result() recovery_timestamp = self.actionQueue.controller.recovery_manager.recovery_timestamp nodeStatus = { "status" : "HEALTHY", "cause" : "NONE" } heartbeat = { 'responseId' : int(id), 'timestamp' : timestamp, 'hostname' : hostname(self.config), 'nodeStatus' : nodeStatus, 'recoveryTimestamp' : recovery_timestamp } rec_status = self.actionQueue.controller.recovery_manager.get_recovery_status() heartbeat['recoveryReport'] = rec_status commandsInProgress = False if not self.actionQueue.commandQueue.empty(): commandsInProgress = True if len(queueResult) != 0: heartbeat['reports'] = queueResult['reports'] heartbeat['componentStatus'] = queueResult['componentStatus'] if len(heartbeat['reports']) > 0: # There may be IN_PROGRESS tasks commandsInProgress = True pass # For first request/heartbeat assume no components are mapped if int(id) == 0: componentsMapped = False logger.debug("Building Heartbeat: {responseId = %s, timestamp = %s, " "commandsInProgress = %s, componentsMapped = %s," "recoveryTimestamp = %s}", str(id), str(timestamp), repr(commandsInProgress), repr(componentsMapped), str(recovery_timestamp)) logger.debug("Heartbeat: %s", pformat(heartbeat)) hostInfo = HostInfo(self.config) if add_state: logger.info("Adding host info/state to heartbeat message.") nodeInfo = { } # for now, just do the same work as registration # this must be the last step before returning heartbeat hostInfo.register(nodeInfo, componentsMapped, commandsInProgress) heartbeat['agentEnv'] = nodeInfo mounts = Hardware(config=self.config, cache_info=False).osdisks() heartbeat['mounts'] = mounts logger.debug("agentEnv: %s", str(nodeInfo)) logger.debug("mounts: %s", str(mounts)) if self.collector is not None: heartbeat['alerts'] = self.collector.alerts() return heartbeat
class HostStatusReporter(threading.Thread): """ The thread reports host status to server if it changed from previous report every 'host_status_report_interval' seconds. """ def __init__(self, initializer_module): self.initializer_module = initializer_module self.report_interval = initializer_module.config.host_status_report_interval self.stop_event = initializer_module.stop_event self.config = initializer_module.config self.host_info = HostInfo(initializer_module.config) self.last_report = {} self.server_responses_listener = initializer_module.server_responses_listener self.hardware = Hardware(config=initializer_module.config, cache_info=False) threading.Thread.__init__(self) def run(self): while not self.stop_event.is_set(): try: if self.initializer_module.is_registered: report = self.get_report() if self.initializer_module.is_registered and not Utils.are_dicts_equal( report, self.last_report, keys_to_skip=["agentTimeStampAtReporting"]): correlation_id = self.initializer_module.connection.send( message=report, destination=Constants.HOST_STATUS_REPORTS_ENDPOINT) self.server_responses_listener.listener_functions_on_success[ correlation_id] = lambda headers, message: self.save_last_report( report) except ConnectionIsAlreadyClosed: # server and agent disconnected during sending data. Not an issue pass except: logger.exception( "Exception in HostStatusReporter. Re-running it") self.stop_event.wait(self.report_interval) logger.info("HostStatusReporter has successfully finished") def save_last_report(self, report): self.last_report = report def get_report(self): host_info_dict = {} self.host_info.register(host_info_dict) report = { 'agentEnv': host_info_dict, 'mounts': self.hardware.osdisks(), } return report def clean_cache(self): self.last_report = {}
def execute_last_agent_env_check(self): print "Last Agent Env check started." hostInfo = HostInfo() last_agent_env_check_structured_output = { } hostInfo.register(last_agent_env_check_structured_output) print "Last Agent Env check completed successfully." return last_agent_env_check_structured_output
def execute_last_agent_env_check(self): Logger.info("Last Agent Env check started.") hostInfo = HostInfo() last_agent_env_check_structured_output = {} hostInfo.register(last_agent_env_check_structured_output, False, False) Logger.info("Last Agent Env check completed successfully.") return last_agent_env_check_structured_output
def execute_last_agent_env_check(self): print "Last Agent Env check started." hostInfo = HostInfo() last_agent_env_check_structured_output = { } hostInfo.register(last_agent_env_check_structured_output) print "Last Agent Env check completed successfully." return last_agent_env_check_structured_output
def execute_last_agent_env_check(self): Logger.info("Last Agent Env check started.") hostInfo = HostInfo() last_agent_env_check_structured_output = { } hostInfo.register(last_agent_env_check_structured_output, runExpensiveChecks=False, checkJavaProcs=True) Logger.info("Last Agent Env check completed successfully.") return last_agent_env_check_structured_output
def build(self, id='-1', state_interval=-1, componentsMapped=False): global clusterId, clusterDefinitionRevision, firstContact timestamp = int(time.time()*1000) queueResult = self.actionQueue.result() nodeStatus = { "status" : "HEALTHY", "cause" : "NONE" } heartbeat = { 'responseId' : int(id), 'timestamp' : timestamp, 'hostname' : hostname(self.config), 'nodeStatus' : nodeStatus } rec_status = self.actionQueue.controller.recovery_manager.get_recovery_status() heartbeat['recoveryReport'] = rec_status commandsInProgress = False if not self.actionQueue.commandQueue.empty(): commandsInProgress = True if len(queueResult) != 0: heartbeat['reports'] = queueResult['reports'] heartbeat['componentStatus'] = queueResult['componentStatus'] if len(heartbeat['reports']) > 0: # There may be IN_PROGRESS tasks commandsInProgress = True pass # For first request/heartbeat assume no components are mapped if int(id) == 0: componentsMapped = False logger.info("Building Heartbeat: {responseId = %s, timestamp = %s, commandsInProgress = %s, componentsMapped = %s}", str(id), str(timestamp), repr(commandsInProgress), repr(componentsMapped)) if logger.isEnabledFor(logging.DEBUG): logger.debug("Heartbeat: %s", pformat(heartbeat)) hostInfo = HostInfo(self.config) if (int(id) >= 0) and state_interval > 0 and (int(id) % state_interval) == 0: nodeInfo = { } # for now, just do the same work as registration # this must be the last step before returning heartbeat hostInfo.register(nodeInfo, componentsMapped, commandsInProgress) heartbeat['agentEnv'] = nodeInfo mounts = Hardware.osdisks(self.config) heartbeat['mounts'] = mounts if logger.isEnabledFor(logging.DEBUG): logger.debug("agentEnv: %s", str(nodeInfo)) logger.debug("mounts: %s", str(mounts)) if self.collector is not None: heartbeat['alerts'] = self.collector.alerts() return heartbeat
def build(self, id='-1', state_interval=-1, componentsMapped=False): global clusterId, clusterDefinitionRevision, firstContact timestamp = int(time.time() * 1000) queueResult = self.actionQueue.result() nodeStatus = {"status": "HEALTHY", "cause": "NONE"} heartbeat = { 'responseId': int(id), 'timestamp': timestamp, 'hostname': hostname(self.config), 'nodeStatus': nodeStatus } commandsInProgress = False if not self.actionQueue.commandQueue.empty(): commandsInProgress = True if len(queueResult) != 0: heartbeat['reports'] = queueResult['reports'] heartbeat['componentStatus'] = queueResult['componentStatus'] if len(heartbeat['reports']) > 0: # There may be IN_PROGRESS tasks commandsInProgress = True pass # For first request/heartbeat assume no components are mapped if int(id) == 0: componentsMapped = False logger.info( "Building Heartbeat: {responseId = %s, timestamp = %s, commandsInProgress = %s, componentsMapped = %s}", str(id), str(timestamp), repr(commandsInProgress), repr(componentsMapped)) if logger.isEnabledFor(logging.DEBUG): logger.debug("Heartbeat: %s", pformat(heartbeat)) hostInfo = HostInfo(self.config) if (int(id) >= 0) and state_interval > 0 and (int(id) % state_interval) == 0: nodeInfo = {} # for now, just do the same work as registration # this must be the last step before returning heartbeat hostInfo.register(nodeInfo, componentsMapped, commandsInProgress) heartbeat['agentEnv'] = nodeInfo mounts = Hardware.osdisks() heartbeat['mounts'] = mounts if logger.isEnabledFor(logging.DEBUG): logger.debug("agentEnv: %s", str(nodeInfo)) logger.debug("mounts: %s", str(mounts)) if self.collector is not None: heartbeat['alerts'] = self.collector.alerts() return heartbeat
def test_hostinfo_register( self, get_transparentHuge_page_mock, cit_mock, hvlc_mock, hvrc_mock, eac_mock, cf_mock, jp_mock, cls_mock, cu_mock, gir_mock, gipbr_mock, gipbn_mock, gpd_mock, aip_mock, aap_mock, whcf_mock, os_umask_mock, get_os_type_mock, ): cit_mock.return_value = True hvlc_mock.return_value = 1 hvrc_mock.return_value = 1 gipbr_mock.return_value = ["pkg1"] gipbn_mock.return_value = ["pkg2"] gpd_mock.return_value = ["pkg1", "pkg2"] get_os_type_mock.return_value = "redhat" hostInfo = HostInfo() dict = {} hostInfo.register(dict, True, True) self.verifyReturnedValues(dict) hostInfo.register(dict, True, False) self.verifyReturnedValues(dict) hostInfo.register(dict, False, True) self.verifyReturnedValues(dict) self.assertTrue(os_umask_mock.call_count == 2) cit_mock.reset_mock() hostInfo = HostInfo() dict = {} hostInfo.register(dict, False, False) self.assertTrue(gir_mock.called) self.assertTrue(gpd_mock.called) self.assertTrue(aip_mock.called) self.assertTrue(cit_mock.called) self.assertEqual(1, cit_mock.call_count) for existingPkg in ["pkg1", "pkg2"]: self.assertTrue(existingPkg in dict["installedPackages"]) args, kwargs = gpd_mock.call_args_list[0] for existingPkg in ["pkg1", "pkg2"]: self.assertTrue(existingPkg in args[1])
def test_hostinfo_register_suse( self, cit_mock, hvlc_mock, hvrc_mock, eac_mock, cf_mock, jp_mock, cls_mock, cu_mock, gir_mock, gipbr_mock, gipbn_mock, gpd_mock, aip_mock, aap_mock, whcf_mock, os_umask_mock, get_os_type_mock, ): cit_mock.return_value = True hvlc_mock.return_value = 1 hvrc_mock.return_value = 1 gipbr_mock.return_value = ["pkg1"] gipbn_mock.return_value = ["pkg2"] gpd_mock.return_value = ["pkg1", "pkg2"] get_os_type_mock.return_value = "suse" hostInfo = HostInfo() dict = {} hostInfo.register(dict, False, False) self.assertTrue(cit_mock.called) self.assertTrue(gir_mock.called) self.assertTrue(gpd_mock.called) self.assertTrue(aip_mock.called) self.assertTrue(aap_mock.called) self.assertTrue(os_umask_mock.called) self.assertTrue(whcf_mock.called) self.assertTrue(0 < len(dict["installedPackages"])) self.assertTrue("agentTimeStampAtReporting" in dict["hostHealth"])
def build(self, response_id='-1'): timestamp = int(time.time() * 1000) hostInfo = HostInfo(self.config) agentEnv = {} hostInfo.register(agentEnv, runExpensiveChecks=True) current_ping_port = self.config.get('agent', 'ping_port') register = { 'id': int(response_id), 'timestamp': timestamp, 'hostname': hostname.hostname(self.config), 'currentPingPort': int(current_ping_port), 'publicHostname': hostname.public_hostname(self.config), 'hardwareProfile': self.hardware.get(), 'agentEnv': agentEnv, 'agentVersion': Utils.read_agent_version(self.config), 'prefix': self.config.get('agent', 'prefix') } return register
def test_hostinfo_register(self, get_transparentHuge_page_mock, cit_mock, hvlc_mock, hvrc_mock, eac_mock, cf_mock, jp_mock, cls_mock, cu_mock, gir_mock, gipbr_mock, gipbn_mock, gpd_mock, aip_mock, aap_mock, whcf_mock, os_umask_mock, get_os_type_mock): cit_mock.return_value = True hvlc_mock.return_value = 1 hvrc_mock.return_value = 1 gipbr_mock.return_value = ["pkg1"] gipbn_mock.return_value = ["pkg2"] gpd_mock.return_value = ["pkg1", "pkg2"] get_os_type_mock.return_value = "redhat" hostInfo = HostInfo() dict = {} hostInfo.register(dict, True, True) self.verifyReturnedValues(dict) hostInfo.register(dict, True, False) self.verifyReturnedValues(dict) hostInfo.register(dict, False, True) self.verifyReturnedValues(dict) self.assertTrue(os_umask_mock.call_count == 2) cit_mock.reset_mock() hostInfo = HostInfo() dict = {} hostInfo.register(dict, False, False) self.assertTrue(gir_mock.called) self.assertTrue(gpd_mock.called) self.assertTrue(aip_mock.called) self.assertTrue(cit_mock.called) self.assertEqual(1, cit_mock.call_count) for existingPkg in ["pkg1", "pkg2"]: self.assertTrue(existingPkg in dict['installedPackages']) args, kwargs = gpd_mock.call_args_list[0] for existingPkg in ["pkg1", "pkg2"]: self.assertTrue(existingPkg in args[1])