예제 #1
0
파일: TestAlerts.py 프로젝트: soener/ambari
    def test_metric_alert(self, ma_load_jmx_mock):
        definition_json = self._get_metric_alert_definition()
        configuration = {
            'hdfs-site': {
                'dfs.datanode.http.address': 'c6401.ambari.apache.org:80'
            }
        }

        collector = AlertCollector()
        cluster_configuration = self.__get_cluster_configuration()
        self.__update_cluster_configuration(cluster_configuration,
                                            configuration)

        alert = MetricAlert(definition_json, definition_json['source'])
        alert.set_helpers(collector, cluster_configuration)
        alert.set_cluster("c1", "c6401.ambari.apache.org")

        # trip an OK
        ma_load_jmx_mock.return_value = [1, 25]

        alert.collect()
        alerts = collector.alerts()
        self.assertEquals(0, len(collector.alerts()))
        self.assertEquals('OK', alerts[0]['state'])
        self.assertEquals('(Unit Tests) OK: 1 25 125', alerts[0]['text'])

        # trip a warning
        ma_load_jmx_mock.return_value = [1, 75]

        alert.collect()
        alerts = collector.alerts()
        self.assertEquals(0, len(collector.alerts()))
        self.assertEquals('WARNING', alerts[0]['state'])
        self.assertEquals('(Unit Tests) Warning: 1 75 175', alerts[0]['text'])

        # trip a critical now
        ma_load_jmx_mock.return_value = [1, 150]

        alert.collect()
        alerts = collector.alerts()
        self.assertEquals(0, len(collector.alerts()))
        self.assertEquals('CRITICAL', alerts[0]['state'])
        self.assertEquals('(Unit Tests) Critical: 1 150 250',
                          alerts[0]['text'])

        del definition_json['source']['jmx']['value']
        collector = AlertCollector()

        alert = MetricAlert(definition_json, definition_json['source'])
        alert.set_helpers(collector, cluster_configuration)
        alert.set_cluster("c1", "c6401.ambari.apache.org")

        # now try without any jmx value to compare to
        ma_load_jmx_mock.return_value = [1, 25]

        alert.collect()
        alerts = collector.alerts()
        self.assertEquals(0, len(collector.alerts()))
        self.assertEquals('OK', alerts[0]['state'])
        self.assertEquals('(Unit Tests) OK: 1 25 None', alerts[0]['text'])
예제 #2
0
  def test_metric_alert(self, ma_load_jmx_mock):
    definition_json = self._get_metric_alert_definition()
    configuration = {'hdfs-site' :
      { 'dfs.datanode.http.address': 'c6401.ambari.apache.org:80'}
    }

    collector = AlertCollector()
    cluster_configuration = self.__get_cluster_configuration()
    self.__update_cluster_configuration(cluster_configuration, configuration)

    alert = MetricAlert(definition_json, definition_json['source'])
    alert.set_helpers(collector, cluster_configuration)
    alert.set_cluster("c1", "c6401.ambari.apache.org")

    # trip an OK
    ma_load_jmx_mock.return_value = [1, 25]

    alert.collect()
    alerts = collector.alerts()
    self.assertEquals(0, len(collector.alerts()))
    self.assertEquals('OK', alerts[0]['state'])
    self.assertEquals('(Unit Tests) OK: 1 25 125', alerts[0]['text'])

    # trip a warning
    ma_load_jmx_mock.return_value = [1, 75]

    alert.collect()
    alerts = collector.alerts()
    self.assertEquals(0, len(collector.alerts()))
    self.assertEquals('WARNING', alerts[0]['state'])
    self.assertEquals('(Unit Tests) Warning: 1 75 175', alerts[0]['text'])

    # trip a critical now
    ma_load_jmx_mock.return_value = [1, 150]

    alert.collect()
    alerts = collector.alerts()
    self.assertEquals(0, len(collector.alerts()))
    self.assertEquals('CRITICAL', alerts[0]['state'])
    self.assertEquals('(Unit Tests) Critical: 1 150 250', alerts[0]['text'])

    del definition_json['source']['jmx']['value']
    collector = AlertCollector()

    alert = MetricAlert(definition_json, definition_json['source'])
    alert.set_helpers(collector, cluster_configuration)
    alert.set_cluster("c1", "c6401.ambari.apache.org")

    # now try without any jmx value to compare to
    ma_load_jmx_mock.return_value = [1, 25]

    alert.collect()
    alerts = collector.alerts()
    self.assertEquals(0, len(collector.alerts()))
    self.assertEquals('OK', alerts[0]['state'])
    self.assertEquals('(Unit Tests) OK: 1 25 None', alerts[0]['text'])
예제 #3
0
파일: TestAlerts.py 프로젝트: soener/ambari
    def test_metric_alert_uses_refresh_processor(self, http_response_mock,
                                                 http_connection_mock):
        """
    Tests that the RefreshHeaderProcessor is correctly chained and called
    :param http_response_mock:
    :param http_connection_mock:
    :return:
    """
        http_conn = http_connection_mock.return_value
        http_conn.getresponse.return_value = MagicMock(status=200)
        http_response_mock.return_value = MagicMock(code=200)

        url_opener = urllib2.build_opener(RefreshHeaderProcessor())
        response = url_opener.open("http://foo.bar.baz/jmx")

        self.assertFalse(response is None)
        self.assertTrue(http_conn.request.called)
        self.assertTrue(http_conn.getresponse.called)
        self.assertTrue(http_response_mock.called)

        # now we know that the refresh header is intercepting, reset the mocks
        # and try with a METRIC alert
        MagicMock.reset_mock(http_response_mock)
        MagicMock.reset_mock(http_connection_mock)

        definition_json = self._get_metric_alert_definition()

        configuration = {
            'hdfs-site': {
                'dfs.datanode.http.address': 'c6401.ambari.apache.org:80'
            }
        }

        collector = AlertCollector()
        cluster_configuration = self.__get_cluster_configuration()
        self.__update_cluster_configuration(cluster_configuration,
                                            configuration)

        alert = MetricAlert(definition_json, definition_json['source'])
        alert.set_helpers(collector, cluster_configuration)
        alert.set_cluster("c1", "c6401.ambari.apache.org")

        alert.collect()

        self.assertFalse(response is None)
        self.assertTrue(http_conn.request.called)
        self.assertTrue(http_conn.getresponse.called)
        self.assertTrue(http_response_mock.called)
예제 #4
0
  def test_metric_alert_uses_refresh_processor(self, http_response_mock, http_connection_mock):
    """
    Tests that the RefreshHeaderProcessor is correctly chained and called
    :param http_response_mock:
    :param http_connection_mock:
    :return:
    """
    http_conn = http_connection_mock.return_value
    http_conn.getresponse.return_value = MagicMock(status=200)
    http_response_mock.return_value = MagicMock(code=200)

    url_opener = urllib2.build_opener(RefreshHeaderProcessor())
    response = url_opener.open("http://foo.bar.baz/jmx")

    self.assertFalse(response is None)
    self.assertTrue(http_conn.request.called)
    self.assertTrue(http_conn.getresponse.called)
    self.assertTrue(http_response_mock.called)

    # now we know that the refresh header is intercepting, reset the mocks
    # and try with a METRIC alert
    MagicMock.reset_mock(http_response_mock)
    MagicMock.reset_mock(http_connection_mock)

    definition_json = self._get_metric_alert_definition()

    configuration = {'hdfs-site' :
      { 'dfs.datanode.http.address': 'c6401.ambari.apache.org:80'}
    }

    collector = AlertCollector()
    cluster_configuration = self.__get_cluster_configuration()
    self.__update_cluster_configuration(cluster_configuration, configuration)

    alert = MetricAlert(definition_json, definition_json['source'])
    alert.set_helpers(collector, cluster_configuration)
    alert.set_cluster("c1", "c6401.ambari.apache.org")

    alert.collect()

    self.assertFalse(response is None)
    self.assertTrue(http_conn.request.called)
    self.assertTrue(http_conn.getresponse.called)
    self.assertTrue(http_response_mock.called)
예제 #5
0
파일: TestAlerts.py 프로젝트: soener/ambari
    def test_alert_uri_structure(self, ma_load_jmx_mock):
        definition_json = self._get_metric_alert_definition()

        ma_load_jmx_mock.return_value = [0, 0]

        # run the alert without specifying any keys; an exception should be thrown
        # indicating that there was no URI and the result is UNKNOWN
        collector = AlertCollector()
        cluster_configuration = self.__get_cluster_configuration()
        alert = MetricAlert(definition_json, definition_json['source'])
        alert.set_helpers(collector, cluster_configuration)
        alert.set_cluster("c1", "c6401.ambari.apache.org")
        alert.collect()

        self.assertEquals('UNKNOWN', collector.alerts()[0]['state'])

        # set properties that make no sense wihtout the main URI properties
        configuration = {'hdfs-site': {'dfs.http.policy': 'HTTP_ONLY'}}

        collector = AlertCollector()
        cluster_configuration = self.__get_cluster_configuration()
        self.__update_cluster_configuration(cluster_configuration,
                                            configuration)

        alert = MetricAlert(definition_json, definition_json['source'])
        alert.set_helpers(collector, cluster_configuration)
        alert.set_cluster("c1", "c6401.ambari.apache.org")
        alert.collect()

        self.assertEquals('UNKNOWN', collector.alerts()[0]['state'])

        # set an actual property key (http)
        configuration = {
            'hdfs-site': {
                'dfs.http.policy': 'HTTP_ONLY',
                'dfs.datanode.http.address': 'c6401.ambari.apache.org:80'
            }
        }

        self.__update_cluster_configuration(cluster_configuration,
                                            configuration)

        collector = AlertCollector()
        alert = MetricAlert(definition_json, definition_json['source'])
        alert.set_helpers(collector, cluster_configuration)
        alert.set_cluster("c1", "c6401.ambari.apache.org")
        alert.collect()

        self.assertEquals('OK', collector.alerts()[0]['state'])

        # set an actual property key (https)
        configuration = {
            'hdfs-site': {
                'dfs.http.policy': 'HTTP_ONLY',
                'dfs.datanode.https.address': 'c6401.ambari.apache.org:443'
            }
        }

        self.__update_cluster_configuration(cluster_configuration,
                                            configuration)

        collector = AlertCollector()
        alert = MetricAlert(definition_json, definition_json['source'])
        alert.set_helpers(collector, cluster_configuration)
        alert.set_cluster("c1", "c6401.ambari.apache.org")
        alert.collect()

        self.assertEquals('OK', collector.alerts()[0]['state'])

        # set both (http and https)
        configuration = {
            'hdfs-site': {
                'dfs.http.policy': 'HTTP_ONLY',
                'dfs.datanode.http.address': 'c6401.ambari.apache.org:80',
                'dfs.datanode.https.address': 'c6401.ambari.apache.org:443'
            }
        }

        self.__update_cluster_configuration(cluster_configuration,
                                            configuration)

        collector = AlertCollector()
        alert = MetricAlert(definition_json, definition_json['source'])
        alert.set_helpers(collector, cluster_configuration)
        alert.set_cluster("c1", "c6401.ambari.apache.org")
        alert.collect()

        self.assertEquals('OK', collector.alerts()[0]['state'])
예제 #6
0
  def test_alert_uri_structure(self, ma_load_jmx_mock):
    definition_json = self._get_metric_alert_definition()

    ma_load_jmx_mock.return_value = [0,0]
    
    # run the alert without specifying any keys; an exception should be thrown
    # indicating that there was no URI and the result is UNKNOWN
    collector = AlertCollector()
    cluster_configuration = self.__get_cluster_configuration()
    alert = MetricAlert(definition_json, definition_json['source'])
    alert.set_helpers(collector, cluster_configuration)
    alert.set_cluster("c1", "c6401.ambari.apache.org")
    alert.collect()

    self.assertEquals('UNKNOWN', collector.alerts()[0]['state'])

    # set properties that make no sense wihtout the main URI properties
    configuration = {'hdfs-site' :
      { 'dfs.http.policy' : 'HTTP_ONLY'}
    }

    collector = AlertCollector()
    cluster_configuration = self.__get_cluster_configuration()
    self.__update_cluster_configuration(cluster_configuration, configuration)

    alert = MetricAlert(definition_json, definition_json['source'])
    alert.set_helpers(collector, cluster_configuration)
    alert.set_cluster("c1", "c6401.ambari.apache.org")
    alert.collect()
    
    self.assertEquals('UNKNOWN', collector.alerts()[0]['state'])
    
    # set an actual property key (http)
    configuration = {'hdfs-site' :
      { 'dfs.http.policy' : 'HTTP_ONLY',
        'dfs.datanode.http.address' : 'c6401.ambari.apache.org:80' }
    }

    self.__update_cluster_configuration(cluster_configuration, configuration)

    collector = AlertCollector()
    alert = MetricAlert(definition_json, definition_json['source'])
    alert.set_helpers(collector, cluster_configuration)
    alert.set_cluster("c1", "c6401.ambari.apache.org")
    alert.collect()
    
    self.assertEquals('OK', collector.alerts()[0]['state'])
    
    # set an actual property key (https)
    configuration = {'hdfs-site' :
      { 'dfs.http.policy' : 'HTTP_ONLY',
        'dfs.datanode.https.address' : 'c6401.ambari.apache.org:443' }
    }

    self.__update_cluster_configuration(cluster_configuration, configuration)

    collector = AlertCollector()
    alert = MetricAlert(definition_json, definition_json['source'])
    alert.set_helpers(collector, cluster_configuration)
    alert.set_cluster("c1", "c6401.ambari.apache.org")
    alert.collect()
    
    self.assertEquals('OK', collector.alerts()[0]['state'])

    # set both (http and https)
    configuration = {'hdfs-site' :
      { 'dfs.http.policy' : 'HTTP_ONLY',
        'dfs.datanode.http.address' : 'c6401.ambari.apache.org:80',
        'dfs.datanode.https.address' : 'c6401.ambari.apache.org:443' }
    }

    self.__update_cluster_configuration(cluster_configuration, configuration)

    collector = AlertCollector()
    alert = MetricAlert(definition_json, definition_json['source'])
    alert.set_helpers(collector, cluster_configuration)
    alert.set_cluster("c1", "c6401.ambari.apache.org")
    alert.collect()
    
    self.assertEquals('OK', collector.alerts()[0]['state'])