Skip to content

Commit 744024c

Browse files
committed
feat: Add custom trace-level attributes above trace waterfall
1 parent af6a8d0 commit 744024c

File tree

13 files changed

+603
-110
lines changed

13 files changed

+603
-110
lines changed

.changeset/honest-mice-applaud.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"@hyperdx/common-utils": patch
3+
"@hyperdx/api": patch
4+
"@hyperdx/app": patch
5+
---
6+
7+
feat: Add custom trace-level attributes above trace waterfall

packages/api/src/models/source.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ export const Source = mongoose.model<ISource>(
6666
statusCodeExpression: String,
6767
statusMessageExpression: String,
6868
spanEventsValueExpression: String,
69+
highlightedAttributeExpressions: {
70+
type: mongoose.Schema.Types.Array,
71+
},
6972

7073
metricTables: {
7174
type: {

packages/app/src/DBSearchPage.tsx

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import {
3434
DisplayType,
3535
Filter,
3636
SourceKind,
37+
TSource,
3738
} from '@hyperdx/common-utils/dist/types';
3839
import {
3940
ActionIcon,
@@ -1091,22 +1092,39 @@ function DBSearchPage() {
10911092
({
10921093
where,
10931094
whereLanguage,
1095+
source,
10941096
}: {
10951097
where: SearchConfig['where'];
10961098
whereLanguage: SearchConfig['whereLanguage'];
1099+
source?: TSource;
10971100
}) => {
1098-
const qParams = new URLSearchParams({
1099-
where: where || searchedConfig.where || '',
1100-
whereLanguage: whereLanguage || 'sql',
1101-
from: searchedTimeRange[0].getTime().toString(),
1102-
to: searchedTimeRange[1].getTime().toString(),
1103-
select: searchedConfig.select || '',
1104-
source: searchedSource?.id || '',
1105-
filters: JSON.stringify(searchedConfig.filters ?? []),
1106-
isLive: 'false',
1107-
liveInterval: interval.toString(),
1108-
});
1109-
return `/search?${qParams.toString()}`;
1101+
// When generating a search based on a different source,
1102+
// filters and select for the current source are not preserved.
1103+
if (source && source.id !== searchedSource?.id) {
1104+
const qParams = new URLSearchParams({
1105+
where: where || '',
1106+
whereLanguage: whereLanguage || 'sql',
1107+
from: searchedTimeRange[0].getTime().toString(),
1108+
to: searchedTimeRange[1].getTime().toString(),
1109+
source: source.id,
1110+
isLive: 'false',
1111+
liveInterval: interval.toString(),
1112+
});
1113+
return `/search?${qParams.toString()}`;
1114+
} else {
1115+
const qParams = new URLSearchParams({
1116+
where: where || searchedConfig.where || '',
1117+
whereLanguage: whereLanguage || 'sql',
1118+
from: searchedTimeRange[0].getTime().toString(),
1119+
to: searchedTimeRange[1].getTime().toString(),
1120+
select: searchedConfig.select || '',
1121+
source: searchedSource?.id || '',
1122+
filters: JSON.stringify(searchedConfig.filters ?? []),
1123+
isLive: 'false',
1124+
liveInterval: interval.toString(),
1125+
});
1126+
return `/search?${qParams.toString()}`;
1127+
}
11101128
},
11111129
[
11121130
interval,
@@ -1829,6 +1847,7 @@ function DBSearchPage() {
18291847
dbSqlRowTableConfig,
18301848
isChildModalOpen: isDrawerChildModalOpen,
18311849
setChildModalOpen: setDrawerChildModalOpen,
1850+
source: searchedSource,
18321851
}}
18331852
config={dbSqlRowTableConfig}
18341853
sourceId={searchedConfig.source}

packages/app/src/components/DBRowOverviewPanel.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,11 @@ export function RowOverviewPanel({
8181
: {};
8282

8383
const _generateSearchUrl = useCallback(
84-
(query?: string, timeRange?: [Date, Date]) => {
84+
(query?: string, queryLanguage?: 'sql' | 'lucene') => {
8585
return (
8686
generateSearchUrl?.({
8787
where: query,
88-
whereLanguage: 'lucene',
88+
whereLanguage: queryLanguage,
8989
}) ?? '/'
9090
);
9191
},
@@ -195,8 +195,6 @@ export function RowOverviewPanel({
195195
<Box px="md">
196196
<NetworkPropertySubpanel
197197
eventAttributes={flattenedEventAttributes}
198-
onPropertyAddClick={onPropertyAddClick}
199-
generateSearchUrl={_generateSearchUrl}
200198
/>
201199
</Box>
202200
</Accordion.Panel>

packages/app/src/components/DBRowSidePanel.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,11 @@ export type RowSidePanelContextProps = {
4747
generateSearchUrl?: ({
4848
where,
4949
whereLanguage,
50+
source,
5051
}: {
5152
where: SearchConfig['where'];
5253
whereLanguage: SearchConfig['whereLanguage'];
54+
source?: TSource;
5355
}) => string;
5456
generateChartUrl?: (config: {
5557
aggFn: string;
@@ -62,6 +64,7 @@ export type RowSidePanelContextProps = {
6264
dbSqlRowTableConfig?: ChartConfigWithDateRange;
6365
isChildModalOpen?: boolean;
6466
setChildModalOpen?: (open: boolean) => void;
67+
source?: TSource;
6568
};
6669

6770
export const RowSidePanelContext = createContext<RowSidePanelContextProps>({});

packages/app/src/components/DBRowSidePanelHeader.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,11 +175,11 @@ export default function DBRowSidePanelHeader({
175175
const maxBoxHeight = 120;
176176

177177
const _generateSearchUrl = useCallback(
178-
(query?: string, timeRange?: [Date, Date]) => {
178+
(query?: string, queryLanguage?: 'sql' | 'lucene') => {
179179
return (
180180
generateSearchUrl?.({
181181
where: query,
182-
whereLanguage: 'lucene',
182+
whereLanguage: queryLanguage,
183183
}) ?? '/'
184184
);
185185
},

0 commit comments

Comments
 (0)