David de la Iglesia Castro commited on
Commit
908e451
·
unverified ·
1 Parent(s): c61646b

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(project_name: str, json_tracer: bool) -> TracerProvider:
 
 
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
- local_folder: str = "telemetry_output"
39
- if not os.path.exists(local_folder):
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"{local_folder}/{project_name}-{timestamp}.json"
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")