Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions ddtrace/internal/runtime/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
)

DEFAULT_RUNTIME_METRICS = GC_RUNTIME_METRICS | PSUTIL_RUNTIME_METRICS
DEFAULT_RUNTIME_METRICS_INTERVAL = 10

SERVICE = "service"
ENV = "env"
Expand Down
39 changes: 11 additions & 28 deletions ddtrace/internal/runtime/runtime_metrics.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import itertools
import os
from typing import ClassVar # noqa:F401
from typing import List # noqa:F401
from typing import Optional # noqa:F401
Expand All @@ -8,13 +7,13 @@
from ddtrace.internal import atexit
from ddtrace.internal import forksafe
from ddtrace.internal.constants import EXPERIMENTAL_FEATURES
from ddtrace.vendor.debtcollector import deprecate
from ddtrace.vendor.dogstatsd import DogStatsd

from .. import periodic
from ..dogstatsd import get_dogstatsd_client
from ..logger import get_logger
from .constants import DEFAULT_RUNTIME_METRICS
from .constants import DEFAULT_RUNTIME_METRICS_INTERVAL
from .metric_collectors import GCRuntimeMetricCollector
from .metric_collectors import PSUtilRuntimeMetricCollector
from .tag_collectors import PlatformTagCollector
Expand Down Expand Up @@ -68,25 +67,14 @@ class RuntimeMetrics(RuntimeCollectorsIterable):
]


def _get_interval_or_default():
if "DD_RUNTIME_METRICS_INTERVAL" in os.environ:
deprecate(
"`DD_RUNTIME_METRICS_INTERVAL` is deprecated and will be removed in a future version.",
removal_version="4.0.0",
)
return float(os.getenv("DD_RUNTIME_METRICS_INTERVAL", default=10))


class RuntimeWorker(periodic.PeriodicService):
"""Worker thread for collecting and writing runtime metrics to a DogStatsd
client.
"""
"""Worker thread for collecting and writing runtime metrics to a DogStatsd client."""

enabled = False
_instance = None # type: ClassVar[Optional[RuntimeWorker]]
_lock = forksafe.Lock()

def __init__(self, interval=_get_interval_or_default(), tracer=None, dogstatsd_url=None) -> None:
def __init__(self, interval=DEFAULT_RUNTIME_METRICS_INTERVAL, tracer=None, dogstatsd_url=None) -> None:
super().__init__(interval=interval)
self.dogstatsd_url: Optional[str] = dogstatsd_url
self._dogstatsd_client: DogStatsd = get_dogstatsd_client(
Expand All @@ -107,8 +95,7 @@ def __init__(self, interval=_get_interval_or_default(), tracer=None, dogstatsd_u
self._platform_tags = self._format_tags(PlatformTags())

@classmethod
def disable(cls):
# type: () -> None
def disable(cls) -> None:
with cls._lock:
if cls._instance is None:
return
Expand All @@ -134,13 +121,15 @@ def _restart(cls):
cls.enable()

@classmethod
def enable(cls, flush_interval=None, tracer=None, dogstatsd_url=None):
# type: (Optional[float], Optional[ddtrace.trace.Tracer], Optional[str]) -> None
def enable(
cls,
flush_interval: Optional[float] = DEFAULT_RUNTIME_METRICS_INTERVAL,
tracer: Optional[ddtrace.trace.Tracer] = None,
dogstatsd_url: Optional[str] = None,
) -> None:
with cls._lock:
if cls._instance is not None:
return
if flush_interval is None:
flush_interval = _get_interval_or_default()
runtime_worker = cls(flush_interval, tracer, dogstatsd_url)
runtime_worker.start()

Expand All @@ -150,8 +139,7 @@ def enable(cls, flush_interval=None, tracer=None, dogstatsd_url=None):
cls._instance = runtime_worker
cls.enabled = True

def flush(self):
# type: () -> None
def flush(self) -> None:
# Ensure runtime metrics have up-to-date tags (ex: service, env, version)
rumtime_tags = self._format_tags(TracerTags()) + self._platform_tags
log.debug("Sending runtime metrics with the following tags: %s", rumtime_tags)
Expand All @@ -162,11 +150,6 @@ def flush(self):
log.debug("Sending ddtrace runtime metric %s:%s", key, value)
self.send_metric(key, value)

def _stop_service(self):
# type: (...) -> None
# De-register span hook
super(RuntimeWorker, self)._stop_service()

def _format_tags(self, tags: RuntimeCollectorsIterable) -> List[str]:
# DEV: ddstatsd expects tags in the form ['key1:value1', 'key2:value2', ...]
return ["{}:{}".format(k, v) for k, v in tags]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
other:
- |
This change removes the deprecated environment variable `DEFAULT_RUNTIME_METRICS_INTERVAL`.
1 change: 0 additions & 1 deletion tests/contrib/yaaredis/test_yaaredis.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
from ddtrace.contrib.internal.yaaredis.patch import patch
from ddtrace.contrib.internal.yaaredis.patch import unpatch
from ddtrace.internal.compat import is_wrapted
from tests.opentracer.utils import init_tracer
from tests.utils import override_config

from ..config import REDIS_CONFIG
Expand Down
Loading