diff --git a/packages/cli/src/telemetry/events.schema.json b/packages/cli/src/telemetry/events.schema.json index 405f0240..0bd22bb3 100644 --- a/packages/cli/src/telemetry/events.schema.json +++ b/packages/cli/src/telemetry/events.schema.json @@ -144,6 +144,18 @@ "errorClass" ] }, + { + "name": "mongo_query_completed", + "description": "Emitted after ktx mongo-query completes validation and execution.", + "fields": [ + "driver", + "isDemoConnection", + "stageCount", + "durationMs", + "outcome", + "errorClass" + ] + }, { "name": "wiki_query_completed", "description": "Emitted after a wiki query completes.", @@ -1056,6 +1068,77 @@ ], "additionalProperties": false }, + "mongo_query_completed": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "object", + "properties": { + "cliVersion": { + "type": "string" + }, + "nodeVersion": { + "type": "string" + }, + "osPlatform": { + "type": "string" + }, + "osRelease": { + "type": "string" + }, + "arch": { + "type": "string" + }, + "runtime": { + "type": "string", + "enum": [ + "node", + "daemon-py" + ] + }, + "isCi": { + "type": "boolean" + }, + "driver": { + "type": "string" + }, + "isDemoConnection": { + "type": "boolean" + }, + "stageCount": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "durationMs": { + "type": "number", + "minimum": 0 + }, + "outcome": { + "type": "string", + "enum": [ + "ok", + "error" + ] + }, + "errorClass": { + "type": "string" + } + }, + "required": [ + "cliVersion", + "nodeVersion", + "osPlatform", + "osRelease", + "arch", + "runtime", + "isCi", + "driver", + "isDemoConnection", + "stageCount", + "durationMs", + "outcome" + ], + "additionalProperties": false + }, "wiki_query_completed": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", diff --git a/packages/cli/src/telemetry/events.ts b/packages/cli/src/telemetry/events.ts index 6d311ac5..84b8617b 100644 --- a/packages/cli/src/telemetry/events.ts +++ b/packages/cli/src/telemetry/events.ts @@ -146,6 +146,17 @@ const sqlCompletedSchema = telemetryCommonEnvelopeSchema }) .strict(); +const mongoQueryCompletedSchema = telemetryCommonEnvelopeSchema + .extend({ + driver: z.string(), + isDemoConnection: z.boolean(), + stageCount: z.number().int().nonnegative(), + durationMs: z.number().nonnegative(), + outcome: outcomeSchema, + errorClass: z.string().optional(), + }) + .strict(); + const wikiQueryCompletedSchema = telemetryCommonEnvelopeSchema .extend({ queryLength: z.number().int().nonnegative(), @@ -230,6 +241,7 @@ export const telemetryEventSchemas = { sl_validate_completed: slValidateCompletedSchema, sl_query_completed: slQueryCompletedSchema, sql_completed: sqlCompletedSchema, + mongo_query_completed: mongoQueryCompletedSchema, wiki_query_completed: wikiQueryCompletedSchema, mcp_request_completed: mcpRequestCompletedSchema, daemon_started: daemonStartedSchema, @@ -342,6 +354,11 @@ export const telemetryEventCatalog = [ 'errorClass', ], }, + { + name: 'mongo_query_completed', + description: 'Emitted after ktx mongo-query completes validation and execution.', + fields: ['driver', 'isDemoConnection', 'stageCount', 'durationMs', 'outcome', 'errorClass'], + }, { name: 'wiki_query_completed', description: 'Emitted after a wiki query completes.', diff --git a/packages/cli/test/telemetry/events.test.ts b/packages/cli/test/telemetry/events.test.ts index 033c2def..1ed5f1f1 100644 --- a/packages/cli/test/telemetry/events.test.ts +++ b/packages/cli/test/telemetry/events.test.ts @@ -31,6 +31,7 @@ describe('telemetry event schemas', () => { 'sl_validate_completed', 'sl_query_completed', 'sql_completed', + 'mongo_query_completed', 'wiki_query_completed', 'mcp_request_completed', 'daemon_started', diff --git a/python/ktx-daemon/src/ktx_daemon/telemetry/events.schema.json b/python/ktx-daemon/src/ktx_daemon/telemetry/events.schema.json index 405f0240..0bd22bb3 100644 --- a/python/ktx-daemon/src/ktx_daemon/telemetry/events.schema.json +++ b/python/ktx-daemon/src/ktx_daemon/telemetry/events.schema.json @@ -144,6 +144,18 @@ "errorClass" ] }, + { + "name": "mongo_query_completed", + "description": "Emitted after ktx mongo-query completes validation and execution.", + "fields": [ + "driver", + "isDemoConnection", + "stageCount", + "durationMs", + "outcome", + "errorClass" + ] + }, { "name": "wiki_query_completed", "description": "Emitted after a wiki query completes.", @@ -1056,6 +1068,77 @@ ], "additionalProperties": false }, + "mongo_query_completed": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "object", + "properties": { + "cliVersion": { + "type": "string" + }, + "nodeVersion": { + "type": "string" + }, + "osPlatform": { + "type": "string" + }, + "osRelease": { + "type": "string" + }, + "arch": { + "type": "string" + }, + "runtime": { + "type": "string", + "enum": [ + "node", + "daemon-py" + ] + }, + "isCi": { + "type": "boolean" + }, + "driver": { + "type": "string" + }, + "isDemoConnection": { + "type": "boolean" + }, + "stageCount": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "durationMs": { + "type": "number", + "minimum": 0 + }, + "outcome": { + "type": "string", + "enum": [ + "ok", + "error" + ] + }, + "errorClass": { + "type": "string" + } + }, + "required": [ + "cliVersion", + "nodeVersion", + "osPlatform", + "osRelease", + "arch", + "runtime", + "isCi", + "driver", + "isDemoConnection", + "stageCount", + "durationMs", + "outcome" + ], + "additionalProperties": false + }, "wiki_query_completed": { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", diff --git a/python/ktx-daemon/tests/test_telemetry_schema_sync.py b/python/ktx-daemon/tests/test_telemetry_schema_sync.py index 0cc822f9..21c076cd 100644 --- a/python/ktx-daemon/tests/test_telemetry_schema_sync.py +++ b/python/ktx-daemon/tests/test_telemetry_schema_sync.py @@ -30,6 +30,7 @@ def test_python_schema_copy_matches_node_schema() -> None: "sl_validate_completed", "sl_query_completed", "sql_completed", + "mongo_query_completed", "wiki_query_completed", "mcp_request_completed", "daemon_started",