Skip to content

Commit 1daa52a

Browse files
committed
feat(webapp,tsql): hide the per-key metrics table from user-facing query surfaces
TableSchema gains a hidden flag: hidden tables stay fully queryable through the engine (the concurrency-keys tab keeps working, tenancy and the merge guard still apply) but are excluded from the query editor autocomplete, the Query page schema and examples panels, the AI query generator context, and the schema API. queue_metrics_by_key is hidden until the per-key surface is settled.
1 parent aa44795 commit 1daa52a

7 files changed

Lines changed: 22 additions & 13 deletions

File tree

apps/webapp/app/components/query/QueryEditor.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ import type { action as titleAction } from "~/routes/resources.orgs.$organizatio
7272
import type { QueryScope } from "~/services/queryService.server";
7373
import { downloadFile, rowsToCSV, rowsToJSON } from "~/utils/dataExport";
7474
import { organizationBillingPath } from "~/utils/pathBuilder";
75-
import { querySchemas } from "~/v3/querySchemas";
75+
import { visibleQuerySchemas } from "~/v3/querySchemas";
7676

7777
/** Convert a Date or ISO string to ISO string format */
7878
function toISOString(value: Date | string): string {
@@ -245,7 +245,7 @@ const QueryEditorForm = forwardRef<
245245
<TSQLEditor
246246
defaultValue={query}
247247
onChange={setQuery}
248-
schema={querySchemas}
248+
schema={visibleQuerySchemas}
249249
linterEnabled={true}
250250
showCopyButton={true}
251251
showClearButton={true}

apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.query/ExamplesContent.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Header3 } from "~/components/primitives/Headers";
33
import { Paragraph } from "~/components/primitives/Paragraph";
44
import SegmentedControl from "~/components/primitives/SegmentedControl";
55
import type { QueryScope } from "~/services/queryService.server";
6-
import { querySchemas } from "~/v3/querySchemas";
6+
import { visibleQuerySchemas } from "~/v3/querySchemas";
77
import { TryableCodeBlock } from "./TRQLGuideContent";
88

99
// Example queries for the Examples tab
@@ -211,14 +211,14 @@ LIMIT 20`,
211211
},
212212
];
213213

214-
const tableOptions = querySchemas.map((s) => ({ label: s.name, value: s.name }));
214+
const tableOptions = visibleQuerySchemas.map((s) => ({ label: s.name, value: s.name }));
215215

216216
export function ExamplesContent({
217217
onTryExample,
218218
}: {
219219
onTryExample: (query: string, scope: QueryScope) => void;
220220
}) {
221-
const [selectedTable, setSelectedTable] = useState(querySchemas[0].name);
221+
const [selectedTable, setSelectedTable] = useState(visibleQuerySchemas[0].name);
222222
const filtered = exampleQueries.filter((e) => e.table === selectedTable);
223223

224224
return (

apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.query/TableSchemaContent.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Badge } from "~/components/primitives/Badge";
44
import { CopyableText } from "~/components/primitives/CopyableText";
55
import { Paragraph } from "~/components/primitives/Paragraph";
66
import SegmentedControl from "~/components/primitives/SegmentedControl";
7-
import { querySchemas } from "~/v3/querySchemas";
7+
import { visibleQuerySchemas } from "~/v3/querySchemas";
88

99
function ColumnHelpItem({ col }: { col: ColumnSchema }) {
1010
return (
@@ -43,11 +43,11 @@ function ColumnHelpItem({ col }: { col: ColumnSchema }) {
4343
);
4444
}
4545

46-
const tableOptions = querySchemas.map((s) => ({ label: s.name, value: s.name }));
46+
const tableOptions = visibleQuerySchemas.map((s) => ({ label: s.name, value: s.name }));
4747

4848
export function TableSchemaContent() {
49-
const [selectedTable, setSelectedTable] = useState(querySchemas[0].name);
50-
const table = querySchemas.find((s) => s.name === selectedTable) ?? querySchemas[0];
49+
const [selectedTable, setSelectedTable] = useState(visibleQuerySchemas[0].name);
50+
const table = visibleQuerySchemas.find((s) => s.name === selectedTable) ?? visibleQuerySchemas[0];
5151

5252
return (
5353
<div>

apps/webapp/app/routes/api.v1.query.schema.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { json } from "@remix-run/server-runtime";
22
import type { ColumnSchema, TableSchema } from "@internal/tsql";
33
import { createLoaderApiRoute } from "~/services/routeBuilders/apiBuilder.server";
4-
import { querySchemas } from "~/v3/querySchemas";
4+
import { visibleQuerySchemas } from "~/v3/querySchemas";
55

66
function serializeColumn(col: ColumnSchema) {
77
const result: Record<string, unknown> = {
@@ -51,7 +51,7 @@ export const loader = createLoaderApiRoute(
5151
},
5252
},
5353
async () => {
54-
const tables = querySchemas.map(serializeTable);
54+
const tables = visibleQuerySchemas.map(serializeTable);
5555
return json({ tables });
5656
}
5757
);

apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.query.ai-generate.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import type { AITimeFilter } from "~/routes/_app.orgs.$organizationSlug.projects
88
import { requireUserId } from "~/services/session.server";
99
import { EnvironmentParamSchema } from "~/utils/pathBuilder";
1010
import { AIQueryService } from "~/v3/services/aiQueryService.server";
11-
import { querySchemas } from "~/v3/querySchemas";
11+
import { visibleQuerySchemas } from "~/v3/querySchemas";
1212

1313
const RequestSchema = z.object({
1414
prompt: z.string().min(1, "Prompt is required"),
@@ -85,7 +85,7 @@ export async function action({ request, params }: ActionFunctionArgs) {
8585
const { prompt, mode, currentQuery } = submission.data;
8686

8787
const service = new AIQueryService(
88-
querySchemas,
88+
visibleQuerySchemas,
8989
openai(env.AI_RUN_FILTER_MODEL ?? "gpt-4o-mini")
9090
);
9191

apps/webapp/app/v3/querySchemas.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1309,6 +1309,7 @@ export const queueMetricsByKeySchema: TableSchema = {
13091309
name: "queue_metrics_by_key",
13101310
clickhouseName: "trigger_dev.queue_metrics_ck_v1",
13111311
description: "Per-concurrency-key queue metrics: backlog, throughput, and wait by key",
1312+
hidden: true,
13121313
timeConstraint: "bucket_start",
13131314
tenantColumns: {
13141315
organizationId: "organization_id",
@@ -1444,6 +1445,9 @@ export const querySchemas: TableSchema[] = [
14441445
queueMetricsByKeySchema,
14451446
];
14461447

1448+
/** Schemas shown in user-facing listings (editor autocomplete, schema docs, schema API). */
1449+
export const visibleQuerySchemas: TableSchema[] = querySchemas.filter((s) => !s.hidden);
1450+
14471451
/**
14481452
* Default query for the query editor
14491453
*/

internal-packages/tsql/src/query/schema.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,11 @@ export interface TableSchema {
431431
* so repeated auto-refresh queries share cache entries.
432432
*/
433433
queryCache?: { ttlSeconds: number; alignSeconds: number };
434+
/**
435+
* Excluded from user-facing listings (query editor, schema docs, schema API) by
436+
* callers; the engine still compiles queries against it.
437+
*/
438+
hidden?: boolean;
434439
}
435440

436441
/**

0 commit comments

Comments
 (0)