diff --git a/.changeset/modern-dryers-fail.md b/.changeset/modern-dryers-fail.md new file mode 100644 index 00000000..00300704 --- /dev/null +++ b/.changeset/modern-dryers-fail.md @@ -0,0 +1,7 @@ +--- +"@hyperdx/common-utils": minor +"@hyperdx/api": minor +"@hyperdx/app": minor +--- + +feat: new team setting for number of filters to fetch diff --git a/packages/api/src/models/team.ts b/packages/api/src/models/team.ts index 394993ab..4d6b6201 100644 --- a/packages/api/src/models/team.ts +++ b/packages/api/src/models/team.ts @@ -41,6 +41,7 @@ export default mongoose.model( queryTimeout: Number, fieldMetadataDisabled: Boolean, parallelizeWhenPossible: Boolean, + filterKeysFetchLimit: Number, }, { timestamps: true, diff --git a/packages/app/src/components/TeamSettings/TeamQueryConfigSection.tsx b/packages/app/src/components/TeamSettings/TeamQueryConfigSection.tsx index 78b82f74..9e80bbc6 100644 --- a/packages/app/src/components/TeamSettings/TeamQueryConfigSection.tsx +++ b/packages/app/src/components/TeamSettings/TeamQueryConfigSection.tsx @@ -19,7 +19,11 @@ import { IconHelpCircle, IconPencil } from '@tabler/icons-react'; import api from '@/api'; import SelectControlled from '@/components/SelectControlled'; -import { DEFAULT_QUERY_TIMEOUT, DEFAULT_SEARCH_ROW_LIMIT } from '@/defaults'; +import { + DEFAULT_FILTER_KEYS_FETCH_LIMIT, + DEFAULT_QUERY_TIMEOUT, + DEFAULT_SEARCH_ROW_LIMIT, +} from '@/defaults'; import { useBrandDisplayName } from '@/theme/ThemeProvider'; type ClickhouseSettingType = 'number' | 'boolean'; @@ -262,6 +266,17 @@ export default function TeamQueryConfigSection() { min={0} displayValue={displayValueWithUnit('rows')} /> + ({ queryKey: [ 'useMetadata.useGetKeyValues', ...chartConfigsArr.map(cc => ({ ...cc })), ...keys, disableRowLimit, + maxKeys, ], queryFn: async ({ signal }) => { return ( @@ -243,7 +249,7 @@ export function useMultipleGetKeyValues( : undefined; return metadata.getKeyValuesWithMVs({ chartConfig, - keys: keys.slice(0, 20), // Limit to 20 keys for now, otherwise request fails (max header size) + keys: keys.slice(0, maxKeys), limit, disableRowLimit, source, @@ -256,7 +262,7 @@ export function useMultipleGetKeyValues( staleTime: 1000 * 60 * 5, // Cache every 5 min placeholderData: keepPreviousData, ...options, - enabled: !!enabled && !!keys.length && !isLoadingSources, + enabled: !!enabled && !!keys.length && !isLoadingSources && !isLoadingMe, }); return { diff --git a/packages/common-utils/src/types.ts b/packages/common-utils/src/types.ts index 1f80383d..d6395f7d 100644 --- a/packages/common-utils/src/types.ts +++ b/packages/common-utils/src/types.ts @@ -786,6 +786,7 @@ export const TeamClickHouseSettingsSchema = z.object({ queryTimeout: z.number().optional(), metadataMaxRowsToRead: z.number().optional(), parallelizeWhenPossible: z.boolean().optional(), + filterKeysFetchLimit: z.number().optional(), }); export type TeamClickHouseSettings = z.infer< typeof TeamClickHouseSettingsSchema