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)
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)
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)
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
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)
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)
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()
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)
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)
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()