Skip to content

Commit 9c67037

Browse files
committed
Separate ClickHouse client for Query/Metrics (falls back to default)
1 parent 7e90a3f commit 9c67037

File tree

3 files changed

+35
-3
lines changed

3 files changed

+35
-3
lines changed

apps/webapp/app/env.server.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1199,6 +1199,10 @@ const EnvironmentSchema = z
11991199
QUERY_FEATURE_ENABLED: z.string().default("1"),
12001200

12011201
// Query page ClickHouse limits (for TSQL queries)
1202+
QUERY_CLICKHOUSE_URL: z
1203+
.string()
1204+
.optional()
1205+
.transform((v) => v ?? process.env.CLICKHOUSE_URL),
12021206
QUERY_CLICKHOUSE_MAX_EXECUTION_TIME: z.coerce.number().int().default(10),
12031207
QUERY_CLICKHOUSE_MAX_MEMORY_USAGE: z.coerce.number().int().default(1_073_741_824), // 1GB in bytes
12041208
QUERY_CLICKHOUSE_MAX_AST_ELEMENTS: z.coerce.number().int().default(4_000_000),

apps/webapp/app/services/clickhouseInstance.server.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ function initializeClickhouseClient() {
1616
const logsQuerySettings = {
1717
list: {
1818
max_memory_usage: env.CLICKHOUSE_LOGS_LIST_MAX_MEMORY_USAGE.toString(),
19-
max_bytes_before_external_sort: env.CLICKHOUSE_LOGS_LIST_MAX_BYTES_BEFORE_EXTERNAL_SORT.toString(),
19+
max_bytes_before_external_sort:
20+
env.CLICKHOUSE_LOGS_LIST_MAX_BYTES_BEFORE_EXTERNAL_SORT.toString(),
2021
max_threads: env.CLICKHOUSE_LOGS_LIST_MAX_THREADS,
2122
...(env.CLICKHOUSE_LOGS_LIST_MAX_ROWS_TO_READ && {
2223
max_rows_to_read: env.CLICKHOUSE_LOGS_LIST_MAX_ROWS_TO_READ.toString(),
@@ -51,3 +52,30 @@ function initializeClickhouseClient() {
5152

5253
return clickhouse;
5354
}
55+
56+
export const queryClickhouseClient = singleton(
57+
"queryClickhouseClient",
58+
initializeQueryClickhouseClient
59+
);
60+
61+
function initializeQueryClickhouseClient() {
62+
if (!env.QUERY_CLICKHOUSE_URL) {
63+
throw new Error("QUERY_CLICKHOUSE_URL is not set");
64+
}
65+
66+
const url = new URL(env.QUERY_CLICKHOUSE_URL);
67+
68+
return new ClickHouse({
69+
url: url.toString(),
70+
name: "query-clickhouse",
71+
keepAlive: {
72+
enabled: env.CLICKHOUSE_KEEP_ALIVE_ENABLED === "1",
73+
idleSocketTtl: env.CLICKHOUSE_KEEP_ALIVE_IDLE_SOCKET_TTL_MS,
74+
},
75+
logLevel: env.CLICKHOUSE_LOG_LEVEL,
76+
compression: {
77+
request: true,
78+
},
79+
maxOpenConnections: env.CLICKHOUSE_MAX_OPEN_CONNECTIONS,
80+
});
81+
}

apps/webapp/app/services/queryService.server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import type { TableSchema, WhereClauseCondition } from "@internal/tsql";
1111
import { z } from "zod";
1212
import { prisma } from "~/db.server";
1313
import { env } from "~/env.server";
14-
import { clickhouseClient } from "./clickhouseInstance.server";
14+
import { queryClickhouseClient } from "./clickhouseInstance.server";
1515
import {
1616
queryConcurrencyLimiter,
1717
DEFAULT_ORG_CONCURRENCY_LIMIT,
@@ -230,7 +230,7 @@ export async function executeQuery<TOut extends z.ZodSchema>(
230230
environment: Object.fromEntries(environments.map((e) => [e.id, e.slug])),
231231
};
232232

233-
const result = await executeTSQL(clickhouseClient.reader, {
233+
const result = await executeTSQL(queryClickhouseClient.reader, {
234234
...baseOptions,
235235
schema: z.record(z.any()),
236236
tableSchema: querySchemas,

0 commit comments

Comments
 (0)