Example #1
0
def test__get_query_monitoring_data(instance_query):
    """
    `query_monitoring_url` can potentially fail, be sure we don't raise when the
    endpoint is not reachable
    """
    couchbase = Couchbase('couchbase', {}, [instance_query])
    couchbase._get_query_monitoring_data()
def test_metadata(instance_query, dd_run_check, datadog_agent):
    check = Couchbase('couchbase', {}, [instance_query])
    check.check_id = 'test:123'
    dd_run_check(check)

    data = check.get_data()

    nodes = data['stats']['nodes']

    raw_version = ""

    # Next, get all the nodes
    if nodes is not None:
        for node in nodes:
            raw_version = node['version']

    major, minor, patch = raw_version.split("-")[0].split(".")

    version_metadata = {
        'version.scheme': 'semver',
        'version.major': major,
        'version.minor': minor,
        'version.patch': patch,
        'version.release': mock.ANY,
        'version.build': 'enterprise',
        'version.raw': raw_version.replace('-enterprise', '+enterprise'),
    }

    datadog_agent.assert_metadata('test:123', version_metadata)
def test_metrics(aggregator, instance, couchbase_container_ip):
    """
    Test couchbase metrics not including 'couchbase.query.'
    """
    couchbase = Couchbase('couchbase', {}, instances=[instance])
    couchbase.check(instance)
    assert_basic_couchbase_metrics(aggregator, couchbase_container_ip)
Example #4
0
def test__get_query_monitoring_data():
    """
    `query_monitoring_url` can potentially fail, be sure we don't raise when the
    endpoint is not reachable
    """
    couchbase = Couchbase('couchbase', {}, {})
    couchbase._get_query_monitoring_data({'query_monitoring_url': 'http://foo/bar'})
def test_service_check(aggregator, couchbase_service, couchbase_config):
    """
    Assert the OK service check
    """
    couchbase = Couchbase('couchbase', {}, {})
    couchbase.check(couchbase_config)

    aggregator.assert_service_check(Couchbase.SERVICE_CHECK_NAME, tags=CHECK_TAGS, status=Couchbase.OK, count=1)
def test_metrics(aggregator, couchbase_container_ip, couchbase_config):
    """
    Test couchbase metrics not including 'couchbase.query.'
    """

    couchbase = Couchbase('couchbase', {}, {})
    couchbase.check(couchbase_config)

    assert_basic_couchbase_metrics(aggregator, couchbase_container_ip)
Example #7
0
def test_query_monitoring_metrics(aggregator, instance_query, couchbase_container_ip):
    """
    Test system vitals metrics (prefixed "couchbase.query.")
    """
    couchbase = Couchbase('couchbase', {}, instances=[instance_query])
    couchbase.check(None)

    for mname in QUERY_STATS:
        aggregator.assert_metric('couchbase.query.{}'.format(mname), tags=CHECK_TAGS, count=1)
def test_metrics(aggregator, couchbase_container_ip):
    """
    Test couchbase metrics not including 'couchbase.query.'
    """

    couchbase = Couchbase('couchbase', {}, {})
    couchbase.check(CONFIG['instances'][0])

    assert_basic_couchbase_metrics(aggregator, couchbase_container_ip)
Example #9
0
def test_extract_index_tags(instance, test_input, expected_tags):
    couchbase = Couchbase('couchbase', {}, [instance])
    """
    Test to ensure that tags are extracted properly from keyspaces. Takes into account the different
    forms of the keyspace and extract the tags from them accordingly. Docs:
    https://docs.couchbase.com/server/current/rest-api/rest-index-stats.html#responses-3
    https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/createprimaryindex.html#keyspace-ref
    """
    test_output = couchbase._extract_index_tags(test_input)
    assert eval(str(test_output)) == expected_tags
Example #10
0
def test_extract_seconds_value():
    couchbase = Couchbase('couchbase', {}, {})

    EXTRACT_SECONDS_TEST_PAIRS = {
        '3.45s': 3.45,
        '12ms': .012,
        '700.5us': .0007005,
        u'733.364\u00c2s': .000733364,
    }

    for test_input, expected_output in EXTRACT_SECONDS_TEST_PAIRS.items():
        test_output = couchbase.extract_seconds_value(test_input)
        assert test_output == expected_output, 'Input was {}, expected output was {}, actual output was {}'.format(
            test_input, expected_output, test_output)
def test_query_monitoring_metrics(aggregator, couchbase_container_ip):
    """
    Test system vitals metrics (prefixed "couchbase.query.")
    """

    # Add query monitoring endpoint
    couchbase = Couchbase('couchbase', {}, {})
    couchbase.check(CONFIG_QUERY['instances'][0])

    assert_basic_couchbase_metrics(aggregator, couchbase_container_ip)

    # Assert 'couchbase.query.' metrics
    for mname in Couchbase.QUERY_STATS:
        aggregator.assert_metric('couchbase.query.{}'.format(mname), tags=CHECK_TAGS, count=1)
Example #12
0
def test_sync_gateway_metrics(aggregator, instance_sg, couchbase_container_ip):
    """
    Test Sync Gateway metrics (prefixed "couchbase.sync_gateway.")
    """
    couchbase = Couchbase('couchbase', {}, instances=[instance_sg])
    couchbase.check(None)
    db_tags = ['db:sync_gateway'] + CHECK_TAGS
    for mname in SYNC_GATEWAY_METRICS:
        if mname.count('.') > 2:
            # metrics tagged by database have an additional namespace
            aggregator.assert_metric(mname, tags=db_tags, count=1)
        else:
            aggregator.assert_metric(mname, tags=CHECK_TAGS, count=1)
    aggregator.assert_service_check(SG_SERVICE_CHECK_NAME, status=Couchbase.OK, tags=CHECK_TAGS)
def test_service_check(aggregator, couchbase_container_ip):
    """
    Assert the OK service check
    """
    couchbase = Couchbase('couchbase', {}, {})
    couchbase.check(CONFIG['instances'][0])

    NODE_HOST = '{}:{}'.format(couchbase_container_ip, PORT)
    NODE_TAGS = ['node:{}'.format(NODE_HOST)]

    aggregator.assert_service_check(Couchbase.SERVICE_CHECK_NAME, tags=CHECK_TAGS, status=Couchbase.OK, count=1)
    aggregator.assert_service_check(Couchbase.NODE_CLUSTER_SERVICE_CHECK_NAME, tags=CHECK_TAGS + NODE_TAGS,
                                    status=Couchbase.OK, count=1)
    aggregator.assert_service_check(Couchbase.NODE_HEALTH_SERVICE_CHECK_NAME, tags=CHECK_TAGS + NODE_TAGS,
                                    status=Couchbase.OK, count=1)
def test_index_stats_metrics(aggregator, dd_run_check, instance_index_stats,
                             couchbase_container_ip):
    """
    Test Index Statistics metrics (prefixed "couchbase.index." and "couchbase.indexer.")
    """
    couchbase = Couchbase('couchbase', {}, [instance_index_stats])
    dd_run_check(couchbase)
    for mname in INDEX_STATS_INDEXER_METRICS:
        aggregator.assert_metric(mname,
                                 metric_type=aggregator.GAUGE,
                                 tags=CHECK_TAGS)

    for mname in INDEX_STATS_GAUGE_METRICS:
        aggregator.assert_metric(mname,
                                 metric_type=aggregator.GAUGE,
                                 tags=INDEX_STATS_TAGS)

    for mname in INDEX_STATS_COUNT_METRICS:
        aggregator.assert_metric(mname,
                                 metric_type=aggregator.MONOTONIC_COUNT,
                                 tags=INDEX_STATS_TAGS)

    aggregator.assert_service_check(INDEX_STATS_SERVICE_CHECK_NAME,
                                    status=Couchbase.OK,
                                    tags=CHECK_TAGS)
Example #15
0
def test_metrics(aggregator, instance, couchbase_container_ip):
    """
    Test couchbase metrics not including 'couchbase.query.'
    """
    couchbase = Couchbase('couchbase', {}, instances=[instance])
    couchbase.check(None)

    # Assert each type of metric (buckets, nodes, totals) except query
    _assert_bucket_metrics(aggregator, BUCKET_TAGS + ['device:{}'.format(BUCKET_NAME)])

    # Assert 'couchbase.by_node.' metrics
    node_tags = CHECK_TAGS + [
        'node:{}:{}'.format(couchbase_container_ip, PORT),
        'device:{}:{}'.format(couchbase_container_ip, PORT),
    ]
    _assert_stats(aggregator, node_tags)

    aggregator.assert_all_metrics_covered()
Example #16
0
def test_config(test_case, extra_config, expected_http_kwargs):
    instance = deepcopy(DEFAULT_INSTANCE)
    instance.update(extra_config)
    check = Couchbase('couchbase', {}, [instance])

    with mock.patch('datadog_checks.base.utils.http.requests') as r:
        r.get.return_value = mock.MagicMock(status_code=200)

        check.check(instance)

        http_wargs = dict(auth=mock.ANY,
                          cert=mock.ANY,
                          headers=mock.ANY,
                          proxies=mock.ANY,
                          timeout=mock.ANY,
                          verify=mock.ANY)
        http_wargs.update(expected_http_kwargs)
        r.get.assert_called_with('http://localhost:8091/pools/default/tasks',
                                 **http_wargs)
Example #17
0
def test_camel_case_to_joined_lower():
    couchbase = Couchbase('couchbase', {}, {})

    CAMEL_CASE_TEST_PAIRS = {
        'camelCase': 'camel_case',
        'FirstCapital': 'first_capital',
        'joined_lower': 'joined_lower',
        'joined_Upper1': 'joined_upper1',
        'Joined_upper2': 'joined_upper2',
        'Joined_Upper3': 'joined_upper3',
        '_leading_Underscore': 'leading_underscore',
        'Trailing_Underscore_': 'trailing_underscore',
        'DOubleCAps': 'd_ouble_c_aps',
        '@@@super--$$-Funky__$__$$%': 'super_funky',
    }

    for test_input, expected_output in CAMEL_CASE_TEST_PAIRS.items():
        test_output = couchbase.camel_case_to_joined_lower(test_input)
        assert test_output == expected_output, 'Input was {}, expected output was {}, actual output was {}'.format(
            test_input, expected_output, test_output)
Example #18
0
def test_metadata(aggregator, instance_query, datadog_agent):
    check = Couchbase('couchbase', {}, instances=[instance_query])
    check.check_id = 'test:123'
    check.check(instance_query)
    server = instance_query['server']

    data = check.get_data(server, instance_query)

    nodes = data['stats']['nodes']

    raw_version = ""

    # Next, get all the nodes
    if nodes is not None:
        for node in nodes:
            raw_version = node['version']

    major, minor, patch = raw_version.split("-")[0].split(".")

    version_metadata = {
        'version.scheme': 'semver',
        'version.major': major,
        'version.minor': minor,
        'version.patch': patch,
        'version.release': mock.ANY,
        'version.raw': raw_version,
    }

    datadog_agent.assert_metadata('test:123', version_metadata)
def test_metrics(aggregator, dd_run_check, instance, couchbase_container_ip):
    """
    Test couchbase metrics not including 'couchbase.query.'
    """
    # Few metrics are only available after some time post launch. Sleep to ensure they're present before we validate
    time.sleep(15)
    couchbase = Couchbase('couchbase', {}, instances=[instance])
    dd_run_check(couchbase)

    # Assert each type of metric (buckets, nodes, totals) except query
    _assert_bucket_metrics(aggregator,
                           BUCKET_TAGS + ['device:{}'.format(BUCKET_NAME)])

    # Assert 'couchbase.by_node.' metrics
    node_tags = CHECK_TAGS + [
        'node:{}:{}'.format(couchbase_container_ip, PORT),
        'device:{}:{}'.format(couchbase_container_ip, PORT),
    ]
    _assert_stats(aggregator, node_tags)

    aggregator.assert_all_metrics_covered()