Skip to content

Commit 0dee2fc

Browse files
feat(runtime-metrics): add enabled class property (#2583)
This change adds the `enabled` class property to the runtime metrics API for checking whether the service has been enabled or not. Co-authored-by: Kyle Verhoog <[email protected]>
1 parent be4a35e commit 0dee2fc

File tree

3 files changed

+41
-12
lines changed

3 files changed

+41
-12
lines changed

ddtrace/internal/runtime/runtime_metrics.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ class RuntimeWorker(periodic.PeriodicService):
7777
_runtime_metrics = attr.ib(factory=RuntimeMetrics, repr=False)
7878
_services = attr.ib(type=Set[str], init=False, factory=set)
7979

80+
enabled = False
8081
_instance = None # type: ClassVar[Optional[RuntimeWorker]]
8182
_lock = RLock()
8283

@@ -108,6 +109,7 @@ def disable(cls):
108109
cls._instance.stop()
109110
cls._instance.join()
110111
cls._instance = None
112+
cls.enabled = False
111113

112114
@classmethod
113115
def _restart(cls):
@@ -128,6 +130,7 @@ def enable(cls, flush_interval=None, tracer=None, dogstatsd_url=None):
128130
forksafe.register(cls._restart)
129131

130132
cls._instance = runtime_worker
133+
cls.enabled = True
131134

132135
def flush(self):
133136
# type: () -> None

ddtrace/runtime/__init__.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
11
from typing import Optional
22

3+
import six
4+
35
import ddtrace.internal.runtime.runtime_metrics
46

57

6-
class RuntimeMetrics(object):
8+
class _RuntimeMetricsStatus(type):
9+
@property
10+
def _enabled(_):
11+
# type () -> bool
12+
"""Runtime metrics enabled status."""
13+
return ddtrace.internal.runtime.runtime_metrics.RuntimeWorker.enabled
14+
15+
16+
class RuntimeMetrics(six.with_metaclass(_RuntimeMetricsStatus)):
717
"""
818
Runtime metrics service API.
919

tests/runtime/test_runtime_metrics_api.py

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,38 +32,54 @@ def test_manually_start_runtime_metrics(run_python_code_in_subprocess):
3232
out, err, status, pid = run_python_code_in_subprocess(
3333
"""
3434
from ddtrace.runtime import RuntimeMetrics
35-
RuntimeMetrics.enable()
3635
37-
from ddtrace.internal.runtime.runtime_metrics import RuntimeWorker
38-
assert RuntimeWorker._instance is not None
36+
RuntimeMetrics.enable()
37+
assert RuntimeMetrics._enabled
3938
4039
RuntimeMetrics.disable()
41-
assert RuntimeWorker._instance is None
40+
assert not RuntimeMetrics._enabled
4241
""",
4342
)
44-
4543
assert status == 0
4644

4745

48-
def test_start_runtime_metrics_via_env_var(ddtrace_run_python_code_in_subprocess):
46+
def test_start_runtime_metrics_via_env_var(monkeypatch, ddtrace_run_python_code_in_subprocess):
4947
"""
5048
When running with ddtrace-run and DD_RUNTIME_METRICS_ENABLED is set
5149
Runtime metrics worker starts and there are no errors
5250
"""
5351

5452
_, _, status, _ = ddtrace_run_python_code_in_subprocess(
5553
"""
56-
from ddtrace.internal.runtime.runtime_metrics import RuntimeWorker
57-
assert RuntimeWorker._instance is None
54+
from ddtrace.runtime import RuntimeMetrics
55+
assert not RuntimeMetrics._enabled
5856
"""
5957
)
6058
assert status == 0
6159

60+
monkeypatch.setenv("DD_RUNTIME_METRICS_ENABLED", "true")
6261
_, _, status, _ = ddtrace_run_python_code_in_subprocess(
6362
"""
64-
from ddtrace.internal.runtime.runtime_metrics import RuntimeWorker
65-
assert RuntimeWorker._instance is not None
63+
from ddtrace.runtime import RuntimeMetrics
64+
assert RuntimeMetrics._enabled
65+
""",
66+
)
67+
assert status == 0
68+
69+
70+
def test_runtime_metrics_via_env_var_manual_start(monkeypatch, ddtrace_run_python_code_in_subprocess):
71+
"""
72+
When running with ddtrace-run and DD_RUNTIME_METRICS_ENABLED is set and trying to start RuntimeMetrics manually
73+
Runtime metrics worker starts and there are no errors
74+
"""
75+
76+
monkeypatch.setenv("DD_RUNTIME_METRICS_ENABLED", "true")
77+
_, _, status, _ = ddtrace_run_python_code_in_subprocess(
78+
"""
79+
from ddtrace.runtime import RuntimeMetrics
80+
assert RuntimeMetrics._enabled
81+
RuntimeMetrics.enable()
82+
assert RuntimeMetrics._enabled
6683
""",
67-
env={"DD_RUNTIME_METRICS_ENABLED": "true"},
6884
)
6985
assert status == 0

0 commit comments

Comments
 (0)