Skip to content

Commit

Permalink
Update integration metrics capturing (#985)
Browse files Browse the repository at this point in the history
Co-authored-by: Christopher Radek <[email protected]>
  • Loading branch information
zikaari and chrisradek authored Nov 15, 2023
1 parent 6863e96 commit 083f9a1
Show file tree
Hide file tree
Showing 6 changed files with 93 additions and 44 deletions.
5 changes: 5 additions & 0 deletions .changeset/poor-masks-jam.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@segment/analytics-next': minor
---

Update integration metrics capturing strategy
2 changes: 1 addition & 1 deletion packages/browser/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
"size-limit": [
{
"path": "dist/umd/index.js",
"limit": "29 KB"
"limit": "29.1 KB"
}
],
"dependencies": {
Expand Down
28 changes: 28 additions & 0 deletions packages/browser/src/core/stats/metric-helpers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { Context } from '../context'

export interface RecordIntegrationMetricProps {
integrationName: string
methodName: string
didError?: boolean
type: 'classic' | 'action'
}

export function recordIntegrationMetric(
ctx: Context,
{
methodName,
integrationName,
type,
didError = false,
}: RecordIntegrationMetricProps
): void {
ctx.stats.increment(
`analytics_js.integration.invoke${didError ? '.error' : ''}`,
1,
[
`method:${methodName}`,
`integration_name:${integrationName}`,
`type:${type}`,
]
)
}
41 changes: 23 additions & 18 deletions packages/browser/src/plugins/ajs-destination/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import {
isDisabledIntegration as shouldSkipIntegration,
isInstallableIntegration,
} from './utils'
import { recordIntegrationMetric } from '../../core/stats/metric-helpers'

export type ClassType<T> = new (...args: unknown[]) => T

Expand Down Expand Up @@ -158,18 +159,19 @@ export class LegacyDestination implements DestinationPlugin {
})

try {
ctx.stats.increment('analytics_js.integration.invoke', 1, [
`method:initialize`,
`integration_name:${this.name}`,
])

recordIntegrationMetric(ctx, {
integrationName: this.name,
methodName: 'initialize',
type: 'classic',
})
this.integration.initialize()
} catch (error) {
ctx.stats.increment('analytics_js.integration.invoke.error', 1, [
`method:initialize`,
`integration_name:${this.name}`,
])

recordIntegrationMetric(ctx, {
integrationName: this.name,
methodName: 'initialize',
type: 'classic',
didError: true,
})
throw error
}
}
Expand Down Expand Up @@ -254,20 +256,23 @@ export class LegacyDestination implements DestinationPlugin {
traverse: !this.disableAutoISOConversion,
})

ctx.stats.increment('analytics_js.integration.invoke', 1, [
`method:${eventType}`,
`integration_name:${this.name}`,
])
recordIntegrationMetric(ctx, {
integrationName: this.name,
methodName: eventType,
type: 'classic',
})

try {
if (this.integration) {
await this.integration.invoke.call(this.integration, eventType, event)
}
} catch (err) {
ctx.stats.increment('analytics_js.integration.invoke.error', 1, [
`method:${eventType}`,
`integration_name:${this.name}`,
])
recordIntegrationMetric(ctx, {
integrationName: this.name,
methodName: eventType,
type: 'classic',
didError: true,
})
throw err
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,21 +51,29 @@ describe('ActionDestination', () => {

expect(ajs.ctx?.stats.metrics[0]).toMatchObject(
expect.objectContaining({
metric: 'analytics_js.action_plugin.invoke',
tags: ['method:load', 'action_plugin_name:testDestination'],
metric: 'analytics_js.integration.invoke',
tags: [
'method:load',
'integration_name:testDestination',
'type:action',
],
})
)

const trackCtx = await ajs.track('test')

const actionInvokeMetric = trackCtx.stats.metrics.find(
(m) => m.metric === 'analytics_js.action_plugin.invoke'
(m) => m.metric === 'analytics_js.integration.invoke'
)

expect(actionInvokeMetric).toMatchObject(
expect.objectContaining({
metric: 'analytics_js.action_plugin.invoke',
tags: ['method:track', 'action_plugin_name:testDestination'],
metric: 'analytics_js.integration.invoke',
tags: [
'method:track',
'integration_name:testDestination',
'type:action',
],
})
)
})
Expand Down
43 changes: 23 additions & 20 deletions packages/browser/src/plugins/remote-loader/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
} from '../middleware'
import { Context, ContextCancelation } from '../../core/context'
import { Analytics } from '../../core/analytics'
import { recordIntegrationMetric } from '../../core/stats/metric-helpers'

export interface RemotePlugin {
/** The name of the remote plugin */
Expand Down Expand Up @@ -80,18 +81,19 @@ export class ActionDestination implements DestinationPlugin {
}

try {
ctx.stats.increment('analytics_js.action_plugin.invoke', 1, [
`method:${methodName}`,
`action_plugin_name:${this.action.name}`,
])

recordIntegrationMetric(ctx, {
integrationName: this.action.name,
methodName,
type: 'action',
})
await this.action[methodName]!(transformedContext)
} catch (error) {
ctx.stats.increment('analytics_js.action_plugin.invoke.error', 1, [
`method:${methodName}`,
`action_plugin_name:${this.action.name}`,
])

recordIntegrationMetric(ctx, {
integrationName: this.action.name,
methodName,
type: 'action',
didError: true,
})
throw error
}

Expand All @@ -117,18 +119,19 @@ export class ActionDestination implements DestinationPlugin {

async load(ctx: Context, analytics: Analytics): Promise<unknown> {
try {
ctx.stats.increment('analytics_js.action_plugin.invoke', 1, [
`method:load`,
`action_plugin_name:${this.action.name}`,
])

recordIntegrationMetric(ctx, {
integrationName: this.action.name,
methodName: 'load',
type: 'action',
})
return await this.action.load(ctx, analytics)
} catch (error) {
ctx.stats.increment('analytics_js.action_plugin.invoke.error', 1, [
`method:load`,
`action_plugin_name:${this.action.name}`,
])

recordIntegrationMetric(ctx, {
integrationName: this.action.name,
methodName: 'load',
type: 'action',
didError: true,
})
throw error
}
}
Expand Down

0 comments on commit 083f9a1

Please sign in to comment.