Skip to content
Merged
58 changes: 47 additions & 11 deletions src/platform/telemetry/providers/cloud/MixpanelTelemetryProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,10 @@ export class MixpanelTelemetryProvider implements TelemetryProvider {
this.trackEvent(eventName)
}

trackAddApiCreditButtonClicked(): void {
this.trackEvent(TelemetryEvents.ADD_API_CREDIT_BUTTON_CLICKED)
}

trackMonthlySubscriptionSucceeded(): void {
this.trackEvent(TelemetryEvents.MONTHLY_SUBSCRIPTION_SUCCEEDED)
}
Expand All @@ -169,7 +173,11 @@ export class MixpanelTelemetryProvider implements TelemetryProvider {
const runButtonProperties: RunButtonProperties = {
subscribe_to_run: options?.subscribe_to_run || false,
workflow_type: executionContext.is_template ? 'template' : 'custom',
workflow_name: executionContext.workflow_name ?? 'untitled'
workflow_name: executionContext.workflow_name ?? 'untitled',
total_node_count: executionContext.total_node_count,
subgraph_count: executionContext.subgraph_count,
has_api_nodes: executionContext.has_api_nodes,
api_node_names: executionContext.api_node_names
}

this.trackEvent(TelemetryEvents.RUN_BUTTON_CLICKED, runButtonProperties)
Expand Down Expand Up @@ -271,22 +279,50 @@ export class MixpanelTelemetryProvider implements TelemetryProvider {
const activeWorkflow = workflowStore.activeWorkflow

// Calculate node metrics in a single traversal
const nodeMetrics = reduceAllNodes(
type NodeMetrics = {
custom_node_count: number
api_node_count: number
subgraph_count: number
total_node_count: number
has_api_nodes: boolean
api_node_names: string[]
}

const nodeCounts = reduceAllNodes<NodeMetrics>(
app.graph,
(acc, node) => {
(metrics, node) => {
const nodeDef = nodeDefStore.nodeDefsByName[node.type]
const isCustomNode =
nodeDef?.nodeSource?.type === NodeSourceType.CustomNodes
const isApiNode = nodeDef?.api_node === true
const isSubgraph = node.isSubgraphNode?.() === true

return {
custom_node_count: acc.custom_node_count + (isCustomNode ? 1 : 0),
api_node_count: acc.api_node_count + (isApiNode ? 1 : 0),
subgraph_count: acc.subgraph_count + (isSubgraph ? 1 : 0)
if (isApiNode) {
metrics.has_api_nodes = true
const canonicalName = nodeDef?.name
if (
canonicalName &&
!metrics.api_node_names.includes(canonicalName)
) {
metrics.api_node_names.push(canonicalName)
}
}

metrics.custom_node_count += isCustomNode ? 1 : 0
metrics.api_node_count += isApiNode ? 1 : 0
metrics.subgraph_count += isSubgraph ? 1 : 0
metrics.total_node_count += 1

return metrics
},
{ custom_node_count: 0, api_node_count: 0, subgraph_count: 0 }
{
custom_node_count: 0,
api_node_count: 0,
subgraph_count: 0,
total_node_count: 0,
has_api_nodes: false,
api_node_names: []
}
)

if (activeWorkflow?.filename) {
Expand All @@ -312,21 +348,21 @@ export class MixpanelTelemetryProvider implements TelemetryProvider {
template_models: englishMetadata?.models ?? template?.models,
template_use_case: englishMetadata?.useCase ?? template?.useCase,
template_license: englishMetadata?.license ?? template?.license,
...nodeMetrics
...nodeCounts
}
}

return {
is_template: false,
workflow_name: activeWorkflow.filename,
...nodeMetrics
...nodeCounts
}
}

return {
is_template: false,
workflow_name: undefined,
...nodeMetrics
...nodeCounts
}
}
}
9 changes: 9 additions & 0 deletions src/platform/telemetry/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ export interface RunButtonProperties {
subscribe_to_run: boolean
workflow_type: 'template' | 'custom'
workflow_name: string
total_node_count: number
subgraph_count: number
has_api_nodes: boolean
api_node_names: string[]
}

/**
Expand All @@ -61,6 +65,9 @@ export interface ExecutionContext {
custom_node_count: number
api_node_count: number
subgraph_count: number
total_node_count: number
has_api_nodes: boolean
api_node_names: string[]
}

/**
Expand Down Expand Up @@ -173,6 +180,7 @@ export interface TelemetryProvider {
// Subscription flow events
trackSubscription(event: 'modal_opened' | 'subscribe_clicked'): void
trackMonthlySubscriptionSucceeded(): void
trackAddApiCreditButtonClicked(): void
trackApiCreditTopupButtonPurchaseClicked(amount: number): void
trackRunButton(options?: { subscribe_to_run?: boolean }): void

Expand Down Expand Up @@ -225,6 +233,7 @@ export const TelemetryEvents = {
SUBSCRIPTION_REQUIRED_MODAL_OPENED: 'app:subscription_required_modal_opened',
SUBSCRIBE_NOW_BUTTON_CLICKED: 'app:subscribe_now_button_clicked',
MONTHLY_SUBSCRIPTION_SUCCEEDED: 'app:monthly_subscription_succeeded',
ADD_API_CREDIT_BUTTON_CLICKED: 'app:add_api_credit_button_clicked',
API_CREDIT_TOPUP_BUTTON_PURCHASE_CLICKED:
'app:api_credit_topup_button_purchase_clicked',

Expand Down
Loading