Skip to content

Commit 1d1e45c

Browse files
carderneTrigger.dev RepoOps
authored andcommitted
feat(webapp,clickhouse): add logs search dual-writer
Mono-RevId: d8b73d93e54f38fa91e02d9eacf172665dde4d0a
1 parent 75623a1 commit 1d1e45c

9 files changed

Lines changed: 1052 additions & 309 deletions

File tree

‎apps/webapp/app/env.server.ts‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2245,6 +2245,11 @@ const EnvironmentSchema = z
22452245
.default(1_500_000_000),
22462246
LOGS_SEARCH_PROJECTOR_MAX_THREADS: z.coerce.number().int().min(1).max(8).default(2),
22472247

2248+
LOGS_SEARCH_DUAL_WRITE_ACTIVE: z.enum(["off", "by-id", "on"]).default("off"),
2249+
LOGS_SEARCH_DUAL_WRITE_ORGANIZATION_IDS: z.string().default(""),
2250+
LOGS_SEARCH_DUAL_WRITE_MAX_CONCURRENCY: z.coerce.number().int().min(1).max(10).default(2),
2251+
LOGS_SEARCH_DUAL_WRITE_MAX_PENDING: z.coerce.number().int().min(1).max(100).default(4),
2252+
22482253
// Logs list pagination tuning.
22492254
LOGS_LIST_DEFAULT_PAGE_SIZE: z.coerce.number().int().positive().default(50),
22502255
LOGS_LIST_MAX_PAGE_SIZE: z.coerce.number().int().positive().default(100),

‎apps/webapp/app/services/clickhouse/clickhouseFactory.server.ts‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -780,6 +780,12 @@ function getEventsClickhouseClient(): ClickHouse {
780780
return defaultEventsClickhouseClient;
781781
}
782782

783+
const logsSearchDualWriteOrganizationIds = new Set(
784+
env.LOGS_SEARCH_DUAL_WRITE_ORGANIZATION_IDS.split(",")
785+
.map((organizationId) => organizationId.trim())
786+
.filter(Boolean)
787+
);
788+
783789
function buildEventRepository(store: string, clickhouse: ClickHouse): ClickhouseEventRepository {
784790
switch (store) {
785791
case "clickhouse": {
@@ -806,6 +812,10 @@ function buildEventRepository(store: string, clickhouse: ClickHouse): Clickhouse
806812
otlpMetricsBatchSize: env.METRICS_CLICKHOUSE_BATCH_SIZE,
807813
otlpMetricsFlushInterval: env.METRICS_CLICKHOUSE_FLUSH_INTERVAL_MS,
808814
otlpMetricsMaxConcurrency: env.METRICS_CLICKHOUSE_MAX_CONCURRENCY,
815+
logsSearchDualWriteActive: "off",
816+
logsSearchDualWriteOrganizationIds,
817+
logsSearchDualWriteMaxConcurrency: env.LOGS_SEARCH_DUAL_WRITE_MAX_CONCURRENCY,
818+
logsSearchDualWriteMaxPending: env.LOGS_SEARCH_DUAL_WRITE_MAX_PENDING,
809819
version: "v1",
810820
});
811821
}
@@ -833,6 +843,10 @@ function buildEventRepository(store: string, clickhouse: ClickHouse): Clickhouse
833843
otlpMetricsBatchSize: env.METRICS_CLICKHOUSE_BATCH_SIZE,
834844
otlpMetricsFlushInterval: env.METRICS_CLICKHOUSE_FLUSH_INTERVAL_MS,
835845
otlpMetricsMaxConcurrency: env.METRICS_CLICKHOUSE_MAX_CONCURRENCY,
846+
logsSearchDualWriteActive: env.LOGS_SEARCH_DUAL_WRITE_ACTIVE,
847+
logsSearchDualWriteOrganizationIds,
848+
logsSearchDualWriteMaxConcurrency: env.LOGS_SEARCH_DUAL_WRITE_MAX_CONCURRENCY,
849+
logsSearchDualWriteMaxPending: env.LOGS_SEARCH_DUAL_WRITE_MAX_PENDING,
836850
version: "v2",
837851
});
838852
}

‎apps/webapp/app/utils/logSearch.ts‎

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { normalizeSearchText } from "@trigger.dev/core/utils";
2+
13
export const MIN_LOGS_SEARCH_LENGTH = 3;
24
export const LOGS_SEARCH_RETRY_OVERFETCH_FACTOR = 4;
35
const DAY_MS = 24 * 60 * 60 * 1000;
@@ -56,11 +58,6 @@ export function escapeClickHouseLike(value: string): string {
5658
return value.replace(/\\/g, "\\\\").replace(/%/g, "\\%").replace(/_/g, "\\_");
5759
}
5860

59-
// Must match the scheduled ClickHouse projector normalization.
6061
export function normalizeLogsSearchTerm(value: string): string {
61-
return value
62-
.toLowerCase()
63-
.replace(/[^\p{L}\p{N}_./:@+-]+/gu, " ")
64-
.replace(/\s*:\s*/g, ":")
65-
.trim();
62+
return normalizeSearchText(value).trim();
6663
}

0 commit comments

Comments
 (0)