Browse Source

feat(metrics): Expose span.duration (#71326)

Exposes span.duration in the metrics query builder with a very limited
set of available tags and replaces the `self_time` and `exclusive_time`
metrics. We've decided that we do not want to show these anymore.

People who have built widgets using this dashboard will still work, but
they won't be able to select the field in new widgets, or re-select it
in modified widgets.
Nar Saynorath 9 months ago
parent
commit
76bbf1787c

+ 2 - 5
static/app/utils/metrics/index.tsx

@@ -332,11 +332,8 @@ export function isCustomMetric({mri}: {mri: MRI}) {
   return mri.includes(':custom/');
 }
 
-export function isSpanSelfTime({mri}: {mri: MRI}) {
-  return (
-    mri === 'd:spans/exclusive_time@millisecond' ||
-    mri === 'g:spans/self_time@millisecond'
-  );
+export function isSpanDuration({mri}: {mri: MRI}) {
+  return mri === 'd:spans/duration@millisecond';
 }
 
 export function isGaugeMetric({mri}: {mri: MRI}) {

+ 19 - 1
static/app/utils/metrics/useMetricsTags.tsx

@@ -7,6 +7,17 @@ import useOrganization from 'sentry/utils/useOrganization';
 
 import {getMetaDateTimeParams} from './index';
 
+const SPAN_DURATION_MRI = 'd:spans/duration@millisecond';
+const ALLOWED_SPAN_DURATION_TAGS = [
+  'span.category',
+  'span.description',
+  'environment',
+  'project',
+  'span.action',
+  'span.domain',
+  'span.op',
+];
+
 export function getMetricsTagsQueryKey(
   organization: Organization,
   mri: MRI | undefined,
@@ -65,6 +76,13 @@ export function useMetricsTags(
 
   return {
     ...tagsQuery,
-    data: tagsQuery.data?.filter(tag => !blockedTagsData.includes(tag.key)) ?? [],
+    data:
+      tagsQuery.data?.filter(
+        tag =>
+          !blockedTagsData.includes(tag.key) ||
+          // Span duration only exposes tags that are found on all/most spans to
+          // avoid tags that are only collected for specific Insights use cases
+          (mri === SPAN_DURATION_MRI && ALLOWED_SPAN_DURATION_TAGS.includes(tag.key))
+      ) ?? [],
   };
 }

+ 2 - 2
static/app/views/metrics/queryBuilder.tsx

@@ -17,8 +17,8 @@ import {
   getDefaultAggregate,
   isAllowedOp,
   isCustomMetric,
+  isSpanDuration,
   isSpanMeasurement,
-  isSpanSelfTime,
   isTransactionDuration,
   isTransactionMeasurement,
 } from 'sentry/utils/metrics';
@@ -47,7 +47,7 @@ const isVisibleTransactionMetric = (metric: MetricMeta) =>
   isTransactionDuration(metric) || isTransactionMeasurement(metric);
 
 const isVisibleSpanMetric = (metric: MetricMeta) =>
-  isSpanSelfTime(metric) || isSpanMeasurement(metric);
+  isSpanDuration(metric) || isSpanMeasurement(metric);
 
 const isShownByDefault = (metric: MetricMeta) =>
   isCustomMetric(metric) ||