From 9fb98e3c322a480c19831ae42730998631bbaf0c Mon Sep 17 00:00:00 2001 From: Andrey Avtomonov <7889985+andreybavt@users.noreply.github.com> Date: Mon, 11 May 2026 19:39:00 +0200 Subject: [PATCH] fix: write canonical historic sql setup filters --- packages/cli/src/setup-databases.test.ts | 28 ++++++++++++++++++++---- packages/cli/src/setup-databases.ts | 20 +++++++++++++++-- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/packages/cli/src/setup-databases.test.ts b/packages/cli/src/setup-databases.test.ts index 97cf58e7..db291c05 100644 --- a/packages/cli/src/setup-databases.test.ts +++ b/packages/cli/src/setup-databases.test.ts @@ -1230,10 +1230,17 @@ describe('setup databases step', () => { enabled: true, dialect: 'snowflake', windowDays: 30, - serviceAccountUserPatterns: ['^svc_'], + filters: { + dropTrivialProbes: true, + serviceAccounts: { + patterns: ['^svc_'], + mode: 'exclude', + }, + }, redactionPatterns: ['(?i)secret'], }, }); + expect(config.connections.snowflake.historicSql).not.toHaveProperty('serviceAccountUserPatterns'); expect(config.ingest.adapters).toContain('historic-sql'); }); @@ -1272,12 +1279,19 @@ describe('setup databases step', () => { enabled: true, dialect: 'postgres', minExecutions: 12, - serviceAccountUserPatterns: ['^svc_'], + filters: { + dropTrivialProbes: true, + serviceAccounts: { + patterns: ['^svc_'], + mode: 'exclude', + }, + }, }, }); expect(config.connections.warehouse.historicSql).not.toHaveProperty('minCalls'); expect(config.connections.warehouse.historicSql).not.toHaveProperty('windowDays'); expect(config.connections.warehouse.historicSql).not.toHaveProperty('redactionPatterns'); + expect(config.connections.warehouse.historicSql).not.toHaveProperty('serviceAccountUserPatterns'); expect(config.ingest.adapters).toContain('historic-sql'); expect(io.stdout()).toContain('Historic SQL probe...'); expect(io.stdout()).toContain('pg_stat_statements ready'); @@ -1324,10 +1338,13 @@ describe('setup databases step', () => { enabled: true, dialect: 'bigquery', windowDays: 45, - serviceAccountUserPatterns: [], + filters: { + dropTrivialProbes: true, + }, redactionPatterns: [], }, }); + expect(config.connections.analytics.historicSql).not.toHaveProperty('serviceAccountUserPatterns'); expect(config.ingest.adapters).toContain('historic-sql'); }); @@ -1372,9 +1389,12 @@ describe('setup databases step', () => { enabled: true, dialect: 'postgres', minExecutions: 8, - serviceAccountUserPatterns: [], + filters: { + dropTrivialProbes: true, + }, }, }); + expect(config.connections.warehouse.historicSql).not.toHaveProperty('serviceAccountUserPatterns'); }); it('prints a non-blocking Postgres Historic SQL probe failure after connection test succeeds', async () => { diff --git a/packages/cli/src/setup-databases.ts b/packages/cli/src/setup-databases.ts index 79543c93..a5740803 100644 --- a/packages/cli/src/setup-databases.ts +++ b/packages/cli/src/setup-databases.ts @@ -665,12 +665,13 @@ async function maybeApplyHistoricSqlConfig(input: { return { ...input.connection, historicSql: { ...existing, enabled: false, dialect } }; } - const common = { + const common: Record = { ...existing, enabled: true, dialect, - serviceAccountUserPatterns: input.args.historicSqlServiceAccountPatterns ?? [], + filters: historicSqlFiltersForSetup(input.args.historicSqlServiceAccountPatterns), }; + delete common.serviceAccountUserPatterns; if (dialect === 'postgres') { return { @@ -692,6 +693,21 @@ async function maybeApplyHistoricSqlConfig(input: { }; } +function historicSqlFiltersForSetup(patterns: string[] | undefined) { + const serviceAccountPatterns = patterns ?? []; + return { + dropTrivialProbes: true, + ...(serviceAccountPatterns.length > 0 + ? { + serviceAccounts: { + patterns: serviceAccountPatterns, + mode: 'exclude' as const, + }, + } + : {}), + }; +} + async function defaultTestConnection(projectDir: string, connectionId: string, io: KtxCliIo): Promise { return await runKtxConnection({ command: 'test', projectDir, connectionId }, io); }