Skip to content

Commit f934870

Browse files
committed
add dedicated function with generation label
test metrics
1 parent b011e4b commit f934870

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/__init__.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ def __init__(
196196
self._runtime_memory_labels = self._labels.copy()
197197
self._runtime_cpu_time_labels = self._labels.copy()
198198
self._runtime_gc_count_labels = self._labels.copy()
199+
self._runtime_gc_collections_labels = self._labels.copy()
199200
self._runtime_thread_count_labels = self._labels.copy()
200201
self._runtime_cpu_utilization_labels = self._labels.copy()
201202
self._runtime_context_switches_labels = self._labels.copy()
@@ -471,7 +472,7 @@ def _instrument(self, **kwargs: Any):
471472
)
472473
self._meter.create_observable_counter(
473474
name=f"process.runtime.{self._python_implementation}.gc_count",
474-
callbacks=[self._get_runtime_gc_count],
475+
callbacks=[self._get_runtime_gc_collections],
475476
description="The number of times a generation was collected since interpreter start.",
476477
unit="{collection}",
477478
)
@@ -891,6 +892,16 @@ def _get_runtime_gc_count(
891892
self._runtime_gc_count_labels["count"] = str(index)
892893
yield Observation(count, self._runtime_gc_count_labels.copy())
893894

895+
def _get_runtime_gc_collections(
896+
self, options: CallbackOptions
897+
) -> Iterable[Observation]:
898+
"""Observer callback for garbage collection"""
899+
for index, count in enumerate(gc.get_count()):
900+
self._runtime_gc_collections_labels["generation"] = str(index)
901+
yield Observation(
902+
count, self._runtime_gc_collections_labels.copy()
903+
)
904+
894905
def _get_runtime_thread_count(
895906
self, options: CallbackOptions
896907
) -> Iterable[Observation]:

instrumentation/opentelemetry-instrumentation-system-metrics/tests/test_system_metrics.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,9 @@ def test_system_metrics_instrument(self):
137137
observer_names.append(
138138
f"process.runtime.{self.implementation}.gc_count",
139139
)
140+
observer_names.append(
141+
f"process.runtime.{self.implementation}.gc_count",
142+
)
140143

141144
self.assertEqual(sorted(metric_names), sorted(observer_names))
142145

@@ -937,6 +940,32 @@ def test_runtime_cpu_time(self, mock_process_cpu_times):
937940
f"process.runtime.{self.implementation}.cpu_time", expected
938941
)
939942

943+
@mock.patch("gc.get_count")
944+
@skipIf(
945+
python_implementation().lower() == "pypy", "not supported for pypy"
946+
)
947+
def test_runtime_get_count(self, mock_gc_get_count):
948+
mock_gc_get_count.configure_mock(**{"return_value": (1, 2, 3)})
949+
950+
expected_gc_count = [
951+
_SystemMetricsResult({"count": "0"}, 1),
952+
_SystemMetricsResult({"count": "1"}, 2),
953+
_SystemMetricsResult({"count": "2"}, 3),
954+
]
955+
self._test_metrics(
956+
f"process.runtime.{self.implementation}.gc_count",
957+
expected_gc_count,
958+
)
959+
expected_gc_collections = [
960+
_SystemMetricsResult({"generation": "0"}, 1),
961+
_SystemMetricsResult({"generation": "1"}, 2),
962+
_SystemMetricsResult({"generation": "2"}, 3),
963+
]
964+
self._test_metrics(
965+
f"process.runtime.{self.implementation}.gc_collections",
966+
expected_gc_collections,
967+
)
968+
940969
@mock.patch("gc.get_count")
941970
@skipIf(
942971
python_implementation().lower() == "pypy", "not supported for pypy"

0 commit comments

Comments
 (0)