Browse Source

feat(profiling): Make profiling chart compatible with continuous prof… (#75249)

…iling transactions

Because we will have a dedicated transactions based view, we can keep
the chart. So make sure it's compatible with continuous profiling
transactions too.
Tony Xiao 7 months ago
parent
commit
e56a6c6766

+ 7 - 1
static/app/utils/profiling/hooks/useProfileEventsStats.tsx

@@ -11,6 +11,7 @@ interface UseProfileEventsStatsOptions<F> {
   dataset: 'discover' | 'profiles' | 'profileFunctions';
   dataset: 'discover' | 'profiles' | 'profileFunctions';
   referrer: string;
   referrer: string;
   yAxes: readonly F[];
   yAxes: readonly F[];
+  continuousProfilingCompat?: boolean;
   datetime?: PageFilters['datetime'];
   datetime?: PageFilters['datetime'];
   enabled?: boolean;
   enabled?: boolean;
   interval?: string;
   interval?: string;
@@ -18,6 +19,7 @@ interface UseProfileEventsStatsOptions<F> {
 }
 }
 
 
 export function useProfileEventsStats<F extends string>({
 export function useProfileEventsStats<F extends string>({
+  continuousProfilingCompat,
   dataset,
   dataset,
   datetime,
   datetime,
   interval,
   interval,
@@ -36,7 +38,11 @@ export function useProfileEventsStats<F extends string>({
   }
   }
 
 
   if (dataset === 'discover') {
   if (dataset === 'discover') {
-    query = `has:profile.id ${query ? `(${query})` : ''}`;
+    if (continuousProfilingCompat) {
+      query = `(has:profile.id OR (has:profiler.id has:thread.id)) ${query ? `(${query})` : ''}`;
+    } else {
+      query = `has:profile.id ${query ? `(${query})` : ''}`;
+    }
   }
   }
 
 
   const path = `/organizations/${organization.slug}/events-stats/`;
   const path = `/organizations/${organization.slug}/events-stats/`;

+ 6 - 3
static/app/views/profiling/content.tsx

@@ -403,15 +403,17 @@ function ProfilingTransactionsContent(props: ProfilingTabContentProps) {
   const cursor = decodeScalar(location.query.cursor);
   const cursor = decodeScalar(location.query.cursor);
   const query = decodeScalar(location.query.query, '');
   const query = decodeScalar(location.query.query, '');
 
 
+  const continuousProfilingCompat = organization.features.includes(
+    'continuous-profiling-compat'
+  );
+
   const transactions = useProfileEvents<FieldType>({
   const transactions = useProfileEvents<FieldType>({
     cursor,
     cursor,
     fields,
     fields,
     query,
     query,
     sort,
     sort,
     referrer: 'api.profiling.landing-table',
     referrer: 'api.profiling.landing-table',
-    continuousProfilingCompat: organization.features.includes(
-      'continuous-profiling-compat'
-    ),
+    continuousProfilingCompat,
   });
   });
 
 
   const transactionsError =
   const transactionsError =
@@ -464,6 +466,7 @@ function ProfilingTransactionsContent(props: ProfilingTabContentProps) {
                 referrer="api.profiling.landing-chart"
                 referrer="api.profiling.landing-chart"
                 userQuery={query}
                 userQuery={query}
                 selection={selection}
                 selection={selection}
+                continuousProfilingCompat={continuousProfilingCompat}
               />
               />
               <WidgetsContainer>
               <WidgetsContainer>
                 <LandingWidgetSelector
                 <LandingWidgetSelector

+ 3 - 0
static/app/views/profiling/landing/profilesChartWidget.tsx

@@ -21,6 +21,7 @@ import {
 interface ProfilesChartWidgetProps {
 interface ProfilesChartWidgetProps {
   chartHeight: number;
   chartHeight: number;
   referrer: string;
   referrer: string;
+  continuousProfilingCompat?: boolean;
   header?: ReactNode;
   header?: ReactNode;
   selection?: PageFilters;
   selection?: PageFilters;
   userQuery?: string;
   userQuery?: string;
@@ -31,6 +32,7 @@ const SERIES_ORDER = ['p99()', 'p95()', 'p75()', 'p50()'] as const;
 
 
 export function ProfilesChartWidget({
 export function ProfilesChartWidget({
   chartHeight,
   chartHeight,
+  continuousProfilingCompat,
   header,
   header,
   referrer,
   referrer,
   selection,
   selection,
@@ -45,6 +47,7 @@ export function ProfilesChartWidget({
     query: userQuery,
     query: userQuery,
     referrer,
     referrer,
     yAxes: SERIES_ORDER,
     yAxes: SERIES_ORDER,
+    continuousProfilingCompat,
   });
   });
 
 
   const series: Series[] = useMemo(() => {
   const series: Series[] = useMemo(() => {