Spaces:
Running
Running
David de la Iglesia Castro
commited on
enh(tracing): Add `output_dir` arg and unit tests. (#11)
Browse files
src/surf_spot_finder/tracing.py
CHANGED
@@ -23,28 +23,32 @@ class JsonFileSpanExporter(SpanExporter):
|
|
23 |
pass
|
24 |
|
25 |
|
26 |
-
def get_tracer_provider(
|
|
|
|
|
27 |
"""
|
28 |
Create a tracer_provider based on the selected mode.
|
29 |
|
30 |
Args:
|
31 |
project_name: Name of the project for tracing
|
32 |
json_tracer: Whether to use the custom JSON file exporter (True) or Phoenix (False)
|
|
|
|
|
|
|
33 |
|
34 |
Returns:
|
35 |
TracerProvider: The configured tracer provider
|
36 |
"""
|
37 |
if json_tracer:
|
38 |
-
|
39 |
-
|
40 |
-
os.makedirs(local_folder)
|
41 |
timestamp = datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
|
42 |
|
43 |
tracer_provider = TracerProvider()
|
44 |
trace.set_tracer_provider(tracer_provider)
|
45 |
|
46 |
json_file_exporter = JsonFileSpanExporter(
|
47 |
-
file_name=f"{
|
48 |
)
|
49 |
span_processor = SimpleSpanProcessor(json_file_exporter)
|
50 |
tracer_provider.add_span_processor(span_processor)
|
|
|
23 |
pass
|
24 |
|
25 |
|
26 |
+
def get_tracer_provider(
|
27 |
+
project_name: str, json_tracer: bool, output_dir: str = "telemetry_output"
|
28 |
+
) -> TracerProvider:
|
29 |
"""
|
30 |
Create a tracer_provider based on the selected mode.
|
31 |
|
32 |
Args:
|
33 |
project_name: Name of the project for tracing
|
34 |
json_tracer: Whether to use the custom JSON file exporter (True) or Phoenix (False)
|
35 |
+
output_dir: The directory where the telemetry output will be stored.
|
36 |
+
Only used if `json_tracer=True`.
|
37 |
+
Defaults to "telemetry_output".
|
38 |
|
39 |
Returns:
|
40 |
TracerProvider: The configured tracer provider
|
41 |
"""
|
42 |
if json_tracer:
|
43 |
+
if not os.path.exists(output_dir):
|
44 |
+
os.makedirs(output_dir)
|
|
|
45 |
timestamp = datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
|
46 |
|
47 |
tracer_provider = TracerProvider()
|
48 |
trace.set_tracer_provider(tracer_provider)
|
49 |
|
50 |
json_file_exporter = JsonFileSpanExporter(
|
51 |
+
file_name=f"{output_dir}/{project_name}-{timestamp}.json"
|
52 |
)
|
53 |
span_processor = SimpleSpanProcessor(json_file_exporter)
|
54 |
tracer_provider.add_span_processor(span_processor)
|
tests/unit/test_unit_tracing.py
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from unittest.mock import patch, MagicMock
|
2 |
+
|
3 |
+
import pytest
|
4 |
+
|
5 |
+
from surf_spot_finder.tracing import get_tracer_provider, setup_tracing
|
6 |
+
|
7 |
+
|
8 |
+
@pytest.mark.parametrize("json_tracer", [True, False])
|
9 |
+
def test_get_tracer_provider(tmp_path, json_tracer):
|
10 |
+
mock_trace = MagicMock()
|
11 |
+
mock_tracer_provider = MagicMock()
|
12 |
+
mock_register = MagicMock()
|
13 |
+
|
14 |
+
with (
|
15 |
+
patch("surf_spot_finder.tracing.trace", mock_trace),
|
16 |
+
patch("surf_spot_finder.tracing.TracerProvider", mock_tracer_provider),
|
17 |
+
patch("surf_spot_finder.tracing.register", mock_register),
|
18 |
+
):
|
19 |
+
get_tracer_provider(
|
20 |
+
project_name="test_project",
|
21 |
+
json_tracer=json_tracer,
|
22 |
+
output_dir=tmp_path / "telemetry",
|
23 |
+
)
|
24 |
+
assert (tmp_path / "telemetry").exists() == json_tracer
|
25 |
+
if json_tracer:
|
26 |
+
mock_trace.set_tracer_provider.assert_called_once_with(
|
27 |
+
mock_tracer_provider.return_value
|
28 |
+
)
|
29 |
+
else:
|
30 |
+
mock_register.assert_called_once_with(project_name="test_project")
|
31 |
+
|
32 |
+
|
33 |
+
def test_invalid_agent_type():
|
34 |
+
with pytest.raises(ValueError, match="agent_type must be one of"):
|
35 |
+
setup_tracing(MagicMock(), "invalid_agent_type")
|