Skip to content

Commit 5e6fb9d

Browse files
committed
pr suggestion updates
1 parent 1fa7edd commit 5e6fb9d

18 files changed

Lines changed: 101 additions & 102 deletions

packages/api/src/controllers/sources.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { SourceKind, SourceSchema } from '@hyperdx/common-utils/dist/types';
22

33
import {
4-
ISource,
4+
ISourceInput,
55
LogSource,
66
MetricSource,
77
SessionSource,
@@ -42,7 +42,7 @@ type DistributiveOmit<T, K extends PropertyKey> = T extends T
4242

4343
export function createSource(
4444
team: string,
45-
source: DistributiveOmit<ISource, 'id'>,
45+
source: DistributiveOmit<ISourceInput, 'id'>,
4646
) {
4747
// @ts-expect-error The create method has incompatible type signatures but is actually safe
4848
return getModelForKind(source.kind)?.create({ ...source, team });
@@ -51,7 +51,7 @@ export function createSource(
5151
export async function updateSource(
5252
team: string,
5353
sourceId: string,
54-
source: Omit<ISource, 'id'>,
54+
source: DistributiveOmit<ISourceInput, 'id'>,
5555
) {
5656
const existing = await Source.findOne({ _id: sourceId, team });
5757
if (!existing) return null;

packages/api/src/models/source.ts

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export const ISourceSchema = z.discriminatedUnion('kind', [
3535
}),
3636
]);
3737
export type ISource = z.infer<typeof ISourceSchema>;
38+
export type ISourceInput = z.input<typeof ISourceSchema>;
3839

3940
export type SourceDocument = mongoose.HydratedDocument<ISource>;
4041

@@ -116,11 +117,10 @@ export const Source = SourceModel as unknown as mongoose.Model<ISource>;
116117
// --------------------------
117118
// Log discriminator
118119
// --------------------------
119-
export const LogSource = Source.discriminator<
120-
Extract<ISource, { kind: SourceKind.Log }>
121-
>(
120+
type ILogSource = Extract<ISource, { kind: SourceKind.Log }>;
121+
export const LogSource = Source.discriminator<ILogSource>(
122122
SourceKind.Log,
123-
new Schema({
123+
new Schema<ILogSource>({
124124
defaultTableSelectExpression: String,
125125
serviceNameExpression: String,
126126
severityTextExpression: String,
@@ -151,11 +151,10 @@ export const LogSource = Source.discriminator<
151151
// --------------------------
152152
// Trace discriminator
153153
// --------------------------
154-
export const TraceSource = Source.discriminator<
155-
Extract<ISource, { kind: SourceKind.Trace }>
156-
>(
154+
type ITraceSource = Extract<ISource, { kind: SourceKind.Trace }>;
155+
export const TraceSource = Source.discriminator<ITraceSource>(
157156
SourceKind.Trace,
158-
new Schema({
157+
new Schema<ITraceSource>({
159158
defaultTableSelectExpression: String,
160159
durationExpression: String,
161160
durationPrecision: Number,
@@ -191,11 +190,10 @@ export const TraceSource = Source.discriminator<
191190
// --------------------------
192191
// Session discriminator
193192
// --------------------------
194-
export const SessionSource = Source.discriminator<
195-
Extract<ISource, { kind: SourceKind.Session }>
196-
>(
193+
type ISessionSource = Extract<ISource, { kind: SourceKind.Session }>;
194+
export const SessionSource = Source.discriminator<ISessionSource>(
197195
SourceKind.Session,
198-
new Schema({
196+
new Schema<Extract<ISource, { kind: SourceKind.Session }>>({
199197
traceSourceId: String,
200198
resourceAttributesExpression: String,
201199
}),
@@ -204,11 +202,10 @@ export const SessionSource = Source.discriminator<
204202
// --------------------------
205203
// Metric discriminator
206204
// --------------------------
207-
export const MetricSource = Source.discriminator<
208-
Extract<ISource, { kind: SourceKind.Metric }>
209-
>(
205+
type IMetricSource = Extract<ISource, { kind: SourceKind.Metric }>;
206+
export const MetricSource = Source.discriminator<IMetricSource>(
210207
SourceKind.Metric,
211-
new Schema({
208+
new Schema<Extract<ISource, { kind: SourceKind.Metric }>>({
212209
metricTables: {
213210
type: {
214211
[MetricsDataType.Gauge]: String,

packages/api/src/routers/api/sources.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {
2-
SourceKind,
32
SourceSchema,
43
SourceSchemaNoId,
54
} from '@hyperdx/common-utils/dist/types';
@@ -46,8 +45,8 @@ router.post(
4645

4746
const source = await createSource(teamId.toString(), {
4847
...req.body,
49-
team: teamId,
50-
} as any);
48+
team: teamId.toJSON(),
49+
});
5150

5251
res.json(source);
5352
} catch (e) {
@@ -70,8 +69,8 @@ router.put(
7069

7170
const source = await updateSource(teamId.toString(), req.params.id, {
7271
...req.body,
73-
team: teamId,
74-
} as any);
72+
team: teamId.toJSON(),
73+
});
7574

7675
if (!source) {
7776
res.status(404).send('Source not found');

packages/api/src/tasks/usageStats.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,7 @@ function extractTableNames(source: SourceDocument): string[] {
3535
const tables: string[] = [];
3636
if (source.kind === SourceKind.Metric) {
3737
// Cast to TMetricSource to access metricTables after kind narrowing
38-
const metricSource = source.toJSON({
39-
getters: true,
40-
}) as unknown as TMetricSource;
38+
const metricSource = source;
4139
for (const key of Object.values(MetricsDataType)) {
4240
const metricTable = metricSource.metricTables?.[key];
4341
if (!metricTable) continue;

packages/app/src/DBSearchPage.tsx

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -664,6 +664,7 @@ function useSearchedConfigToChartConfig(
664664
) {
665665
const { data: sourceObj, isLoading } = useSource({
666666
id: source,
667+
kinds: [SourceKind.Log, SourceKind.Trace],
667668
});
668669
const defaultOrderBy = useDefaultOrderBy(source);
669670

@@ -674,10 +675,7 @@ function useSearchedConfigToChartConfig(
674675
select:
675676
select ||
676677
defaultSearchConfig?.select ||
677-
(isLogSource(sourceObj) || isTraceSource(sourceObj)
678-
? sourceObj.defaultTableSelectExpression
679-
: '') ||
680-
'',
678+
sourceObj.defaultTableSelectExpression,
681679
from: sourceObj.from,
682680
source: sourceObj.id,
683681
...(isLogSource(sourceObj) && sourceObj.tableFilterExpression != null
@@ -695,10 +693,7 @@ function useSearchedConfigToChartConfig(
695693
where: where ?? '',
696694
whereLanguage: whereLanguage ?? 'sql',
697695
timestampValueExpression: sourceObj.timestampValueExpression,
698-
implicitColumnExpression:
699-
isLogSource(sourceObj) || isTraceSource(sourceObj)
700-
? sourceObj.implicitColumnExpression
701-
: undefined,
696+
implicitColumnExpression: sourceObj.implicitColumnExpression,
702697
connection: sourceObj.connection,
703698
displayType: DisplayType.Search,
704699
orderBy: orderBy || defaultSearchConfig?.orderBy || defaultOrderBy,
@@ -791,23 +786,21 @@ function optimizeDefaultOrderBy(
791786
}
792787

793788
export function useDefaultOrderBy(sourceID: string | undefined | null) {
794-
const { data: source } = useSource({ id: sourceID });
789+
const { data: source } = useSource({
790+
id: sourceID,
791+
kinds: [SourceKind.Log, SourceKind.Trace],
792+
});
795793
const { data: tableMetadata } = useTableMetadata(tcFromSource(source));
796794

797795
// When source changes, make sure select and orderby fields are set to default
798796
return useMemo(() => {
799797
// If no source, return undefined so that the orderBy is not set incorrectly
800798
if (!source) return undefined;
801-
const trimmedOrderBy =
802-
isLogSource(source) || isTraceSource(source)
803-
? source.orderByExpression?.trim()
804-
: undefined;
799+
const trimmedOrderBy = source.orderByExpression?.trim();
805800
if (trimmedOrderBy) return trimmedOrderBy;
806801
return optimizeDefaultOrderBy(
807802
source?.timestampValueExpression ?? '',
808-
isLogSource(source) || isTraceSource(source)
809-
? source.displayedTimestampValueExpression
810-
: undefined,
803+
source.displayedTimestampValueExpression,
811804
tableMetadata?.sorting_key,
812805
);
813806
}, [source, tableMetadata]);
@@ -846,6 +839,7 @@ function DBSearchPage() {
846839
);
847840
const { data: searchedSource } = useSource({
848841
id: searchedConfig.source,
842+
kinds: [SourceKind.Log, SourceKind.Trace],
849843
});
850844

851845
const [analysisMode, setAnalysisMode] = useQueryState(

packages/app/src/KubernetesDashboardPage.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,11 +1051,11 @@ function KubernetesDashboardPage() {
10511051

10521052
const { data: logSource } = useSource({
10531053
id: logSourceId,
1054-
kind: SourceKind.Log,
1054+
kinds: [SourceKind.Log],
10551055
});
10561056
const { data: metricSource } = useSource({
10571057
id: metricSourceId,
1058-
kind: SourceKind.Metric,
1058+
kinds: [SourceKind.Metric],
10591059
});
10601060

10611061
const { control } = useForm({

packages/app/src/ServicesDashboardPage.tsx

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,10 @@ function ServiceSelectControlled({
150150
dateRange: [Date, Date];
151151
onCreate?: () => void;
152152
} & UseControllerProps<any>) {
153-
const { data: source } = useSource({ id: sourceId });
153+
const { data: source } = useSource({
154+
id: sourceId,
155+
kinds: [SourceKind.Trace],
156+
});
154157
const { expressions } = useServiceDashboardExpressions({ source });
155158

156159
const queriedConfig = {
@@ -352,7 +355,10 @@ function HttpTab({
352355
searchedTimeRange: [Date, Date];
353356
appliedConfig: AppliedConfig;
354357
}) {
355-
const { data: source } = useSource({ id: appliedConfig.source });
358+
const { data: source } = useSource({
359+
id: appliedConfig.source,
360+
kinds: [SourceKind.Trace],
361+
});
356362
const { expressions } = useServiceDashboardExpressions({ source });
357363

358364
const [reqChartType, setReqChartType] = useQueryState(
@@ -850,7 +856,10 @@ function DatabaseTab({
850856
searchedTimeRange: [Date, Date];
851857
appliedConfig: AppliedConfig;
852858
}) {
853-
const { data: source } = useSource({ id: appliedConfig.source });
859+
const { data: source } = useSource({
860+
id: appliedConfig.source,
861+
kinds: [SourceKind.Trace],
862+
});
854863
const { expressions } = useServiceDashboardExpressions({ source });
855864

856865
const [chartType, setChartType] = useState<'table' | 'list'>('list');
@@ -1326,7 +1335,10 @@ function ErrorsTab({
13261335
searchedTimeRange: [Date, Date];
13271336
appliedConfig: AppliedConfig;
13281337
}) {
1329-
const { data: source } = useSource({ id: appliedConfig.source });
1338+
const { data: source } = useSource({
1339+
id: appliedConfig.source,
1340+
kinds: [SourceKind.Trace],
1341+
});
13301342
const { expressions } = useServiceDashboardExpressions({ source });
13311343

13321344
return (

packages/app/src/SessionsPage.tsx

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -249,13 +249,12 @@ export default function SessionsPage() {
249249
const sourceId = useWatch({ control, name: 'source' });
250250
const { data: sessionSource, isPending: isSessionSourceLoading } = useSource({
251251
id: sourceId,
252+
kinds: [SourceKind.Session],
252253
});
253254

254255
const { data: traceTrace } = useSource({
255-
id:
256-
sessionSource?.kind === SourceKind.Session
257-
? sessionSource.traceSourceId
258-
: undefined,
256+
id: sessionSource?.traceSourceId,
257+
kinds: [SourceKind.Trace],
259258
});
260259

261260
// Get all sources and select the first session type source by default
@@ -379,7 +378,7 @@ export default function SessionsPage() {
379378

380379
const { data: tableData, isLoading: isSessionsLoading } = useSessions({
381380
dateRange: searchedTimeRange,
382-
sessionSource: sessionSource,
381+
sessionSource,
383382
traceSource: traceTrace,
384383
// TODO: if selectedSession is not null, we should filter by that session id
385384
where: appliedConfig.where as SearchCondition,
@@ -396,9 +395,7 @@ export default function SessionsPage() {
396395
</Head>
397396
{selectedSession != null &&
398397
traceTrace != null &&
399-
traceTrace.kind === SourceKind.Trace &&
400398
sessionSource != null &&
401-
sessionSource.kind === SourceKind.Session &&
402399
targetSession && (
403400
<SessionSidePanel
404401
key={`session-page-session-side-panel-${selectedSession.id}`}
@@ -477,7 +474,7 @@ export default function SessionsPage() {
477474
</Group>
478475
) : (
479476
<>
480-
{sessionSource && sessionSource.kind !== SourceKind.Session && (
477+
{sessionSource && (
481478
<Alert
482479
icon={<IconInfoCircleFilled size={16} />}
483480
color="gray"

packages/app/src/components/DBInfraPanel.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ export default ({
216216
: undefined;
217217
const { data: metricSource } = useSource({
218218
id: metricSourceId,
219-
kind: SourceKind.Metric,
219+
kinds: [SourceKind.Metric],
220220
});
221221

222222
const podUid = rowData?.__hdx_resource_attributes['k8s.pod.uid'];

packages/app/src/components/DBRowSidePanel.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export type RowSidePanelContextProps = {
7474
dbSqlRowTableConfig?: BuilderChartConfigWithDateRange;
7575
isChildModalOpen?: boolean;
7676
setChildModalOpen?: (open: boolean) => void;
77-
source?: TSource;
77+
source?: TLogSource | TTraceSource;
7878
};
7979

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

0 commit comments

Comments
 (0)