예제 #1
0
    def test_telemetry_from_udp(self):
        mock_server = self._build_mock_udp_server()
        self.plugin.udp_server = mock_server
        self.plugin.enable_server = True
        actual_records = self.plugin._fetch_telemetry_metrics()

        expected_records = []
        expected_records.append(
            consul_plugin.MetricRecord('consul.memberlist.udp.received',
                                       'gauge', 181,
                                       self.plugin.global_dimensions))
        expected_records.append(
            consul_plugin.MetricRecord(
                'consul.server-3.dc1.consul.runtime.alloc_bytes', 'gauge',
                4815376.0, self.plugin.global_dimensions))
        expected_records.append(
            consul_plugin.MetricRecord('consul.memberlist.gossip.min', 'gauge',
                                       0.006504,
                                       self.plugin.global_dimensions))
        expected_records.append(
            consul_plugin.MetricRecord('consul.raft.rpc.appendEntries.max',
                                       'gauge', 0.014557,
                                       self.plugin.global_dimensions))
        expected_records.append(
            consul_plugin.MetricRecord(
                'consul.server-3.dc1.consul.runtime.sys_bytes', 'gauge',
                13576440.0, self.plugin.global_dimensions))

        self.plugin.udp_server.read_complete.set.assert_called_once()
        self.assertEquals(len(expected_records), len(actual_records))

        actual_records.sort(key=lambda x: x.name)
        expected_records.sort(key=lambda x: x.name)
        for (idx, record) in enumerate(actual_records):
            self._validate_single_record(expected_records[idx], record)
예제 #2
0
 def test_fetch_peers(self):
     expected_dim = self.plugin.global_dimensions
     expected_metric = consul_plugin.MetricRecord('consul.peers', 'gauge',
                                                  3, expected_dim)
     actual_metric = self.plugin._fetch_peers()
     self.assertEquals(1, len(actual_metric))
     self._validate_single_record(expected_metric, actual_metric[0])
예제 #3
0
    def test_fetch_server_state_leader(self):
        expected_dim = {'consul_server_state': 'leader'}
        expected_dim.update(self.plugin.global_dimensions)
        expected_metric = consul_plugin.MetricRecord('consul.is_leader',
                                                     'gauge', 1, expected_dim)

        actual_metric = self.plugin._fetch_server_state_leader()
        self.assertEquals(1, len(actual_metric))
        self._validate_single_record(expected_metric, actual_metric[0])
예제 #4
0
    def test_fetch_server_state(self):

        dimensions = {'consul_server_state': 'follower'}
        dimensions.update(self.plugin.global_dimensions)
        expected_record = consul_plugin.MetricRecord('consul.is_leader',
                                                     'gauge', 0, dimensions)

        actual_records = self.plugin._fetch_server_state()

        self._validate_single_record(expected_record, actual_records[0])
예제 #5
0
    def test_fetch_health_ckecks(self):

        expected_records = []
        dimensions = self.plugin.global_dimensions
        expected_records.append(
            consul_plugin.MetricRecord('consul.health.services.critical',
                                       'gauge', 0, dimensions))
        expected_records.append(
            consul_plugin.MetricRecord('consul.health.services.warning',
                                       'gauge', 0, dimensions))
        expected_records.append(
            consul_plugin.MetricRecord('consul.health.services.passing',
                                       'gauge', 0, dimensions))
        expected_records.append(
            consul_plugin.MetricRecord('consul.health.nodes.critical', 'gauge',
                                       0, dimensions))
        expected_records.append(
            consul_plugin.MetricRecord('consul.health.nodes.warning', 'gauge',
                                       0, dimensions))
        expected_records.append(
            consul_plugin.MetricRecord('consul.health.nodes.passing', 'gauge',
                                       4, dimensions))

        actual_records = self.plugin._fetch_health_ckecks()

        self.assertEquals(len(expected_records), len(actual_records))

        for (idx, record) in enumerate(actual_records):
            self._validate_single_record(expected_records[idx], record)
예제 #6
0
    def test_fetch_node_network_metrics(self):

        expected_records = []
        dimensions = self.plugin.global_dimensions
        expected_records.append(
            consul_plugin.MetricRecord('consul.network.node.latency.avg',
                                       'gauge', 0.47051138518296787,
                                       dimensions))
        expected_records.append(
            consul_plugin.MetricRecord('consul.network.node.latency.min',
                                       'gauge', 0.4154354798133847,
                                       dimensions))
        expected_records.append(
            consul_plugin.MetricRecord('consul.network.node.latency.max',
                                       'gauge', 0.5571355904035926,
                                       dimensions))
        actual_records = self.plugin._fetch_node_network_metrics()

        self.assertEquals(len(expected_records), len(actual_records))

        for (idx, record) in enumerate(actual_records):
            self._validate_single_record(expected_records[idx], record)
예제 #7
0
    def test_fetch_dc_network_metrics(self):

        expected_records = []
        dimensions = {'destination_dc': 'dc2'}
        dimensions.update(self.plugin.global_dimensions)
        expected_records.append(
            consul_plugin.MetricRecord('consul.network.dc.latency.avg',
                                       'gauge', 0.41374872289293463,
                                       dimensions))
        expected_records.append(
            consul_plugin.MetricRecord('consul.network.dc.latency.min',
                                       'gauge', 0.02, dimensions))
        expected_records.append(
            consul_plugin.MetricRecord('consul.network.dc.latency.max',
                                       'gauge', 0.5702953069636298,
                                       dimensions))
        actual_records = self.plugin._fetch_dc_network_metrics()

        self.assertEquals(len(expected_records), len(actual_records))

        for (idx, record) in enumerate(actual_records):
            self._validate_single_record(expected_records[idx], record)
예제 #8
0
    def test_fetch_telemetry_metrics(self):

        expected_records = []
        dimensions = self.plugin.global_dimensions
        expected_records.append(
            consul_plugin.MetricRecord(
                'consul.ip-10-2-2-84.ec2.internal.runtime.alloc_bytes',
                'gauge', 4117728, dimensions))

        actual_records = self.plugin._fetch_telemetry_metrics()

        actual_records.sort(key=lambda x: x.name)
        expected_records.sort(key=lambda x: x.name)
        for (idx, record) in enumerate(actual_records):
            self._validate_single_record(expected_records[idx], record)
예제 #9
0
    def test_fetch_telemetry_enhanced_metrics_with_exclude(self):

        expected_records = []
        dimensions = self.plugin.global_dimensions
        expected_records.append(
            consul_plugin.MetricRecord(
                'consul.consul.fsm.coordinate.batch-update.avg', 'gauge',
                0.05109499953687191, dimensions))
        expected_records.append(
            consul_plugin.MetricRecord(
                'consul.consul.fsm.coordinate.batch-update.max', 'gauge',
                0.05452900007367134, dimensions))
        expected_records.append(
            consul_plugin.MetricRecord(
                'consul.consul.fsm.coordinate.batch-update.min', 'gauge',
                0.04766099900007248, dimensions))
        expected_records.append(
            consul_plugin.MetricRecord('consul.memberlist.gossip.avg', 'gauge',
                                       0.007076957123354077, dimensions))
        expected_records.append(
            consul_plugin.MetricRecord('consul.memberlist.gossip.max', 'gauge',
                                       0.015080999583005905, dimensions))
        expected_records.append(
            consul_plugin.MetricRecord('consul.memberlist.gossip.min', 'gauge',
                                       0.0043750000186264515, dimensions))
        expected_records.append(
            consul_plugin.MetricRecord('consul.raft.fsm.apply.avg', 'gauge',
                                       0.10995149984955788, dimensions))
        expected_records.append(
            consul_plugin.MetricRecord('consul.raft.fsm.apply.max', 'gauge',
                                       0.11391499638557434, dimensions))
        expected_records.append(
            consul_plugin.MetricRecord('consul.raft.fsm.apply.min', 'gauge',
                                       0.10598800331354141, dimensions))
        expected_records.append(
            consul_plugin.MetricRecord(
                'consul.ip-10-2-2-84.ec2.internal.consul.session_ttl.active',
                'gauge', 0, dimensions))
        expected_records.append(
            consul_plugin.MetricRecord(
                'consul.ip-10-2-2-84.ec2.internal.runtime.alloc_bytes',
                'gauge', 4117728, dimensions))
        expected_records.append(
            consul_plugin.MetricRecord(
                'consul.ip-10-2-2-84.ec2.internal.runtime.free_count', 'gauge',
                124627230, dimensions))
        expected_records.append(
            consul_plugin.MetricRecord('consul.memberlist.udp.received',
                                       'gauge', 2174, dimensions))
        self.plugin.enhanced_metrics = True
        exclude = [
            'consul.memberlist.udp.sent', 'consul.memberlist.tcp',
            'consul.consul.http.GET', 'consul.fsm.coordinate.batch-update.'
        ]
        self.plugin.exclude_regex = re.compile('|'.join(
            '(?:{0})'.format(re.escape(x)) for x in exclude))

        actual_records = self.plugin._fetch_telemetry_metrics()

        actual_records.sort(key=lambda x: x.name)
        expected_records.sort(key=lambda x: x.name)
        for (idx, record) in enumerate(actual_records):
            self._validate_single_record(expected_records[idx], record)