From 6ab09bed771f7d02d1e483c42f011a975d292886 Mon Sep 17 00:00:00 2001 From: Anton Pirker Date: Thu, 16 Nov 2023 10:05:01 +0100 Subject: [PATCH 1/3] Fixed local variable not present when error in users error_sampler function --- sentry_sdk/client.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sentry_sdk/client.py b/sentry_sdk/client.py index 749ab23cfe..c478b2706d 100644 --- a/sentry_sdk/client.py +++ b/sentry_sdk/client.py @@ -459,11 +459,11 @@ def _should_sample_error( # type: (...) -> bool sampler = self.options.get("error_sampler", None) + sample_rate = self.options["sample_rate"] + if callable(sampler): with capture_internal_exceptions(): sample_rate = sampler(event, hint) - else: - sample_rate = self.options["sample_rate"] try: not_in_sample_rate = sample_rate < 1.0 and random.random() >= sample_rate From 8017b5f0ac40e5f63472021b8fe5d93c9b500486 Mon Sep 17 00:00:00 2001 From: Anton Pirker Date: Mon, 20 Nov 2023 13:39:33 +0100 Subject: [PATCH 2/3] Handling errors raised by error_sampler the same way as invalid sample rates --- sentry_sdk/client.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/sentry_sdk/client.py b/sentry_sdk/client.py index c478b2706d..2a05fb30e1 100644 --- a/sentry_sdk/client.py +++ b/sentry_sdk/client.py @@ -457,20 +457,31 @@ def _should_sample_error( hint, # type: Hint ): # type: (...) -> bool - sampler = self.options.get("error_sampler", None) + error_sampler = self.options.get("error_sampler", None) + import ipdb - sample_rate = self.options["sample_rate"] + ipdb.set_trace() - if callable(sampler): + if callable(error_sampler): with capture_internal_exceptions(): - sample_rate = sampler(event, hint) + sample_rate = error_sampler(event, hint) + else: + sample_rate = self.options["sample_rate"] try: not_in_sample_rate = sample_rate < 1.0 and random.random() >= sample_rate + except NameError: + logger.warning( + "The provided error_sampler raised an error. Defaulting to sampling the event." + ) + + # If the error_sampler raised an error, we should sample the event, since the default behavior + # (when no sample_rate or error_sampler is provided) is to sample all events. + not_in_sample_rate = False except TypeError: parameter, verb = ( ("error_sampler", "returned") - if callable(sampler) + if callable(error_sampler) else ("sample_rate", "contains") ) logger.warning( From 10d221f5aafd4946793f20877a4c01722fb06ad7 Mon Sep 17 00:00:00 2001 From: Anton Pirker Date: Mon, 20 Nov 2023 13:40:20 +0100 Subject: [PATCH 3/3] cleanup --- sentry_sdk/client.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/sentry_sdk/client.py b/sentry_sdk/client.py index 2a05fb30e1..d771e984b6 100644 --- a/sentry_sdk/client.py +++ b/sentry_sdk/client.py @@ -458,9 +458,6 @@ def _should_sample_error( ): # type: (...) -> bool error_sampler = self.options.get("error_sampler", None) - import ipdb - - ipdb.set_trace() if callable(error_sampler): with capture_internal_exceptions():