Compare commits

...

12 Commits

Author SHA1 Message Date
Deep Mehta
98a50564a5 Merge branch 'main' into deepme987/feat/missing-node-telemetry 2026-03-23 13:58:37 -07:00
Deep Mehta
05f64618a4 Merge branch 'main' into deepme987/feat/missing-node-telemetry 2026-03-23 12:42:30 -07:00
Deep Mehta
6b32d271ac Merge branch 'main' into deepme987/feat/missing-node-telemetry 2026-03-18 17:04:16 -07:00
Deep Mehta
e37dd20ec4 refactor: normalize ClickHouse event name to node_missing
Align frontend event name with backend convention: both now use
node_missing (was missing_nodes_detected). Matches node_usage pattern.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 13:38:29 -07:00
Deep Mehta
aeca1ebe7d Merge branch 'main' into deepme987/feat/missing-node-telemetry 2026-03-18 12:13:08 -07:00
Deep Mehta
2fb9b93c6e Merge branch 'main' into deepme987/feat/missing-node-telemetry 2026-03-18 11:11:15 -07:00
Deep Mehta
3debb9ca13 Merge branch 'main' into deepme987/feat/missing-node-telemetry 2026-03-18 10:22:31 -07:00
Deep Mehta
bc2ba168b1 Merge branch 'main' into deepme987/feat/missing-node-telemetry 2026-03-17 22:38:22 -07:00
GitHub Action
06c8ede6f7 [automated] Apply ESLint and Oxfmt fixes 2026-03-18 05:30:26 +00:00
Deep Mehta
9c9ab88fac refactor: extract ClickHouse telemetry into its own provider
Move missing node ClickHouse tracking out of MixpanelTelemetryProvider
into a dedicated ClickHouseTelemetryProvider, registered alongside the
other providers in initTelemetry.ts.

This follows the existing multi-provider pattern where each provider
only implements the methods it cares about. MixpanelTelemetryProvider
is reverted to its original state (sends full metadata to Mixpanel).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 22:27:39 -07:00
Deep Mehta
9a032e6261 refactor: stop sending missing node data to Mixpanel
Missing node telemetry now goes to ClickHouse only. Strip
missing_node_count and missing_node_types from the Mixpanel
workflow_imported/workflow_opened events.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 21:07:27 -07:00
Deep Mehta
c99a13122f feat: send missing node data to ClickHouse for observability
When users open/import a workflow with missing nodes, the frontend
already tracks this via Mixpanel. This adds a parallel fire-and-forget
POST to /api/internal/cloud_analytics so the data also lands in
ClickHouse as "frontend:missing_nodes_detected" events.

This enables post-hoc analysis of which unsupported custom nodes
users are trying to use, supporting data-driven prioritization
of new node pack additions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 21:01:43 -07:00
2 changed files with 50 additions and 2 deletions

View File

@@ -25,13 +25,15 @@ export async function initTelemetry(): Promise<void> {
{ MixpanelTelemetryProvider },
{ GtmTelemetryProvider },
{ ImpactTelemetryProvider },
{ PostHogTelemetryProvider }
{ PostHogTelemetryProvider },
{ ClickHouseTelemetryProvider }
] = await Promise.all([
import('./TelemetryRegistry'),
import('./providers/cloud/MixpanelTelemetryProvider'),
import('./providers/cloud/GtmTelemetryProvider'),
import('./providers/cloud/ImpactTelemetryProvider'),
import('./providers/cloud/PostHogTelemetryProvider')
import('./providers/cloud/PostHogTelemetryProvider'),
import('./providers/cloud/ClickHouseTelemetryProvider')
])
const registry = new TelemetryRegistry()
@@ -39,6 +41,7 @@ export async function initTelemetry(): Promise<void> {
registry.registerProvider(new GtmTelemetryProvider())
registry.registerProvider(new ImpactTelemetryProvider())
registry.registerProvider(new PostHogTelemetryProvider())
registry.registerProvider(new ClickHouseTelemetryProvider())
setTelemetryRegistry(registry)
})()

View File

@@ -0,0 +1,45 @@
import { api } from '@/scripts/api'
import type { TelemetryProvider, WorkflowImportMetadata } from '../../types'
/**
* ClickHouse Telemetry Provider - Cloud Build Implementation
*
* Sends observability events to the cloud backend's ClickHouse pipeline
* via POST /api/internal/cloud_analytics. Currently tracks missing node
* data when users open/import workflows with unsupported nodes.
*
* This provider is separate from Mixpanel because ClickHouse is the
* canonical store for post-hoc analytics (per observability philosophy).
*
* CRITICAL: OSS Build Safety
* This file is tree-shaken away in OSS builds (DISTRIBUTION unset).
*/
export class ClickHouseTelemetryProvider implements TelemetryProvider {
trackWorkflowImported(metadata: WorkflowImportMetadata): void {
this.reportMissingNodes(metadata)
}
trackWorkflowOpened(metadata: WorkflowImportMetadata): void {
this.reportMissingNodes(metadata)
}
private reportMissingNodes(metadata: WorkflowImportMetadata): void {
if (metadata.missing_node_count <= 0) return
api
.fetchApi('/internal/cloud_analytics', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
event_name: 'node_missing',
event_data: {
missing_class_types: metadata.missing_node_types,
missing_count: metadata.missing_node_count,
source: metadata.open_source ?? 'unknown'
}
})
})
.catch(() => {})
}
}