@@ -3,6 +3,7 @@ import {useEffect} from 'react';
3
3
import { defined } from 'sentry/utils' ;
4
4
import { trackAnalytics } from 'sentry/utils/analytics' ;
5
5
import { dedupeArray } from 'sentry/utils/dedupeArray' ;
6
+ import { DiscoverDatasets } from 'sentry/utils/discover/types' ;
6
7
import { MutableSearch } from 'sentry/utils/tokenizeSearch' ;
7
8
import useOrganization from 'sentry/utils/useOrganization' ;
8
9
import {
@@ -16,29 +17,37 @@ import type {Visualize} from 'sentry/views/explore/contexts/pageParamsContext/vi
16
17
import type { AggregatesTableResult } from 'sentry/views/explore/hooks/useExploreAggregatesTable' ;
17
18
import type { SpansTableResult } from 'sentry/views/explore/hooks/useExploreSpansTable' ;
18
19
import type { TracesTableResult } from 'sentry/views/explore/hooks/useExploreTracesTable' ;
20
+ import type { ReadableExploreQueryParts } from 'sentry/views/explore/multiQueryMode/locationUtils' ;
19
21
import { combineConfidenceForSeries } from 'sentry/views/explore/utils' ;
20
22
import type { useSortedTimeSeries } from 'sentry/views/insights/common/queries/useSortedTimeSeries' ;
21
23
import { usePerformanceSubscriptionDetails } from 'sentry/views/performance/newTraceDetails/traceTypeWarnings/usePerformanceSubscriptionDetails' ;
22
24
23
- export function useAnalytics ( {
25
+ export function useTrackAnalytics ( {
24
26
queryType,
25
27
aggregatesTableResult,
26
28
spansTableResult,
27
29
tracesTableResult,
28
30
timeseriesResult,
31
+ dataset,
32
+ title,
33
+ query,
34
+ fields,
35
+ visualizes,
36
+ page_source,
29
37
} : {
30
38
aggregatesTableResult : AggregatesTableResult ;
39
+ dataset : DiscoverDatasets ;
40
+ fields : string [ ] ;
41
+ page_source : 'explore' | 'compare' ;
42
+ query : string ;
31
43
queryType : 'aggregate' | 'samples' | 'traces' ;
32
44
spansTableResult : SpansTableResult ;
33
45
timeseriesResult : ReturnType < typeof useSortedTimeSeries > ;
34
- tracesTableResult : TracesTableResult ;
46
+ visualizes : Visualize [ ] ;
47
+ title ?: string ;
48
+ tracesTableResult ?: TracesTableResult ;
35
49
} ) {
36
50
const organization = useOrganization ( ) ;
37
- const dataset = useExploreDataset ( ) ;
38
- const title = useExploreTitle ( ) ;
39
- const query = useExploreQuery ( ) ;
40
- const fields = useExploreFields ( ) ;
41
- const visualizes = useExploreVisualizes ( ) ;
42
51
43
52
const {
44
53
data : { hasExceededPerformanceUsageLimit} ,
@@ -49,7 +58,7 @@ export function useAnalytics({
49
58
queryType === 'aggregate'
50
59
? aggregatesTableResult . result . error ?. message ?? ''
51
60
: queryType === 'traces'
52
- ? tracesTableResult . result . error ?. message ?? ''
61
+ ? tracesTableResult ? .result . error ?. message ?? ''
53
62
: spansTableResult . result . error ?. message ?? '' ;
54
63
const chartError = timeseriesResult . error ?. message ?? '' ;
55
64
const query_status = tableError || chartError ? 'error' : 'success' ;
@@ -85,6 +94,7 @@ export function useAnalytics({
85
94
title : title || '' ,
86
95
confidences : computeConfidence ( visualizes , timeseriesResult . data ) ,
87
96
has_exceeded_performance_usage_limit : hasExceededPerformanceUsageLimit ,
97
+ page_source,
88
98
} ) ;
89
99
} , [
90
100
organization ,
@@ -103,6 +113,7 @@ export function useAnalytics({
103
113
hasExceededPerformanceUsageLimit ,
104
114
isLoadingSubscriptionDetails ,
105
115
query_status ,
116
+ page_source ,
106
117
] ) ;
107
118
108
119
useEffect ( ( ) => {
@@ -132,6 +143,7 @@ export function useAnalytics({
132
143
title : title || '' ,
133
144
confidences : computeConfidence ( visualizes , timeseriesResult . data ) ,
134
145
has_exceeded_performance_usage_limit : hasExceededPerformanceUsageLimit ,
146
+ page_source,
135
147
} ) ;
136
148
} , [
137
149
organization ,
@@ -149,10 +161,14 @@ export function useAnalytics({
149
161
hasExceededPerformanceUsageLimit ,
150
162
isLoadingSubscriptionDetails ,
151
163
query_status ,
164
+ page_source ,
152
165
] ) ;
153
166
167
+ const tracesTableResultDefined = defined ( tracesTableResult ) ;
168
+
154
169
useEffect ( ( ) => {
155
170
if (
171
+ ! tracesTableResultDefined ||
156
172
queryType !== 'traces' ||
157
173
tracesTableResult . result . isPending ||
158
174
timeseriesResult . isPending ||
@@ -171,7 +187,7 @@ export function useAnalytics({
171
187
'timestamp' ,
172
188
] ;
173
189
const resultMissingRoot =
174
- tracesTableResult . result ?. data ?. data ?. filter ( trace => ! defined ( trace . name ) )
190
+ tracesTableResult ? .result ?. data ?. data ?. filter ( trace => ! defined ( trace . name ) )
175
191
. length ?? 0 ;
176
192
177
193
trackAnalytics ( 'trace.explorer.metadata' , {
@@ -190,6 +206,7 @@ export function useAnalytics({
190
206
title : title || '' ,
191
207
confidences : computeConfidence ( visualizes , timeseriesResult . data ) ,
192
208
has_exceeded_performance_usage_limit : hasExceededPerformanceUsageLimit ,
209
+ page_source,
193
210
} ) ;
194
211
} , [
195
212
organization ,
@@ -199,17 +216,92 @@ export function useAnalytics({
199
216
visualizes ,
200
217
title ,
201
218
queryType ,
202
- tracesTableResult . result . isPending ,
203
- tracesTableResult . result . status ,
204
- tracesTableResult . result . data ?. data ,
219
+ tracesTableResult ? .result . isPending ,
220
+ tracesTableResult ? .result . status ,
221
+ tracesTableResult ? .result . data ?. data ,
205
222
timeseriesResult . isPending ,
206
223
timeseriesResult . data ,
207
224
hasExceededPerformanceUsageLimit ,
208
225
isLoadingSubscriptionDetails ,
209
226
query_status ,
227
+ page_source ,
228
+ tracesTableResultDefined ,
210
229
] ) ;
211
230
}
212
231
232
+ export function useAnalytics ( {
233
+ queryType,
234
+ aggregatesTableResult,
235
+ spansTableResult,
236
+ tracesTableResult,
237
+ timeseriesResult,
238
+ } : {
239
+ aggregatesTableResult : AggregatesTableResult ;
240
+ queryType : 'aggregate' | 'samples' | 'traces' ;
241
+ spansTableResult : SpansTableResult ;
242
+ timeseriesResult : ReturnType < typeof useSortedTimeSeries > ;
243
+ tracesTableResult : TracesTableResult ;
244
+ } ) {
245
+ const dataset = useExploreDataset ( ) ;
246
+ const title = useExploreTitle ( ) ;
247
+ const query = useExploreQuery ( ) ;
248
+ const fields = useExploreFields ( ) ;
249
+ const visualizes = useExploreVisualizes ( ) ;
250
+
251
+ return useTrackAnalytics ( {
252
+ queryType,
253
+ aggregatesTableResult,
254
+ spansTableResult,
255
+ tracesTableResult,
256
+ timeseriesResult,
257
+ dataset,
258
+ title,
259
+ query,
260
+ fields,
261
+ visualizes,
262
+ page_source : 'explore' ,
263
+ } ) ;
264
+ }
265
+
266
+ export function useCompareAnalytics ( {
267
+ query : queryParts ,
268
+ index,
269
+ queryType,
270
+ aggregatesTableResult,
271
+ spansTableResult,
272
+ timeseriesResult,
273
+ } : {
274
+ aggregatesTableResult : AggregatesTableResult ;
275
+ index : number ;
276
+ query : ReadableExploreQueryParts ;
277
+ queryType : 'aggregate' | 'samples' | 'traces' ;
278
+ spansTableResult : SpansTableResult ;
279
+ timeseriesResult : ReturnType < typeof useSortedTimeSeries > ;
280
+ } ) {
281
+ const dataset = DiscoverDatasets . SPANS_EAP_RPC ;
282
+ const query = queryParts . query ;
283
+ const fields = queryParts . fields ;
284
+ const visualizes = queryParts . yAxes . map ( yAxis => {
285
+ return {
286
+ chartType : queryParts . chartType ,
287
+ yAxes : [ yAxis ] ,
288
+ label : String ( index ) ,
289
+ } as Visualize ;
290
+ } ) ;
291
+
292
+ return useTrackAnalytics ( {
293
+ queryType,
294
+ aggregatesTableResult,
295
+ spansTableResult,
296
+ timeseriesResult,
297
+ dataset,
298
+ query,
299
+ fields,
300
+ visualizes,
301
+ page_source : 'compare' ,
302
+ } ) ;
303
+ }
304
+
213
305
function computeConfidence (
214
306
visualizes : Visualize [ ] ,
215
307
data : ReturnType < typeof useSortedTimeSeries > [ 'data' ]
0 commit comments