diff --git a/.changeset/funny-dolls-explode.md b/.changeset/funny-dolls-explode.md new file mode 100644 index 00000000..d4d31ee4 --- /dev/null +++ b/.changeset/funny-dolls-explode.md @@ -0,0 +1,5 @@ +--- +"@hyperdx/common-utils": patch +--- + +feat: add session source and SourceKind enum diff --git a/packages/api/src/models/source.ts b/packages/api/src/models/source.ts index 2b0cfea3..fbc7ef04 100644 --- a/packages/api/src/models/source.ts +++ b/packages/api/src/models/source.ts @@ -47,6 +47,7 @@ export const Source = mongoose.model( traceIdExpression: String, spanIdExpression: String, traceSourceId: String, + sessionSourceId: String, durationExpression: String, durationPrecision: Number, diff --git a/packages/api/src/tasks/__tests__/checkAlerts.test.ts b/packages/api/src/tasks/__tests__/checkAlerts.test.ts index 581f4702..15418159 100644 --- a/packages/api/src/tasks/__tests__/checkAlerts.test.ts +++ b/packages/api/src/tasks/__tests__/checkAlerts.test.ts @@ -161,7 +161,7 @@ describe('checkAlerts', () => { }, source: { id: 'fake-source-id' as any, - kind: 'log', + kind: 'log' as any, team: 'team-123' as any, from: { databaseName: 'default', diff --git a/packages/app/src/components/OnboardingModal.tsx b/packages/app/src/components/OnboardingModal.tsx index 8ce9f891..f2f12a67 100644 --- a/packages/app/src/components/OnboardingModal.tsx +++ b/packages/app/src/components/OnboardingModal.tsx @@ -1,4 +1,5 @@ import { useEffect, useState } from 'react'; +import { SourceKind } from '@hyperdx/common-utils/dist/types'; import { Button, Divider, Modal, Text } from '@mantine/core'; import { notifications } from '@mantine/notifications'; @@ -100,7 +101,7 @@ export default function OnboardingModal({ }); const traceSource = await createSourceMutation.mutateAsync({ source: { - kind: 'trace', + kind: SourceKind.Trace, name: 'Demo Traces', connection: 'local', from: { @@ -128,7 +129,7 @@ export default function OnboardingModal({ }); await createSourceMutation.mutateAsync({ source: { - kind: 'log', + kind: SourceKind.Log, name: 'Demo Logs', connection: 'local', from: { diff --git a/packages/app/src/components/SourceForm.tsx b/packages/app/src/components/SourceForm.tsx index f2f80c27..a5266272 100644 --- a/packages/app/src/components/SourceForm.tsx +++ b/packages/app/src/components/SourceForm.tsx @@ -6,7 +6,7 @@ import { UseFormSetValue, UseFormWatch, } from 'react-hook-form'; -import { TSource } from '@hyperdx/common-utils/dist/types'; +import { SourceKind, TSource } from '@hyperdx/common-utils/dist/types'; import { Anchor, Box, @@ -27,6 +27,7 @@ import { useDebouncedCallback } from '@mantine/hooks'; import { notifications } from '@mantine/notifications'; import { SourceSelectControlled } from '@/components/SourceSelect'; +import { IS_SESSIONS_ENABLED } from '@/config'; import { useConnections } from '@/connection'; import { inferTableSourceConfig, @@ -462,6 +463,12 @@ export function TraceTableModelForm({ > + + + ({ defaultValues: { - kind: 'log', + kind: SourceKind.Log, name: defaultName, connection: connections?.[0]?.id, from: { @@ -608,7 +615,7 @@ export function TableSourceForm({ resetField('connection', { defaultValue: connections?.[0]?.id }); }, [connections, resetField]); - const kind = watch('kind'); + const kind: SourceKind = watch('kind'); const createSource = useCreateSource(); const updateSource = useUpdateSource(); @@ -724,25 +731,22 @@ export function TableSourceForm({ render={({ field: { onChange, value } }) => ( onChange(v as 'log' | 'trace')} + onChange={v => onChange(v)} withAsterisk > - - + + + {IS_SESSIONS_ENABLED && ( + + )} )} /> - {kind === 'log' ? ( - - ) : ( + {kind === SourceKind.Trace ? ( + ) : ( + )} ); diff --git a/packages/app/src/config.ts b/packages/app/src/config.ts index 1ba39976..c4fbea78 100644 --- a/packages/app/src/config.ts +++ b/packages/app/src/config.ts @@ -27,3 +27,5 @@ export const IS_LOCAL_MODE = //true; // Features in development export const IS_MTVIEWS_ENABLED = false; + +export const IS_SESSIONS_ENABLED = false || IS_DEV; diff --git a/packages/common-utils/src/types.ts b/packages/common-utils/src/types.ts index 05821a5d..b1585b8e 100644 --- a/packages/common-utils/src/types.ts +++ b/packages/common-utils/src/types.ts @@ -392,6 +392,11 @@ export const ConnectionSchema = z.object({ // -------------------------- // TABLE SOURCES // -------------------------- +export enum SourceKind { + Log = 'log', + Trace = 'trace', + Session = 'session', +} export const SourceSchema = z.object({ from: z.object({ databaseName: z.string(), @@ -401,7 +406,7 @@ export const SourceSchema = z.object({ connection: z.string(), // Common - kind: z.enum(['log', 'trace']), + kind: z.nativeEnum(SourceKind), id: z.string(), name: z.string(), displayedTimestampValueExpression: z.string().optional(), @@ -422,6 +427,9 @@ export const SourceSchema = z.object({ traceIdExpression: z.string().optional(), spanIdExpression: z.string().optional(), + // Sessions + sessionSourceId: z.string().optional(), + // Traces durationExpression: z.string().optional(), durationPrecision: z.number().min(0).max(9).optional(),