diff --git a/sentry_sdk/client.py b/sentry_sdk/client.py index 2927f40495..7e2659810d 100644 --- a/sentry_sdk/client.py +++ b/sentry_sdk/client.py @@ -249,15 +249,28 @@ def _capture_envelope(envelope): self.metrics_aggregator = None # type: Optional[MetricsAggregator] experiments = self.options.get("_experiments", {}) - if experiments.get("enable_metrics", True): - from sentry_sdk.metrics import MetricsAggregator - - self.metrics_aggregator = MetricsAggregator( - capture_func=_capture_envelope, - enable_code_locations=bool( - experiments.get("metric_code_locations", True) - ), - ) + if experiments.get("enable_metrics", True) or experiments.get( + "force_enable_metrics", False + ): + try: + import uwsgi # type: ignore + except ImportError: + uwsgi = None + + if uwsgi is not None and not experiments.get( + "force_enable_metrics", False + ): + logger.warning("Metrics currently not supported with uWSGI.") + + else: + from sentry_sdk.metrics import MetricsAggregator + + self.metrics_aggregator = MetricsAggregator( + capture_func=_capture_envelope, + enable_code_locations=bool( + experiments.get("metric_code_locations", True) + ), + ) max_request_body_size = ("always", "never", "small", "medium") if self.options["max_request_body_size"] not in max_request_body_size: diff --git a/sentry_sdk/consts.py b/sentry_sdk/consts.py index 5bf56d4500..26c364eb7a 100644 --- a/sentry_sdk/consts.py +++ b/sentry_sdk/consts.py @@ -46,6 +46,7 @@ "transport_zlib_compression_level": Optional[int], "transport_num_pools": Optional[int], "enable_metrics": Optional[bool], + "force_enable_metrics": Optional[bool], "metrics_summary_sample_rate": Optional[float], "should_summarize_metric": Optional[Callable[[str, MetricTags], bool]], "before_emit_metric": Optional[Callable[[str, MetricTags], bool]],