diff --git a/src/Metrics/Metrics.php b/src/Metrics/Metrics.php index b218b3749..e8c6a6374 100644 --- a/src/Metrics/Metrics.php +++ b/src/Metrics/Metrics.php @@ -9,6 +9,9 @@ use Sentry\Metrics\Types\DistributionType; use Sentry\Metrics\Types\GaugeType; use Sentry\Metrics\Types\SetType; +use Sentry\Tracing\SpanContext; + +use function Sentry\trace; class Metrics { @@ -142,21 +145,32 @@ public function timing( array $tags = [], int $stackLevel = 0 ) { - $startTimestamp = microtime(true); - - $result = $callback(); - - $this->aggregator->add( - DistributionType::TYPE, - $key, - microtime(true) - $startTimestamp, - MetricsUnit::second(), - $tags, - (int) $startTimestamp, - $stackLevel + return trace( + function () use ($callback, $key, $tags, $stackLevel) { + $startTimestamp = microtime(true); + + $result = $callback(); + + /** + * Emitting the metric here, will attach it to the + * "metric.timing" span. + */ + $this->aggregator->add( + DistributionType::TYPE, + $key, + microtime(true) - $startTimestamp, + MetricsUnit::second(), + $tags, + (int) $startTimestamp, + $stackLevel + 4 // the `trace` helper adds 4 additional stack frames + ); + + return $result; + }, + SpanContext::make() + ->setOp('metric.timing') + ->setDescription($key) ); - - return $result; } public function flush(): ?EventId