Example #1
0
def test_collect_latency_parser(aggregator):
    check = AerospikeCheck('aerospike', {}, [common.INSTANCE])
    check.get_info = mock.MagicMock(return_value=[
        'error-no-data-yet-or-back-too-small',
        'batch-index:11:53:47-GMT,ops/sec,>1ms,>8ms,>64ms',
        '11:53:57,0.0,0.00,0.00,0.00',
        '{ns-1}-read:11:53:47-GMT,ops/sec,>1ms,>8ms,>64ms',
        '11:53:57,0.0,0.00,0.00,0.00',
        '{ns-1}-write:11:53:47-GMT,ops/sec,>1ms,>8ms,>64ms',
        '11:53:57,0.0,0.00,0.00,0.00',
        '{ns-2_foo}-read:11:53:47-GMT,ops/sec,>1ms,>8ms,>64ms',
        '11:53:57,0.0,0.00,0.00,0.00',
        '{ns-2_foo}-write:11:53:47-GMT,ops/sec,>1ms,>8ms,>64ms',
        '11:53:57,0.0,0.00,0.00,0.00',
        'error-no-data-yet-or-back-too-small',
        'error-no-data-yet-or-back-too-small',
    ])
    check.collect_latency(None)

    for ns in ['ns-1', 'ns-2_foo']:
        for metric in common.LAZY_METRICS:
            if "batch_index" in metric:
                aggregator.assert_metric(metric, tags=['tag:value'])
            else:
                aggregator.assert_metric(
                    metric, tags=['namespace:{}'.format(ns), 'tag:value'])

    aggregator.assert_all_metrics_covered()
Example #2
0
def test_collect_latency_parser(aggregator):
    check = AerospikeCheck('aerospike', {}, [common.INSTANCE])
    check.get_info = mock.MagicMock(return_value=[
        'error-no-data-yet-or-back-too-small',
        '{ns-1}-read:11:53:47-GMT,ops/sec,>1ms,>8ms,>64ms',
        '11:53:57,0.0,0.00,0.00,0.00',
        '{ns-1}-write:11:53:47-GMT,ops/sec,>1ms,>8ms,>64ms',
        '11:53:57,0.0,0.00,0.00,0.00',
        '{ns-2_foo}-read:11:53:47-GMT,ops/sec,>1ms,>8ms,>64ms',
        '11:53:57,0.0,0.00,0.00,0.00',
        '{ns-2_foo}-write:11:53:47-GMT,ops/sec,>1ms,>8ms,>64ms',
        '11:53:57,0.0,0.00,0.00,0.00',
        'error-no-data-yet-or-back-too-small',
        'error-no-data-yet-or-back-too-small',
    ])
    check.collect_latency(None)

    metrics = [
        'aerospike.namespace.latency.read_ops_sec',
        'aerospike.namespace.latency.read_over_1ms',
        'aerospike.namespace.latency.read_over_8ms',
        'aerospike.namespace.latency.read_over_64ms',
        'aerospike.namespace.latency.write_ops_sec',
        'aerospike.namespace.latency.write_over_1ms',
        'aerospike.namespace.latency.write_over_8ms',
        'aerospike.namespace.latency.write_over_64ms',
    ]

    for ns in ['ns-1', 'ns-2_foo']:
        for metric in metrics:
            aggregator.assert_metric(
                metric, tags=['namespace:{}'.format(ns), 'tag:value'])

    aggregator.assert_all_metrics_covered()
Example #3
0
def test_datacenter_metrics(aggregator):
    check = AerospikeCheck('aerospike', {}, [common.INSTANCE])
    original_get_info = check.get_info

    def mock_get_info(command, separator=";"):
        if command == 'dcs':
            return ['test']
        elif command.startswith("dc/"):
            return common.MOCK_DATACENTER_METRICS

        return original_get_info(command, separator)

    check.get_info = mock_get_info
    check._client = mock.MagicMock()
    check._client.get_node_names = mock.MagicMock(
        side_effect=lambda: [{
            'address': common.HOST,
            'port': common.PORT,
            'node_name': 'test'
        }])
    check.get_namespaces = mock.MagicMock()
    check.collect_info = mock.MagicMock()
    check.collect_throughput = mock.MagicMock()
    check.collect_latency = mock.MagicMock()
    check.check(None)
    for metric in common.DATACENTER_METRICS:
        aggregator.assert_metric(metric)
Example #4
0
def test_collect_empty_data(aggregator):
    check = AerospikeCheck('aerospike', {}, [common.INSTANCE])

    check._client = mock.MagicMock()
    check._client.info_single_node.return_value = 'sets/test/ci	'  # from real data, there is a tab after the command
    check.log = mock.MagicMock()
    assert [] == check.get_info('sets/test/ci')
def test_check(aggregator, instance):
    check = AerospikeCheck('aerospike', {}, {})
    check.check(instance)

    # This hasn't been working
    # aggregator.assert_metric('aerospike.batch_error', 0)

    aggregator.assert_metric('aerospike.cluster_size')
    aggregator.assert_metric('aerospike.namespace.objects')
    aggregator.assert_metric('aerospike.namespace.hwm_breached')
    aggregator.assert_metric('aerospike.namespace.client_write_error', 0)
    aggregator.assert_metric('aerospike.namespace.client_write_success', 1)
    aggregator.assert_metric('aerospike.namespace.truncate_lut', 0)
    aggregator.assert_metric('aerospike.namespace.tombstones', 0)
    aggregator.assert_metric('aerospike.set.tombstones', 0)
    aggregator.assert_metric('aerospike.set.truncate_lut', 0)
    aggregator.assert_metric('aerospike.set.memory_data_bytes', 289)
    aggregator.assert_metric(
        'aerospike.set.objects',
        1,
        tags=['namespace:test', 'set:characters', 'tag:value'])
    aggregator.assert_metric(
        'aerospike.set.stop_writes_count',
        0,
        tags=['namespace:test', 'set:characters', 'tag:value'])

    aggregator.assert_service_check('aerospike.cluster_up', check.OK)
Example #6
0
def test_collect_latencies_parser(aggregator, return_vals):
    check = AerospikeCheck('aerospike', {}, [common.INSTANCE])
    check.get_info = mock.MagicMock(return_value=return_vals)

    check.collect_latencies(None)

    for metric_type in ['read', 'udf']:
        for i in range(17):
            bucket = 2**i
            aggregator.assert_metric(
                'aerospike.namespace.latency.{}'.format(metric_type),
                tags=[
                    'namespace:{}'.format('test'), 'tag:value',
                    'bucket:{}'.format(str(bucket))
                ],
            )

        for n in [1, 8, 64]:
            aggregator.assert_metric(
                'aerospike.namespace.latency.{}_over_{}ms'.format(
                    metric_type, str(n)),
                tags=[
                    'namespace:{}'.format('test'), 'tag:value',
                    'bucket:{}'.format(str(n))
                ],
            )

        aggregator.assert_metric(
            'aerospike.namespace.latency.{}_ops_sec'.format(metric_type),
            tags=['namespace:{}'.format('test'), 'tag:value'],
        )
    aggregator.assert_all_metrics_covered()
Example #7
0
def test_check(aggregator, instance):
    check = AerospikeCheck('aerospike', {}, [instance])
    # sleep to make sure client is available
    time.sleep(30)
    for _ in range(10):
        check.check(instance)
        time.sleep(1)
    _test_check(aggregator)
Example #8
0
def test_collect_xdr_invalid_data(aggregator):
    check = AerospikeCheck('aerospike', {}, [common.INSTANCE])
    check.log = mock.MagicMock()
    with mock.patch('datadog_checks.aerospike.AerospikeCheck.get_info',
                    return_value="ERROR::XDR-not-configured"):
        check.collect_xdr()
        check.log.debug.assert_called_with('Error collecting XDR metrics: %s',
                                           'ERROR::XDR-not-configured')

    aggregator.assert_all_metrics_covered()  # no metric
Example #9
0
def test_xdr_metrics(aggregator):
    check = AerospikeCheck('aerospike', {}, [common.INSTANCE])
    check.get_info = mock.MagicMock(
        return_value=
        "lag=0;in_queue=0;in_progress=0;success=0;abandoned=0;not_found=0;filtered_out=0;"
        "retry_no_node=0;retry_conn_reset=0;retry_dest=0;recoveries=0;recoveries_pending=0;hot_keys=0;"
        "uncompressed_pct=0.000;compression_ratio=1.000;nodes=0;throughput=0;latency_ms=0;lap_us=1"
    )
    check.collect_xdr()

    for metric in common.XDR_DC_METRICS:
        aggregator.assert_metric(metric, tags=['datacenter:test'])
Example #10
0
def test_collect_latency_parser(aggregator, return_vals):
    check = AerospikeCheck('aerospike', {}, [common.INSTANCE])
    check.get_info = mock.MagicMock(return_value=return_vals)
    check.collect_latency(None)

    for ns in ['ns-1', 'ns-2_foo']:
        for metric in common.LAZY_METRICS:
            if "batch_index" in metric:
                aggregator.assert_metric(metric, tags=['tag:value'])
            else:
                aggregator.assert_metric(
                    metric, tags=['namespace:{}'.format(ns), 'tag:value'])
    aggregator.assert_all_metrics_covered()
Example #11
0
def test_connection_uses_tls():
    instance = copy.deepcopy(common.INSTANCE)
    tls_config = {
        'cafile': 'my-ca-file',
        'certfile': 'my-certfile',
        'keyfile': 'my-keyfile'
    }
    instance['tls_config'] = copy.deepcopy(tls_config)

    check = AerospikeCheck('aerospike', {}, [instance])
    tls_config['enable'] = True

    assert check._tls_config == tls_config

    with mock.patch('aerospike.client') as client:
        check.get_client()
        assert client.called_with({'host': check._host, 'tls': tls_config})
def test_metrics_warning(dd_run_check, instance_openmetrics_v2):
    instance_openmetrics_v2['metrics'] = ['migrate_rx_objs', 'migrate_tx_objs']
    check = AerospikeCheck('aerospike', {}, [instance_openmetrics_v2])

    with pytest.raises(
            Exception,
            match="Do not use 'metrics' parameter with 'openmetrics_endpoint'"
    ):
        dd_run_check(check)
def test_version_metadata(aggregator, instance, datadog_agent, dd_run_check):

    check = AerospikeCheck('aerospike', {}, [instance])
    check.check_id = 'test:123'

    # sleep to make sure client is available
    time.sleep(30)
    for _ in range(10):
        dd_run_check(check)
        time.sleep(1)

    raw_version = check.get_info("build")[0]
    major, minor = raw_version.split('.')[:2]
    version_metadata = {
        'version.scheme': 'semver',
        'version.major': major,
        'version.minor': minor,
        'version.patch': mock.ANY,
        'version.raw': raw_version,
    }

    datadog_agent.assert_metadata('test:123', version_metadata)
Example #14
0
def test_multiple_xdr_metrics(aggregator):
    check = AerospikeCheck('aerospike', {}, [common.INSTANCE])
    check.get_info = mock.MagicMock(
        return_value=
        "ip-10-10-17-247.ec2.internal:3000 (10.10.17.247) returned:\nlag=0;in_queue=0;in_progress=0;"
        "success=98344698;abandoned=0;not_found=0;filtered_out=0;retry_no_node=0;retry_conn_reset=775483;"
        "retry_dest=0;recoveries=293;recoveries_pending=0;hot_keys=20291210;uncompressed_pct=0.000;"
        "compression_ratio=1.000;throughput=0;latency_ms=17;lap_us=348    \n\nip-10-10-17-144.ec2.internal"
        ":3000 (10.10.17.144) returned:\nlag=0;in_queue=0;in_progress=0;success=98294822;abandoned=0;"
        "not_found=0;filtered_out=0;retry_no_node=0;retry_conn_reset=813513;retry_dest=0;recoveries=293;"
        "recoveries_pending=0;hot_keys=20286479;uncompressed_pct=0.000;compression_ratio=1.000;"
        "throughput=0;latency_ms=14;lap_us=232\n\n")
    check.collect_xdr()
    for host in [
            'ip-10-10-17-247.ec2.internal', 'ip-10-10-17-144.ec2.internal'
    ]:
        for metric in common.XDR_DC_METRICS:
            aggregator.assert_metric(metric,
                                     tags=[
                                         'datacenter:test',
                                         'remote_dc_port:3000',
                                         'remote_dc_host:{}'.format(host)
                                     ])
def test_openmetricsv2_check(aggregator, dd_run_check, instance_openmetrics_v2,
                             mock_http_response):
    mock_http_response(file_path=get_fixture_path('prometheus.txt'))
    check = AerospikeCheck('aerospike', {}, [instance_openmetrics_v2])
    dd_run_check(check)

    for metric_name in EXPECTED_PROMETHEUS_METRICS + EXPECTED_PROMETHEUS_METRICS_5_6 + PROMETHEUS_XDR_METRICS:
        aggregator.assert_metric(metric_name)

        aggregator.assert_metric_has_tag(
            metric_name, 'endpoint:{}'.format(
                instance_openmetrics_v2.get('openmetrics_endpoint')))
        aggregator.assert_metric_has_tag(metric_name, 'aerospike_cluster:null')
        aggregator.assert_metric_has_tag(
            metric_name, 'aerospike_service:192.168.32.3:3000')

    aggregator.assert_all_metrics_covered()
    aggregator.assert_metrics_using_metadata(get_metadata_metrics(),
                                             check_submission_type=True)
Example #16
0
def test_collect_latency_invalid_data(aggregator):
    check = AerospikeCheck('aerospike', {}, [common.INSTANCE])
    check.get_info = mock.MagicMock(return_value=[
        'error-no-data-yet-or-back-too-small',
        'xxxread:11:53:47-GMT,ops/sec,>1ms,>8ms,>64ms',
        '11:53:57,0.0,0.00,0.00,0.00',
        '{ns-2}-write:11:53:47-GMT,ops/sec,>1ms,>8ms,>64ms',
        '11:53:57,0.0,0.00,0.00,0.00',
    ])
    check.log = mock.MagicMock()
    check.collect_latency(None)

    check.log.warning.assert_called_with(
        'Invalid data. Namespace and/or metric name not found in line: `%s`',
        'xxxread:11:53:47-GMT,ops/sec,>1ms,>8ms,>64ms',
    )

    aggregator.assert_all_metrics_covered()  # no metric
Example #17
0
def test_datacenter_metrics(aggregator):
    check = AerospikeCheck('aerospike', {}, [common.INSTANCE])
    original_get_info = check.get_info

    def mock_get_info(command, separator=";"):
        if command == 'dcs':
            return ['test']
        elif command.startswith("dc/"):
            return common.DATACENTER_METRICS

        return original_get_info(command, separator)

    check.get_info = mock_get_info
    check._client = mock.MagicMock()
    check.get_namespaces = mock.MagicMock()
    check.collect_info = mock.MagicMock()
    check.collect_throughput = mock.MagicMock()
    check.collect_latency = mock.MagicMock()
    check.collect_version = mock.MagicMock()
    check.check(common.INSTANCE)
    for metric in METRICS:
        aggregator.assert_metric(metric)
def test_check(aggregator, instance):
    check = AerospikeCheck('aerospike', {}, [instance])
    check.check(instance)
    _test_check(aggregator)