Skip to content

Commit 0d00519

Browse files
authored
SNOW-1516350: disable oob telemetry (#1991)
1 parent 3e66c08 commit 0d00519

File tree

2 files changed

+13
-175
lines changed

2 files changed

+13
-175
lines changed

src/snowflake/connector/telemetry_oob.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ def __init__(self) -> None:
172172
raise Exception("This class is a singleton!")
173173
else:
174174
TelemetryService.__instance = self
175-
self._enabled = True
175+
self._enabled = False
176176
self._queue = Queue()
177177
self.batch_size = DEFAULT_BATCH_SIZE
178178
self.num_of_retry_to_trigger_telemetry = (
@@ -192,11 +192,11 @@ def __del__(self) -> None:
192192
@property
193193
def enabled(self) -> bool:
194194
"""Whether the Telemetry service is enabled or not."""
195-
return self._enabled
195+
return False
196196

197197
def enable(self) -> None:
198198
"""Enable Telemetry Service."""
199-
self._enabled = True
199+
self._enabled = False
200200

201201
def disable(self) -> None:
202202
"""Disable Telemetry Service."""

test/unit/test_telemetry_oob.py

Lines changed: 10 additions & 172 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,12 @@
55

66
from __future__ import annotations
77

8-
import logging
98
import time
109
from concurrent.futures import ThreadPoolExecutor
1110

12-
import pytest
13-
14-
import snowflake.connector.errorcode
15-
import snowflake.connector.telemetry
16-
from snowflake.connector.description import CLIENT_NAME, SNOWFLAKE_CONNECTOR_VERSION
17-
from snowflake.connector.errorcode import ER_FAILED_TO_REQUEST
1811
from snowflake.connector.errors import RevocationCheckError
19-
from snowflake.connector.ocsp_snowflake import OCSPTelemetryData
20-
from snowflake.connector.sqlstate import SQLSTATE_CONNECTION_WAS_NOT_ESTABLISHED
2112
from snowflake.connector.telemetry_oob import TelemetryService
2213

23-
DEV_CONFIG = {
24-
"host": "localhost",
25-
"port": 8080,
26-
"account": "testAccount",
27-
"user": "test",
28-
"password": "ShouldNotShowUp",
29-
"protocol": "http",
30-
}
3114
TEST_RACE_CONDITION_THREAD_COUNT = 2
3215
TEST_RACE_CONDITION_DELAY_SECONDS = 1
3316
telemetry_data = {}
@@ -46,167 +29,22 @@
4629
method = "POST"
4730

4831

49-
@pytest.fixture()
50-
def telemetry_setup(request):
51-
"""Sets up the telemetry service by enabling it and flushing any entries."""
32+
def test_telemetry_oob_disabled():
5233
telemetry = TelemetryService.get_instance()
53-
telemetry.update_context(DEV_CONFIG)
34+
assert not telemetry.enabled
5435
telemetry.enable()
55-
telemetry.flush()
56-
57-
58-
def test_telemetry_oob_simple_flush(telemetry_setup, caplog):
59-
"""Tests capturing and sending a simple OCSP Exception message."""
60-
telemetry = TelemetryService.get_instance()
61-
telemetry.flush() # clear the buffer first
62-
telemetry.log_ocsp_exception(
63-
event_type, telemetry_data, exception=exception, stack_trace=stack_trace
64-
)
65-
assert telemetry.size() == 1
66-
caplog.set_level(logging.DEBUG, "snowflake.connector.telemetry_oob")
67-
telemetry.flush()
68-
assert (
69-
"Failed to generate a JSON dump from the passed in telemetry OOB events"
70-
not in caplog.text
71-
)
72-
# since pytests can run test in parallel and TelemetryService is a singleton, other tests
73-
# might encounter error logged into the queue of the OOB Telemetry simultaneously
74-
# leading to assert telemetry.size() == 0 failure
75-
# here we check that the OCSP exception event in the test is flushed
76-
for event in list(telemetry.queue.queue):
77-
assert "OCSPException" not in event.name
78-
79-
80-
@pytest.mark.flaky(reruns=3)
81-
def test_telemetry_oob_urgent(telemetry_setup):
82-
"""Tests sending an urgent OCSP Exception message."""
83-
telemetry = TelemetryService.get_instance()
84-
85-
telemetry.log_ocsp_exception(
86-
event_type,
87-
telemetry_data,
88-
exception=exception,
89-
stack_trace=stack_trace,
90-
urgent=True,
91-
)
92-
assert telemetry.size() == 0
93-
94-
95-
def test_telemetry_oob_close(telemetry_setup):
96-
"""Tests closing the Telemetry Service when there are still messages in the queue."""
97-
telemetry = TelemetryService.get_instance()
98-
99-
telemetry.log_ocsp_exception(
100-
event_type, telemetry_data, exception=exception, stack_trace=stack_trace
101-
)
102-
assert telemetry.size() == 1
103-
telemetry.close()
104-
assert telemetry.size() == 0
105-
106-
107-
def test_telemetry_oob_close_empty(telemetry_setup):
108-
"""Tests closing the Telemetry Service when the queue is empty."""
109-
telemetry = TelemetryService.get_instance()
110-
111-
assert telemetry.size() == 0
112-
telemetry.close()
113-
assert telemetry.size() == 0
114-
115-
116-
def test_telemetry_oob_log_when_disabled(telemetry_setup):
117-
"""Tests trying to log to the telemetry service when it is disabled."""
118-
telemetry = TelemetryService.get_instance()
119-
120-
assert telemetry.size() == 0
36+
assert not telemetry.enabled
12137
telemetry.disable()
38+
assert not telemetry.enabled
39+
telemetry.enable()
12240
telemetry.log_ocsp_exception(
12341
event_type, telemetry_data, exception=exception, stack_trace=stack_trace
12442
)
125-
assert telemetry.size() == 0
126-
telemetry.enable()
127-
128-
129-
def test_telemetry_oob_http_log(telemetry_setup):
130-
"""Tests sending a simple HTTP request telemetry event."""
131-
telemetry = TelemetryService.get_instance()
132-
133-
telemetry.log_http_request_error(
134-
event_name,
135-
url,
136-
method,
137-
SQLSTATE_CONNECTION_WAS_NOT_ESTABLISHED,
138-
ER_FAILED_TO_REQUEST,
139-
exception=exception,
140-
stack_trace=stack_trace,
141-
)
142-
assert telemetry.size() == 1
143-
telemetry.flush()
144-
assert telemetry.size() == 0
145-
146-
147-
def test_telemetry_oob_error_code_mapping():
148-
"""Tests that all OCSP error codes have a corresponding Telemetry sub event type."""
149-
ec_dict = snowflake.connector.errorcode.__dict__
150-
for ec, ec_val in ec_dict.items():
151-
if not ec.startswith("__") and ec not in ("annotations",):
152-
if 254000 <= ec_val < 255000:
153-
assert ec_val in OCSPTelemetryData.ERROR_CODE_MAP
154-
155-
156-
@pytest.mark.flaky(reruns=3)
157-
def test_telemetry_oob_http_log_urgent(telemetry_setup):
158-
"""Tests sending an urgent HTTP request telemetry event."""
159-
telemetry = TelemetryService.get_instance()
160-
161-
assert telemetry.size() == 0
162-
telemetry.log_http_request_error(
163-
event_name,
164-
url,
165-
method,
166-
SQLSTATE_CONNECTION_WAS_NOT_ESTABLISHED,
167-
ER_FAILED_TO_REQUEST,
168-
exception=exception,
169-
stack_trace=stack_trace,
170-
urgent=True,
171-
)
172-
assert telemetry.size() == 0
173-
174-
175-
def test_generate_telemetry_with_driver_info():
176-
assert snowflake.connector.telemetry.generate_telemetry_data_dict(
177-
is_oob_telemetry=True
178-
) == {
179-
snowflake.connector.telemetry.TelemetryField.KEY_OOB_DRIVER.value: CLIENT_NAME,
180-
snowflake.connector.telemetry.TelemetryField.KEY_OOB_VERSION.value: SNOWFLAKE_CONNECTOR_VERSION,
181-
}
182-
183-
assert snowflake.connector.telemetry.generate_telemetry_data_dict(
184-
from_dict={}, is_oob_telemetry=True
185-
) == {
186-
snowflake.connector.telemetry.TelemetryField.KEY_OOB_DRIVER.value: CLIENT_NAME,
187-
snowflake.connector.telemetry.TelemetryField.KEY_OOB_VERSION.value: SNOWFLAKE_CONNECTOR_VERSION,
188-
}
189-
190-
assert snowflake.connector.telemetry.generate_telemetry_data_dict(
191-
from_dict={"key": "value"}, is_oob_telemetry=True
192-
) == {
193-
snowflake.connector.telemetry.TelemetryField.KEY_OOB_DRIVER.value: CLIENT_NAME,
194-
snowflake.connector.telemetry.TelemetryField.KEY_OOB_VERSION.value: SNOWFLAKE_CONNECTOR_VERSION,
195-
"key": "value",
196-
}
197-
198-
assert snowflake.connector.telemetry.generate_telemetry_data_dict(
199-
from_dict={
200-
snowflake.connector.telemetry.TelemetryField.KEY_OOB_DRIVER.value: "CUSTOM_CLIENT_NAME",
201-
snowflake.connector.telemetry.TelemetryField.KEY_OOB_VERSION.value: "1.2.3",
202-
"key": "value",
203-
},
204-
is_oob_telemetry=True,
205-
) == {
206-
snowflake.connector.telemetry.TelemetryField.KEY_OOB_DRIVER.value: "CUSTOM_CLIENT_NAME",
207-
snowflake.connector.telemetry.TelemetryField.KEY_OOB_VERSION.value: "1.2.3",
208-
"key": "value",
209-
}
43+
assert telemetry.queue.empty()
44+
telemetry.log_general_exception(event_name, {})
45+
assert telemetry.queue.empty()
46+
telemetry.log_http_request_error(event_name, url, method, "error", "error")
47+
assert telemetry.queue.empty()
21048

21149

21250
class MockTelemetryService(TelemetryService):

0 commit comments

Comments
 (0)