예제 #1
0
    def test_collect(self):
        alert_meta = {
            'name': 'alert1',
            'label': 'label1',
            'serviceName': 'service1',
            'componentName': 'component1',
            'uuid': '123',
            'enabled': 'true'
        }
        alert_source_meta = {
            'stacks_directory': DUMMY_PATH,
            'path': os.path.join(DUMMY_PATH, 'test_script.py'),
            'common_services_directory': DUMMY_PATH,
            'host_scripts_directory': DUMMY_PATH,
        }
        cluster = 'c1'
        cluster_id = '0'
        host = 'host1'
        expected_text = 'bar is 12, baz is asd'

        def collector_side_effect(clus, data):
            self.assertEquals(data['name'], alert_meta['name'])
            self.assertEquals(data['clusterId'], cluster_id)
            self.assertEquals(clus, cluster)

        mock_collector = MagicMock()
        mock_collector.put = Mock(side_effect=collector_side_effect)

        alert = ScriptAlert(alert_meta, alert_source_meta, self.config)
        alert.set_helpers(
            mock_collector, MagicMock(),
            MagicMock())  #{'foo-site/bar': 12, 'foo-site/baz': 'asd'})
        alert.set_cluster(cluster, cluster_id, host)

        alert.collect()
예제 #2
0
  def __json_to_callable(self, clusterName, hostName, json_definition):
    """
    converts the json that represents all aspects of a definition
    and makes an object that extends BaseAlert that is used for individual
    """
    alert = None

    try:
      source = json_definition['source']
      source_type = source.get('type', '')

      if logger.isEnabledFor(logging.DEBUG):
        logger.debug("[AlertScheduler] Creating job type {0} with {1}".format(source_type, str(json_definition)))


      if source_type == AlertSchedulerHandler.TYPE_METRIC:
        alert = MetricAlert(json_definition, source, self.config)
      elif source_type == AlertSchedulerHandler.TYPE_PORT:
        alert = PortAlert(json_definition, source)
      elif source_type == AlertSchedulerHandler.TYPE_SCRIPT:
        source['stacks_directory'] = self.stacks_dir
        source['common_services_directory'] = self.common_services_dir
        source['host_scripts_directory'] = self.host_scripts_dir
        alert = ScriptAlert(json_definition, source, self.config)
      elif source_type == AlertSchedulerHandler.TYPE_WEB:
        alert = WebAlert(json_definition, source, self.config)
      elif source_type == AlertSchedulerHandler.TYPE_RECOVERY:
        alert = RecoveryAlert(json_definition, source, self.recovery_manger)

      if alert is not None:
        alert.set_cluster(clusterName, hostName)

    except Exception,exception:
      logger.exception("[AlertScheduler] Unable to load an invalid alert definition. It will be skipped.")
예제 #3
0
    def __json_to_callable(self, clusterName, hostName, json_definition):
        '''
    converts the json that represents all aspects of a definition
    and makes an object that extends BaseAlert that is used for individual
    '''
        source = json_definition['source']
        source_type = source.get('type', '')

        if logger.isEnabledFor(logging.DEBUG):
            logger.debug("Creating job type {0} with {1}".format(
                source_type, str(json_definition)))

        alert = None

        if source_type == AlertSchedulerHandler.TYPE_METRIC:
            alert = MetricAlert(json_definition, source)
        elif source_type == AlertSchedulerHandler.TYPE_PORT:
            alert = PortAlert(json_definition, source)
        elif source_type == AlertSchedulerHandler.TYPE_SCRIPT:
            source['stacks_dir'] = self.stacks_dir
            alert = ScriptAlert(json_definition, source)

        if alert is not None:
            alert.set_cluster(clusterName, hostName)

        return alert
  def test_collect(self):
    alert_meta = {
      'name': 'alert1',
      'label': 'label1',
      'serviceName': 'service1',
      'componentName': 'component1',
      'uuid': '123',
      'enabled': 'true'
    }
    alert_source_meta = {
      'stacks_directory': DUMMY_PATH,
      'path': os.path.join(DUMMY_PATH, 'test_script.py'),
      'common_services_directory': DUMMY_PATH,
      'host_scripts_directory': DUMMY_PATH,
    }
    cluster = 'c1'
    host = 'host1'
    expected_text = 'bar is 12, baz is asd'

    def collector_side_effect(clus, data):
      self.assertEquals(data['name'], alert_meta['name'])
      self.assertEquals(data['label'], alert_meta['label'])
      #self.assertEquals(data['text'], expected_text)
      self.assertEquals(data['service'], alert_meta['serviceName'])
      self.assertEquals(data['component'], alert_meta['componentName'])
      self.assertEquals(data['uuid'], alert_meta['uuid'])
      self.assertEquals(data['enabled'], alert_meta['enabled'])
      self.assertEquals(data['cluster'], cluster)
      self.assertEquals(clus, cluster)

    mock_collector = MagicMock()
    mock_collector.put = Mock(side_effect=collector_side_effect)

    alert = ScriptAlert(alert_meta, alert_source_meta, {})
    alert.set_helpers(mock_collector, {'foo-site/bar': 12, 'foo-site/baz': 'asd'})
    alert.set_cluster(cluster, host)

    alert.collect()