Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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 sentry_sdk/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
"set_extra",
"set_user",
"set_level",
"set_measurement",
]

# Initialize the debug support after everything is loaded
Expand Down
17 changes: 16 additions & 1 deletion sentry_sdk/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,14 @@
from typing import ContextManager
from typing import Union

from sentry_sdk._types import Event, Hint, Breadcrumb, BreadcrumbHint, ExcInfo
from sentry_sdk._types import (
Event,
Hint,
Breadcrumb,
BreadcrumbHint,
ExcInfo,
MeasurementUnit,
)
from sentry_sdk.tracing import Span, Transaction

T = TypeVar("T")
Expand Down Expand Up @@ -45,6 +52,7 @@ def overload(x):
"set_extra",
"set_user",
"set_level",
"set_measurement",
]


Expand Down Expand Up @@ -213,3 +221,10 @@ def start_transaction(
):
# type: (...) -> Union[Transaction, NoOpSpan]
return Hub.current.start_transaction(transaction, **kwargs)


def set_measurement(name, value, unit=""):
# type: (str, float, MeasurementUnit) -> None
transaction = Hub.current.scope.transaction
if transaction is not None:
transaction.set_measurement(name, value, unit)
1 change: 0 additions & 1 deletion sentry_sdk/consts.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
"record_sql_params": Optional[bool],
"smart_transaction_trimming": Optional[bool],
"propagate_tracestate": Optional[bool],
"custom_measurements": Optional[bool],
"profiles_sample_rate": Optional[float],
"profiler_mode": Optional[str],
},
Expand Down
10 changes: 1 addition & 9 deletions sentry_sdk/tracing.py
Original file line number Diff line number Diff line change
Expand Up @@ -718,19 +718,12 @@ def finish(self, hub=None, end_timestamp=None):
contexts.update({"profile": self._profile.get_profile_context()})
self._profile = None

if has_custom_measurements_enabled():
event["measurements"] = self._measurements
event["measurements"] = self._measurements

return hub.capture_event(event)

def set_measurement(self, name, value, unit=""):
# type: (str, float, MeasurementUnit) -> None
if not has_custom_measurements_enabled():
logger.debug(
"[Tracing] Experimental custom_measurements feature is disabled"
)
return

self._measurements[name] = {"value": value, "unit": unit}

def set_context(self, key, value):
Expand Down Expand Up @@ -908,5 +901,4 @@ def finish(self, hub=None, end_timestamp=None):
has_tracing_enabled,
is_valid_sample_rate,
maybe_create_breadcrumbs_from_span,
has_custom_measurements_enabled,
)
7 changes: 0 additions & 7 deletions sentry_sdk/tracing_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -414,13 +414,6 @@ def has_tracestate_enabled(span=None):
return bool(options and options["_experiments"].get("propagate_tracestate"))


def has_custom_measurements_enabled():
# type: () -> bool
client = sentry_sdk.Hub.current.client
options = client and client.options
return bool(options and options["_experiments"].get("custom_measurements"))


class Baggage(object):
__slots__ = ("sentry_items", "third_party_items", "mutable")

Expand Down
18 changes: 16 additions & 2 deletions tests/tracing/test_misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import os

import sentry_sdk
from sentry_sdk import Hub, start_span, start_transaction
from sentry_sdk import Hub, start_span, start_transaction, set_measurement
from sentry_sdk.tracing import Span, Transaction
from sentry_sdk.tracing_utils import has_tracestate_enabled

Expand Down Expand Up @@ -249,7 +249,7 @@ def test_has_tracestate_enabled(sentry_init, tracestate_enabled):


def test_set_meaurement(sentry_init, capture_events):
sentry_init(traces_sample_rate=1.0, _experiments={"custom_measurements": True})
sentry_init(traces_sample_rate=1.0)

events = capture_events()

Expand All @@ -274,3 +274,17 @@ def test_set_meaurement(sentry_init, capture_events):
assert event["measurements"]["metric.bar"] == {"value": 456, "unit": "second"}
assert event["measurements"]["metric.baz"] == {"value": 420.69, "unit": "custom"}
assert event["measurements"]["metric.foobar"] == {"value": 17.99, "unit": "percent"}


def test_set_meaurement_public_api(sentry_init, capture_events):
sentry_init(traces_sample_rate=1.0)

events = capture_events()

with start_transaction(name="measuring stuff"):
set_measurement("metric.foo", 123)
set_measurement("metric.bar", 456, unit="second")

(event,) = events
assert event["measurements"]["metric.foo"] == {"value": 123, "unit": ""}
assert event["measurements"]["metric.bar"] == {"value": 456, "unit": "second"}