From 2d646f56e126720b5580c0caec778cc97ab83974 Mon Sep 17 00:00:00 2001 From: ddog-nasirthomas Date: Mon, 18 May 2026 13:33:12 -0400 Subject: [PATCH 1/5] Add an http_status_code tag to metrics --- http_check/datadog_checks/http_check/http_check.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/http_check/datadog_checks/http_check/http_check.py b/http_check/datadog_checks/http_check/http_check.py index 776a61d08304d..bb022c8212b47 100644 --- a/http_check/datadog_checks/http_check/http_check.py +++ b/http_check/datadog_checks/http_check/http_check.py @@ -183,6 +183,9 @@ def send_status_down(loginfo, down_msg): raise else: + if r is not None: + http_status = r.status_code + tags_list.append("http_status_code:{}".format(http_status)) if use_cert_from_response: peer_cert = r.raw.connection.sock.getpeercert(binary_form=True) @@ -271,6 +274,9 @@ def send_status_down(loginfo, down_msg): tags_list = list(tags) tags_list.append("url:{}".format(addr)) tags_list.append("instance:{}".format(instance_name)) + if r is not None: + http_status = r.status_code + tags_list.append("http_status_code:{}".format(http_status)) self.gauge("http.ssl.days_left", days_left, tags=tags_list) self.gauge("http.ssl.seconds_left", seconds_left, tags=tags_list) From ab4af80d083d9e1072684e27c30cf26b35c55023 Mon Sep 17 00:00:00 2001 From: ddog-nasirthomas Date: Mon, 18 May 2026 14:15:21 -0400 Subject: [PATCH 2/5] Add test to check for new status code on tags --- http_check/tests/test_http_integration.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/http_check/tests/test_http_integration.py b/http_check/tests/test_http_integration.py index cd927ca673615..c11eaad77a35d 100644 --- a/http_check/tests/test_http_integration.py +++ b/http_check/tests/test_http_integration.py @@ -225,8 +225,11 @@ def test_check_ssl(aggregator, http_check): http_check.check(instance) good_cert_tags = ['url:https://valid.mock:443', 'instance:good_cert'] + ssl_metric_tags = ['url:https://valid.mock:443','instance:good_cert','http_status_code:200',] aggregator.assert_service_check(HTTPCheck.SC_STATUS, status=HTTPCheck.OK, tags=good_cert_tags, count=1) aggregator.assert_service_check(HTTPCheck.SC_SSL_CERT, status=HTTPCheck.OK, tags=good_cert_tags, count=1) + aggregator.assert_metric('http.ssl.days_left', tags=ssl_metric_tags, count=1) + aggregator.assert_metric('http.ssl.seconds_left', tags=ssl_metric_tags, count=1) expiring_soon_cert_tags = ['url:https://valid.mock', 'instance:cert_exp_soon'] aggregator.assert_service_check(HTTPCheck.SC_STATUS, status=HTTPCheck.OK, tags=expiring_soon_cert_tags, count=1) @@ -430,11 +433,12 @@ def test_data_methods(aggregator, http_check): url_tag = ['url:{}'.format(instance.get('url'))] instance_tag = ['instance:{}'.format(instance.get('name'))] + http_status_tag = ['http_status_code:{}'.format('200')] aggregator.assert_service_check(HTTPCheck.SC_STATUS, status=AgentCheck.OK, tags=url_tag + instance_tag, count=1) - aggregator.assert_metric('network.http.can_connect', tags=url_tag + instance_tag, value=1.0, count=1) - aggregator.assert_metric('network.http.cant_connect', tags=url_tag + instance_tag, value=0.0, count=1) - aggregator.assert_metric('network.http.response_time', tags=url_tag + instance_tag, count=1) + aggregator.assert_metric('network.http.can_connect', tags=url_tag + instance_tag + http_status_tag, value=1.0, count=1) + aggregator.assert_metric('network.http.cant_connect', tags=url_tag + instance_tag + http_status_tag, value=0.0, count=1) + aggregator.assert_metric('network.http.response_time', tags=url_tag + instance_tag + http_status_tag, count=1) # Assert coverage for this check on this instance aggregator.assert_all_metrics_covered() From ed9c8718396beebdaa3061015f6f31162bd4341d Mon Sep 17 00:00:00 2001 From: ddog-nasirthomas Date: Mon, 18 May 2026 14:26:14 -0400 Subject: [PATCH 3/5] Removing http_status_code tag from ssl metrics --- http_check/datadog_checks/http_check/http_check.py | 3 --- http_check/tests/test_http_integration.py | 3 --- 2 files changed, 6 deletions(-) diff --git a/http_check/datadog_checks/http_check/http_check.py b/http_check/datadog_checks/http_check/http_check.py index bb022c8212b47..157b83a181bc4 100644 --- a/http_check/datadog_checks/http_check/http_check.py +++ b/http_check/datadog_checks/http_check/http_check.py @@ -274,9 +274,6 @@ def send_status_down(loginfo, down_msg): tags_list = list(tags) tags_list.append("url:{}".format(addr)) tags_list.append("instance:{}".format(instance_name)) - if r is not None: - http_status = r.status_code - tags_list.append("http_status_code:{}".format(http_status)) self.gauge("http.ssl.days_left", days_left, tags=tags_list) self.gauge("http.ssl.seconds_left", seconds_left, tags=tags_list) diff --git a/http_check/tests/test_http_integration.py b/http_check/tests/test_http_integration.py index c11eaad77a35d..adb07652f270a 100644 --- a/http_check/tests/test_http_integration.py +++ b/http_check/tests/test_http_integration.py @@ -225,11 +225,8 @@ def test_check_ssl(aggregator, http_check): http_check.check(instance) good_cert_tags = ['url:https://valid.mock:443', 'instance:good_cert'] - ssl_metric_tags = ['url:https://valid.mock:443','instance:good_cert','http_status_code:200',] aggregator.assert_service_check(HTTPCheck.SC_STATUS, status=HTTPCheck.OK, tags=good_cert_tags, count=1) aggregator.assert_service_check(HTTPCheck.SC_SSL_CERT, status=HTTPCheck.OK, tags=good_cert_tags, count=1) - aggregator.assert_metric('http.ssl.days_left', tags=ssl_metric_tags, count=1) - aggregator.assert_metric('http.ssl.seconds_left', tags=ssl_metric_tags, count=1) expiring_soon_cert_tags = ['url:https://valid.mock', 'instance:cert_exp_soon'] aggregator.assert_service_check(HTTPCheck.SC_STATUS, status=HTTPCheck.OK, tags=expiring_soon_cert_tags, count=1) From 0dd0fa3a886d475761dfa7439f282426bf38c8f2 Mon Sep 17 00:00:00 2001 From: ddog-nasirthomas Date: Mon, 18 May 2026 14:28:04 -0400 Subject: [PATCH 4/5] Applying lint --- http_check/tests/test_http_integration.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/http_check/tests/test_http_integration.py b/http_check/tests/test_http_integration.py index adb07652f270a..e3a52268ef3f1 100644 --- a/http_check/tests/test_http_integration.py +++ b/http_check/tests/test_http_integration.py @@ -433,8 +433,12 @@ def test_data_methods(aggregator, http_check): http_status_tag = ['http_status_code:{}'.format('200')] aggregator.assert_service_check(HTTPCheck.SC_STATUS, status=AgentCheck.OK, tags=url_tag + instance_tag, count=1) - aggregator.assert_metric('network.http.can_connect', tags=url_tag + instance_tag + http_status_tag, value=1.0, count=1) - aggregator.assert_metric('network.http.cant_connect', tags=url_tag + instance_tag + http_status_tag, value=0.0, count=1) + aggregator.assert_metric( + 'network.http.can_connect', tags=url_tag + instance_tag + http_status_tag, value=1.0, count=1 + ) + aggregator.assert_metric( + 'network.http.cant_connect', tags=url_tag + instance_tag + http_status_tag, value=0.0, count=1 + ) aggregator.assert_metric('network.http.response_time', tags=url_tag + instance_tag + http_status_tag, count=1) # Assert coverage for this check on this instance From 9d768449979731e1965d12bc9319e1a245b4da74 Mon Sep 17 00:00:00 2001 From: ddog-nasirthomas Date: Mon, 18 May 2026 14:34:10 -0400 Subject: [PATCH 5/5] Add changelog --- http_check/changelog.d/23731.added | 1 + 1 file changed, 1 insertion(+) create mode 100644 http_check/changelog.d/23731.added diff --git a/http_check/changelog.d/23731.added b/http_check/changelog.d/23731.added new file mode 100644 index 0000000000000..c235626fccf57 --- /dev/null +++ b/http_check/changelog.d/23731.added @@ -0,0 +1 @@ +Add http_status_code tag to http metrics.