Skip to content

Commit a34d416

Browse files
getsentry-botuntitaker
authored andcommitted
Revert "Allow multiple dogstatsd instances, record precise timing distributions (#97662)"
This reverts commit 6a7c58d. Co-authored-by: untitaker <[email protected]>
1 parent 1208633 commit a34d416

File tree

8 files changed

+35
-52
lines changed

8 files changed

+35
-52
lines changed

src/sentry/metrics/base.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ def timing(
5252
tags: Tags | None = None,
5353
sample_rate: float = 1,
5454
stacklevel: int = 0,
55-
precise: bool = False,
5655
) -> None:
5756
raise NotImplementedError
5857

src/sentry/metrics/datadog.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ def timing(
6464
tags: Tags | None = None,
6565
sample_rate: float = 1,
6666
stacklevel: int = 0,
67-
precise: bool = False,
6867
) -> None:
6968
tags = dict(tags or ())
7069

@@ -74,14 +73,9 @@ def timing(
7473
tags["instance"] = instance
7574

7675
tags_list = [f"{k}:{v}" for k, v in tags.items()]
77-
if not precise:
78-
self.stats.timing(
79-
self._get_key(key), value, sample_rate=sample_rate, tags=tags_list, host=self.host
80-
)
81-
else:
82-
self.stats.distribution(
83-
self._get_key(key), value, sample_rate=sample_rate, tags=tags_list, host=self.host
84-
)
76+
self.stats.timing(
77+
self._get_key(key), value, sample_rate=sample_rate, tags=tags_list, host=self.host
78+
)
8579

8680
def gauge(
8781
self,

src/sentry/metrics/dogstatsd.py

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,45 @@
11
import atexit
22
from typing import Any
33

4-
from datadog.dogstatsd.base import DogStatsd
4+
from datadog import initialize
5+
from datadog.dogstatsd.base import statsd
56

67
from .base import MetricsBackend, Tags
78

89
__all__ = ["DogStatsdMetricsBackend"]
910

11+
# Set the maximum number of packets to queue for the sender.
12+
# How may packets to queue before blocking or dropping the packet if the packet queue is already full.
13+
# 0 means unlimited.
14+
SENDER_QUEUE_SIZE = 0
15+
16+
# Set timeout for packet queue operations, in seconds
17+
# How long the application thread is willing to wait for the queue clear up before dropping the metric packet.
18+
# If set to None, wait forever.
19+
# If set to zero drop the packet immediately if the queue is full.
20+
SENDER_QUEUE_TIMEOUT = 0
21+
1022

1123
class DogStatsdMetricsBackend(MetricsBackend):
1224
def __init__(self, prefix: str | None = None, **kwargs: Any) -> None:
25+
# TODO(dcramer): it'd be nice if the initialize call wasn't a global
1326
self.tags = kwargs.pop("tags", None)
27+
kwargs["statsd_disable_buffering"] = False
28+
29+
initialize(**kwargs)
30+
statsd.disable_telemetry()
1431

15-
instance_kwargs: dict[str, Any] = {
16-
"disable_telemetry": True,
17-
"disable_buffering": False,
18-
# When enabled, a background thread will be used to send metric payloads to the Agent.
19-
"disable_background_sender": False,
20-
}
21-
if socket_path := kwargs.get("statsd_socket_path"):
22-
instance_kwargs["socket_path"] = socket_path
23-
else:
24-
if host := kwargs.get("statsd_host"):
25-
instance_kwargs["host"] = host
26-
if port := kwargs.get("statsd_port"):
27-
instance_kwargs["port"] = int(port)
28-
29-
self.statsd = DogStatsd(**instance_kwargs)
32+
# When enabled, a background thread will be used to send metric payloads to the Agent.
33+
statsd.enable_background_sender(
34+
sender_queue_size=SENDER_QUEUE_SIZE, sender_queue_timeout=SENDER_QUEUE_TIMEOUT
35+
)
36+
# Applications should call wait_for_pending() before exiting to make sure all pending payloads are sent.
37+
atexit.register(statsd.wait_for_pending)
3038

3139
# Origin detection is enabled after 0.45 by default.
3240
# Disable it since it silently fails.
3341
# Ref: https://github.com/DataDog/datadogpy/issues/764
34-
self.statsd._container_id = None
35-
36-
# Applications should call wait_for_pending() before exiting to make sure all pending payloads are sent.
37-
atexit.register(self.statsd.wait_for_pending)
38-
42+
statsd._container_id = None
3943
super().__init__(prefix=prefix)
4044

4145
def incr(
@@ -56,7 +60,7 @@ def incr(
5660
tags["instance"] = instance
5761

5862
tags_list = [f"{k}:{v}" for k, v in tags.items()]
59-
self.statsd.increment(self._get_key(key), amount, sample_rate=sample_rate, tags=tags_list)
63+
statsd.increment(self._get_key(key), amount, sample_rate=sample_rate, tags=tags_list)
6064

6165
def timing(
6266
self,
@@ -66,7 +70,6 @@ def timing(
6670
tags: Tags | None = None,
6771
sample_rate: float = 1,
6872
stacklevel: int = 0,
69-
precise: bool = False,
7073
) -> None:
7174
tags = dict(tags or ())
7275

@@ -76,12 +79,7 @@ def timing(
7679
tags["instance"] = instance
7780

7881
tags_list = [f"{k}:{v}" for k, v in tags.items()]
79-
if not precise:
80-
self.statsd.timing(self._get_key(key), value, sample_rate=sample_rate, tags=tags_list)
81-
else:
82-
self.statsd.distribution(
83-
self._get_key(key), value, sample_rate=sample_rate, tags=tags_list
84-
)
82+
statsd.timing(self._get_key(key), value, sample_rate=sample_rate, tags=tags_list)
8583

8684
def gauge(
8785
self,
@@ -101,7 +99,7 @@ def gauge(
10199
tags["instance"] = instance
102100

103101
tags_list = [f"{k}:{v}" for k, v in tags.items()]
104-
self.statsd.gauge(self._get_key(key), value, sample_rate=sample_rate, tags=tags_list)
102+
statsd.gauge(self._get_key(key), value, sample_rate=sample_rate, tags=tags_list)
105103

106104
def distribution(
107105
self,
@@ -126,7 +124,7 @@ def distribution(
126124
tags["instance"] = instance
127125

128126
tags_list = [f"{k}:{v}" for k, v in tags.items()]
129-
self.statsd.distribution(self._get_key(key), value, sample_rate=sample_rate, tags=tags_list)
127+
statsd.distribution(self._get_key(key), value, sample_rate=sample_rate, tags=tags_list)
130128

131129
def event(
132130
self,
@@ -148,7 +146,7 @@ def event(
148146
tags["instance"] = instance
149147

150148
tags_list = [f"{k}:{v}" for k, v in tags.items()]
151-
self.statsd.event(
149+
statsd.event(
152150
title=title,
153151
message=message,
154152
alert_type=alert_type,

src/sentry/metrics/dummy.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ def timing(
2424
tags: Tags | None = None,
2525
sample_rate: float = 1,
2626
stacklevel: int = 0,
27-
precise: bool = False,
2827
) -> None:
2928
pass
3029

src/sentry/metrics/logging.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ def timing(
2626
tags: Tags | None = None,
2727
sample_rate: float = 1,
2828
stacklevel: int = 0,
29-
precise: bool = False,
3029
) -> None:
3130
logger.debug(
3231
"%r: %g ms", key, value * 1000, extra={"instance": instance, "tags": tags or {}}

src/sentry/metrics/middleware.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,16 +144,13 @@ def timing(
144144
tags: Tags | None = None,
145145
sample_rate: float = 1,
146146
stacklevel: int = 0,
147-
precise: bool = False,
148147
) -> None:
149148
current_tags = get_current_global_tags()
150149
if tags is not None:
151150
current_tags.update(tags)
152151
current_tags = _filter_tags(key, current_tags)
153152

154-
return self.inner.timing(
155-
key, value, instance, current_tags, sample_rate, stacklevel + 1, precise
156-
)
153+
return self.inner.timing(key, value, instance, current_tags, sample_rate, stacklevel + 1)
157154

158155
def gauge(
159156
self,

src/sentry/metrics/statsd.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ def timing(
3737
tags: Tags | None = None,
3838
sample_rate: float = 1,
3939
stacklevel: int = 0,
40-
precise: bool = False,
4140
) -> None:
4241
self.client.timing(self._full_key(self._get_key(key)), value, sample_rate)
4342

src/sentry/utils/metrics.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -178,9 +178,7 @@ def timing(
178178

179179
if precise and precise_backend:
180180
try:
181-
precise_backend.timing(
182-
key, value, instance, tags, sample_rate, stacklevel + 1, precise=True
183-
)
181+
precise_backend.timing(key, value, instance, tags, sample_rate, stacklevel + 1)
184182
except Exception:
185183
logger = logging.getLogger("sentry.errors")
186184
logger.exception("Unable to record precise metric")

0 commit comments

Comments
 (0)