Skip to content

Commit 55b281c

Browse files
mjqclaude
andcommitted
feat(profiling): Use spans data source for profiles search bar in EAP mode
When useTransactionSummaryEAP is enabled, use TraceItemSearchQueryBuilder with the spans data source instead of TransactionSearchQueryBuilder. Also pass dataSource: 'spans' to useAggregateFlamegraphQuery and use is_transaction:true instead of event.type:transaction in the query filter. Follows the same pattern established in transactionEvents/content.tsx. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 5d5951a commit 55b281c

2 files changed

Lines changed: 46 additions & 8 deletions

File tree

static/app/views/performance/transactionSummary/transactionProfiles/content.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ export function TransactionProfilesContent(props: TransactionProfilesContentProp
9595

9696
const {data, status} = useAggregateFlamegraphQuery({
9797
query,
98+
...(isEAP ? {dataSource: 'spans' as const} : {}),
9899
});
99100

100101
const [frameFilter, setFrameFilter] = useLocalStorageState<

static/app/views/performance/transactionSummary/transactionProfiles/index.tsx

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import * as Layout from 'sentry/components/layouts/thirds';
55
import {DatePageFilter} from 'sentry/components/pageFilters/date/datePageFilter';
66
import {EnvironmentPageFilter} from 'sentry/components/pageFilters/environment/environmentPageFilter';
77
import {PageFilterBar} from 'sentry/components/pageFilters/pageFilterBar';
8+
import {useSpanSearchQueryBuilderProps} from 'sentry/components/performance/spanSearchQueryBuilder';
89
import {TransactionSearchQueryBuilder} from 'sentry/components/performance/transactionSearchQueryBuilder';
910
import {DataCategory} from 'sentry/types/core';
1011
import {isAggregateField} from 'sentry/utils/discover/fields';
@@ -16,10 +17,33 @@ import {useMaxPickableDays} from 'sentry/utils/useMaxPickableDays';
1617
import {useNavigate} from 'sentry/utils/useNavigate';
1718
import {useOrganization} from 'sentry/utils/useOrganization';
1819
import {useProjects} from 'sentry/utils/useProjects';
20+
import {TraceItemSearchQueryBuilder} from 'sentry/views/explore/components/traceItemSearchQueryBuilder';
21+
import {useTransactionSummaryEAP} from 'sentry/views/performance/eap/useTransactionSummaryEAP';
1922
import {redirectToPerformanceHomepage} from 'sentry/views/performance/transactionSummary/pageLayout';
2023

2124
import {TransactionProfilesContent} from './content';
2225

26+
function EAPSearchBar({
27+
projects,
28+
initialQuery,
29+
onSearch,
30+
}: {
31+
initialQuery: string;
32+
onSearch: (query: string) => void;
33+
projects: number[];
34+
}) {
35+
const {spanSearchQueryBuilderProps} = useSpanSearchQueryBuilderProps({
36+
projects,
37+
initialQuery,
38+
onSearch,
39+
searchSource: 'transaction_profiles',
40+
});
41+
42+
return (
43+
<TraceItemSearchQueryBuilder {...spanSearchQueryBuilderProps} disallowFreeText />
44+
);
45+
}
46+
2347
interface ProfilesProps {
2448
transaction: string;
2549
}
@@ -28,6 +52,7 @@ function Profiles({transaction}: ProfilesProps) {
2852
const navigate = useNavigate();
2953
const location = useLocation();
3054
const {projects} = useProjects();
55+
const shouldUseEAP = useTransactionSummaryEAP();
3156

3257
const project = projects.find(p => p.id === location.query.project);
3358

@@ -38,7 +63,11 @@ function Profiles({transaction}: ProfilesProps) {
3863

3964
const query = useMemo(() => {
4065
const conditions = new MutableSearch(rawQuery);
41-
conditions.setFilterValues('event.type', ['transaction']);
66+
if (shouldUseEAP) {
67+
conditions.setFilterValues('is_transaction', ['true']);
68+
} else {
69+
conditions.setFilterValues('event.type', ['transaction']);
70+
}
4271
conditions.setFilterValues('transaction', [transaction]);
4372

4473
Object.keys(conditions.filters).forEach(field => {
@@ -48,7 +77,7 @@ function Profiles({transaction}: ProfilesProps) {
4877
});
4978

5079
return conditions.formatString();
51-
}, [transaction, rawQuery]);
80+
}, [transaction, rawQuery, shouldUseEAP]);
5281

5382
const handleSearch = useCallback(
5483
(searchQuery: string) => {
@@ -81,12 +110,20 @@ function Profiles({transaction}: ProfilesProps) {
81110
<EnvironmentPageFilter />
82111
<DatePageFilter {...datePageFilterProps} />
83112
</PageFilterBar>
84-
<TransactionSearchQueryBuilder
85-
projects={projectIds}
86-
initialQuery={rawQuery}
87-
onSearch={handleSearch}
88-
searchSource="transaction_profiles"
89-
/>
113+
{shouldUseEAP ? (
114+
<EAPSearchBar
115+
projects={projectIds ?? []}
116+
initialQuery={rawQuery}
117+
onSearch={handleSearch}
118+
/>
119+
) : (
120+
<TransactionSearchQueryBuilder
121+
projects={projectIds}
122+
initialQuery={rawQuery}
123+
onSearch={handleSearch}
124+
searchSource="transaction_profiles"
125+
/>
126+
)}
90127
</FilterActions>
91128
<TransactionProfilesContent query={query} transaction={transaction} />
92129
</StyledMain>

0 commit comments

Comments
 (0)