Merge pull request #4325 from radhikagpt1208/fix/sentry-metrics-drop-metricsframe
Fix SentryMetrics dropping MetricsFrame from stop_ttfb/stop_processing
This commit is contained in:
1
changelog/4325.fixed.md
Normal file
1
changelog/4325.fixed.md
Normal file
@@ -0,0 +1 @@
|
||||
- Fixed `SentryMetrics` silently dropping `MetricsFrame`s from `stop_ttfb_metrics` and `stop_processing_metrics`. `SentryMetrics` called the base `FrameProcessorMetrics` implementation but discarded its return value, so `FrameProcessor` never pushed the `MetricsFrame` downstream. This prevented observers (e.g. `UserBotLatencyObserver`, `MetricsLogObserver`) from seeing TTFB and processing metrics for any service using `metrics=SentryMetrics()`. The metrics were still calculated and Sentry transactions still completed — only the downstream frame push was affected.
|
||||
@@ -97,13 +97,20 @@ class SentryMetrics(FrameProcessorMetrics):
|
||||
|
||||
Args:
|
||||
end_time: Optional end timestamp override.
|
||||
|
||||
Returns:
|
||||
MetricsFrame produced by the base class, or None if not measuring.
|
||||
Returning the frame is required so ``FrameProcessor.stop_ttfb_metrics``
|
||||
can push it downstream to observers.
|
||||
"""
|
||||
await super().stop_ttfb_metrics(end_time=end_time)
|
||||
frame = await super().stop_ttfb_metrics(end_time=end_time)
|
||||
|
||||
if self._sentry_available and self._ttfb_metrics_tx:
|
||||
await self._sentry_queue.put(self._ttfb_metrics_tx)
|
||||
self._ttfb_metrics_tx = None
|
||||
|
||||
return frame
|
||||
|
||||
async def start_processing_metrics(self, *, start_time: float | None = None):
|
||||
"""Start tracking frame processing metrics.
|
||||
|
||||
@@ -126,13 +133,20 @@ class SentryMetrics(FrameProcessorMetrics):
|
||||
|
||||
Args:
|
||||
end_time: Optional end timestamp override.
|
||||
|
||||
Returns:
|
||||
MetricsFrame produced by the base class, or None if not measuring.
|
||||
Returning the frame is required so ``FrameProcessor.stop_processing_metrics``
|
||||
can push it downstream to observers.
|
||||
"""
|
||||
await super().stop_processing_metrics(end_time=end_time)
|
||||
frame = await super().stop_processing_metrics(end_time=end_time)
|
||||
|
||||
if self._sentry_available and self._processing_metrics_tx:
|
||||
await self._sentry_queue.put(self._processing_metrics_tx)
|
||||
self._processing_metrics_tx = None
|
||||
|
||||
return frame
|
||||
|
||||
async def _sentry_task_handler(self):
|
||||
"""Background task handler for completing Sentry transactions."""
|
||||
running = True
|
||||
|
||||
Reference in New Issue
Block a user