66
77import pytest
88import requests
9+ from conftest import MockAgentCheck
910
1011from checks .clickhouse_cloud import (
11- ClickHouseCloudCheck ,
12- SC_QUERY_LOG_CONNECT ,
13- SC_TEXT_LOG_CONNECT ,
1412 GAUGE_QUERY_LOG_ROWS ,
1513 GAUGE_TEXT_LOG_ROWS ,
14+ SC_QUERY_LOG_CONNECT ,
15+ SC_TEXT_LOG_CONNECT ,
16+ ClickHouseCloudCheck ,
1617)
17- from conftest import MockAgentCheck
18-
1918
2019# ---------------------------------------------------------------------------
2120# Helpers
@@ -69,9 +68,7 @@ def test_invalid_slow_query_threshold_raises(self, default_instance):
6968
7069 def test_invalid_backfill_minutes_raises (self , default_instance ):
7170 default_instance ["initial_backfill_minutes" ] = 0
72- with pytest .raises (
73- ValueError , match = "initial_backfill_minutes must be between"
74- ):
71+ with pytest .raises (ValueError , match = "initial_backfill_minutes must be between" ):
7572 _make_check (default_instance )
7673
7774 def test_query_timeout_configurable (self , default_instance ):
@@ -102,7 +99,7 @@ def test_normal_query_is_info(self, default_instance, query_log_rows):
10299
103100 assert payload ["status" ] == "info"
104101 assert payload ["clickhouse.query_type" ] == "finish"
105- assert payload ["ddsource" ] == "clickhouse_cloud "
102+ assert payload ["ddsource" ] == "clickhouse "
106103 assert payload ["service" ] == "clickhouse"
107104 assert payload ["clickhouse.query_id" ] == "abc-123-def-456"
108105 assert payload ["clickhouse.user" ] == "default"
@@ -143,6 +140,22 @@ def test_no_tags(self, default_instance, query_log_rows):
143140
144141 assert payload ["ddtags" ] == ""
145142
143+ def test_custom_cluster_name_sets_service (self , default_instance , query_log_rows ):
144+ default_instance ["cluster_name" ] = "analytics-prod"
145+ check = _make_check (default_instance )
146+ row = query_log_rows [0 ]
147+ payload = check ._build_query_log_payload (row )
148+
149+ assert payload ["service" ] == "analytics-prod"
150+
151+ def test_default_cluster_name_is_clickhouse (self , default_instance , query_log_rows ):
152+ # No cluster_name in config → defaults to "clickhouse"
153+ check = _make_check (default_instance )
154+ row = query_log_rows [0 ]
155+ payload = check ._build_query_log_payload (row )
156+
157+ assert payload ["service" ] == "clickhouse"
158+
146159 def test_missing_fields_use_defaults (self , default_instance ):
147160 """Rows with missing optional fields should not crash."""
148161 check = _make_check (default_instance )
@@ -168,7 +181,7 @@ def test_error_level(self, default_instance, text_log_rows):
168181 payload = check ._build_text_log_payload (row )
169182
170183 assert payload ["status" ] == "error"
171- assert payload ["ddsource" ] == "clickhouse_cloud "
184+ assert payload ["ddsource" ] == "clickhouse "
172185 assert payload ["clickhouse.logger" ] == "MergeTreeBackgroundExecutor"
173186 assert "Memory limit exceeded" in payload ["message" ]
174187
@@ -323,24 +336,28 @@ def test_empty_response(self, default_instance):
323336 def test_http_error_raises (self , default_instance ):
324337 check = _make_check (default_instance )
325338
326- with patch .object (
327- check ._session ,
328- "post" ,
329- side_effect = requests .exceptions .HTTPError ("500 Server Error" ),
339+ with (
340+ patch .object (
341+ check ._session ,
342+ "post" ,
343+ side_effect = requests .exceptions .HTTPError ("500 Server Error" ),
344+ ),
345+ pytest .raises (requests .exceptions .HTTPError ),
330346 ):
331- with pytest .raises (requests .exceptions .HTTPError ):
332- check ._query_clickhouse ("SELECT 1" )
347+ check ._query_clickhouse ("SELECT 1" )
333348
334349 def test_connection_error_raises (self , default_instance ):
335350 check = _make_check (default_instance )
336351
337- with patch .object (
338- check ._session ,
339- "post" ,
340- side_effect = requests .exceptions .ConnectionError ("DNS failed" ),
352+ with (
353+ patch .object (
354+ check ._session ,
355+ "post" ,
356+ side_effect = requests .exceptions .ConnectionError ("DNS failed" ),
357+ ),
358+ pytest .raises (requests .exceptions .ConnectionError ),
341359 ):
342- with pytest .raises (requests .exceptions .ConnectionError ):
343- check ._query_clickhouse ("SELECT 1" )
360+ check ._query_clickhouse ("SELECT 1" )
344361
345362 def test_multiline_json_each_row_parsed (self , default_instance ):
346363 check = _make_check (default_instance )
@@ -372,9 +389,7 @@ def test_custom_timeout_used(self, default_instance):
372389
373390class TestCollectQueryLogs :
374391 @patch ("checks.clickhouse_cloud.ClickHouseCloudCheck._query_clickhouse" )
375- def test_sends_logs_and_updates_cursor (
376- self , mock_query , default_instance , query_log_rows
377- ):
392+ def test_sends_logs_and_updates_cursor (self , mock_query , default_instance , query_log_rows ):
378393 check = _make_check (default_instance )
379394 mock_query .return_value = query_log_rows
380395
@@ -411,9 +426,7 @@ def test_query_failure_reports_critical(self, mock_query, default_instance):
411426 assert len (check ._sent_logs ) == 0
412427
413428 @patch ("checks.clickhouse_cloud.ClickHouseCloudCheck._query_clickhouse" )
414- def test_no_send_log_method_does_not_crash (
415- self , mock_query , default_instance , query_log_rows
416- ):
429+ def test_no_send_log_method_does_not_crash (self , mock_query , default_instance , query_log_rows ):
417430 check = _make_check (default_instance )
418431 mock_query .return_value = query_log_rows [:1 ]
419432
@@ -464,9 +477,7 @@ def test_missing_cursor_us_does_not_advance(self, mock_query, default_instance):
464477 assert check .log .warning .called
465478
466479 @patch ("checks.clickhouse_cloud.ClickHouseCloudCheck._query_clickhouse" )
467- def test_gauge_reports_row_count (
468- self , mock_query , default_instance , query_log_rows
469- ):
480+ def test_gauge_reports_row_count (self , mock_query , default_instance , query_log_rows ):
470481 check = _make_check (default_instance )
471482 mock_query .return_value = query_log_rows
472483
@@ -477,9 +488,7 @@ def test_gauge_reports_row_count(
477488
478489class TestCollectTextLogs :
479490 @patch ("checks.clickhouse_cloud.ClickHouseCloudCheck._query_clickhouse" )
480- def test_sends_logs_and_updates_cursor (
481- self , mock_query , default_instance , text_log_rows
482- ):
491+ def test_sends_logs_and_updates_cursor (self , mock_query , default_instance , text_log_rows ):
483492 check = _make_check (default_instance )
484493 mock_query .return_value = text_log_rows
485494
@@ -539,9 +548,7 @@ def test_check_respects_disabled_collectors(self, mock_query, default_instance):
539548 mock_query .assert_not_called ()
540549
541550 @patch ("checks.clickhouse_cloud.ClickHouseCloudCheck._query_clickhouse" )
542- def test_cursor_persists_across_runs (
543- self , mock_query , default_instance , query_log_rows
544- ):
551+ def test_cursor_persists_across_runs (self , mock_query , default_instance , query_log_rows ):
545552 check = _make_check (default_instance )
546553 default_instance ["collect_text_logs" ] = False
547554 check .collect_text_logs = False
0 commit comments