コード例 #1
0
  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'])
コード例 #2
0
    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'])
コード例 #3
0
  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
コード例 #4
0
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 = {}
コード例 #5
0
ファイル: check_host.py プロジェクト: soener/ambari
  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
コード例 #6
0
    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
コード例 #7
0
  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
コード例 #8
0
  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
コード例 #9
0
  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
コード例 #10
0
ファイル: Heartbeat.py プロジェクト: asonipsl/ambari
    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
コード例 #11
0
ファイル: TestHostInfo.py プロジェクト: duxia/ambari
    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])
コード例 #12
0
ファイル: TestHostInfo.py プロジェクト: duxia/ambari
    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"])
コード例 #13
0
ファイル: Register.py プロジェクト: stevens515/ambari
    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
コード例 #14
0
    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])