Compare commits

...

2 Commits

Author SHA1 Message Date
huang47
3fdfc2ac3e feat: initialize Datadog RUM telemetry provider 2026-07-17 13:29:34 -07:00
huang47
4c3c25bb59 fix: initialize Cloud RUM before app bootstrap 2026-07-15 16:35:45 -07:00
6 changed files with 47 additions and 4 deletions

View File

@@ -7,9 +7,8 @@ import type {
BeginCheckoutMetadata,
DefaultViewSetMetadata,
EnterLinearMetadata,
ShareFlowMetadata,
ShareLinkOpenedMetadata,
ExecutionErrorMetadata,
ExecutionOutcomeMetadata,
ExecutionSuccessMetadata,
HelpCenterClosedMetadata,
HelpCenterOpenedMetadata,
@@ -22,6 +21,8 @@ import type {
PageVisibilityMetadata,
ResubscribeClickMetadata,
RunButtonProperties,
ShareFlowMetadata,
ShareLinkOpenedMetadata,
SettingChangedMetadata,
SharedWorkflowRunMetadata,
ShellLayoutMetadata,
@@ -268,6 +269,10 @@ export class TelemetryRegistry implements TelemetryDispatcher {
this.dispatch((provider) => provider.trackWorkflowExecution?.())
}
trackExecutionOutcome(metadata: ExecutionOutcomeMetadata): void {
this.dispatch((provider) => provider.trackExecutionOutcome?.(metadata))
}
trackExecutionError(metadata: ExecutionErrorMetadata): void {
this.dispatch((provider) => provider.trackExecutionError?.(metadata))
}

View File

@@ -28,7 +28,8 @@ export async function initTelemetry(): Promise<void> {
{ PostHogTelemetryProvider },
{ ClickHouseTelemetryProvider },
{ SyftTelemetryProvider },
{ CustomerIoTelemetryProvider }
{ CustomerIoTelemetryProvider },
{ DatadogRumTelemetryProvider }
] = await Promise.all([
import('./TelemetryRegistry'),
import('./providers/cloud/MixpanelTelemetryProvider'),
@@ -37,7 +38,8 @@ export async function initTelemetry(): Promise<void> {
import('./providers/cloud/PostHogTelemetryProvider'),
import('./providers/cloud/ClickHouseTelemetryProvider'),
import('./providers/cloud/SyftTelemetryProvider'),
import('./providers/cloud/CustomerIoTelemetryProvider')
import('./providers/cloud/CustomerIoTelemetryProvider'),
import('./providers/cloud/DatadogRumTelemetryProvider')
])
const registry = new TelemetryRegistry()
@@ -48,6 +50,7 @@ export async function initTelemetry(): Promise<void> {
registry.registerProvider(new ClickHouseTelemetryProvider())
registry.registerProvider(new SyftTelemetryProvider())
registry.registerProvider(new CustomerIoTelemetryProvider())
registry.registerProvider(new DatadogRumTelemetryProvider())
setTelemetryRegistry(registry)
})()

View File

@@ -0,0 +1,3 @@
import type { TelemetryProvider } from '../../types'
export class DatadogRumTelemetryProvider implements TelemetryProvider {}

View File

@@ -156,6 +156,11 @@ export interface ExecutionErrorMetadata {
error?: string
}
export interface ExecutionOutcomeMetadata {
startTime: number
outcome: 'success' | 'failure'
}
/**
* Execution success metadata
*/
@@ -632,6 +637,7 @@ export interface TelemetryProvider {
// Workflow execution events
trackWorkflowExecution?(): void
trackExecutionOutcome?(metadata: ExecutionOutcomeMetadata): void
trackExecutionError?(metadata: ExecutionErrorMetadata): void
trackExecutionSuccess?(metadata: ExecutionSuccessMetadata): void
trackSharedWorkflowRun?(metadata: SharedWorkflowRunMetadata): void

View File

@@ -42,6 +42,11 @@ export const useExtensionService = () => {
await Promise.all(
extensions
.filter((extension) => !extension.includes('extensions/core'))
.filter(
(extension) =>
__DISTRIBUTION__ !== 'cloud' ||
extension !== '/extensions/cloud/rum.js'
)
.map(async (ext) => {
try {
await import(/* @vite-ignore */ api.fileURL(ext))

View File

@@ -334,6 +334,27 @@ export default defineConfig({
tailwindcss(),
typegpuPlugin({}),
comfyAPIPlugin(IS_DEV),
{
name: 'inject-cloud-rum',
apply: 'build',
transformIndexHtml(html) {
if (DISTRIBUTION !== 'cloud') return html
return {
html,
tags: [
{
tag: 'script',
attrs: {
type: 'module',
src: '/extensions/cloud/rum.js'
},
injectTo: 'head-prepend'
}
]
}
}
},
// Exclude proprietary ABCROM fonts from non-cloud builds
{
name: 'exclude-proprietary-fonts',