Skip to content

Commit 2b385a4

Browse files
committed
Set attr directly on eval instead of in hook
1 parent 535932c commit 2b385a4

File tree

12 files changed

+46
-110
lines changed

12 files changed

+46
-110
lines changed

dev-packages/browser-integration-tests/suites/integrations/featureFlags/featureFlags/onSpan/test.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,9 @@ sentryTest("Feature flags are added to active span's attributes on span end.", a
5858
expect(innerSpanFlags).toEqual([]);
5959

6060
const expectedOuterSpanFlags = [];
61-
for (let i = 1; i <= 2; i++) {
62-
expectedOuterSpanFlags.push([`flag.evaluation.feat${i}`, false]);
61+
for (let i = 1; i <= MAX_FLAGS_PER_SPAN; i++) {
62+
expectedOuterSpanFlags.push([`flag.evaluation.feat${i}`, i === 3]);
6363
}
64-
for (let i = 4; i <= MAX_FLAGS_PER_SPAN; i++) {
65-
expectedOuterSpanFlags.push([`flag.evaluation.feat${i}`, false]);
66-
}
67-
expectedOuterSpanFlags.push(['flag.evaluation.feat3', true]);
68-
expect(outerSpanFlags).toEqual(expectedOuterSpanFlags);
64+
// Order agnostic (attribute dict is unordered).
65+
expect(outerSpanFlags.sort()).toEqual(expectedOuterSpanFlags.sort());
6966
});

dev-packages/browser-integration-tests/suites/integrations/featureFlags/launchdarkly/onSpan/test.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,9 @@ sentryTest("Feature flags are added to active span's attributes on span end.", a
5858
expect(innerSpanFlags).toEqual([]);
5959

6060
const expectedOuterSpanFlags = [];
61-
for (let i = 1; i <= 2; i++) {
62-
expectedOuterSpanFlags.push([`flag.evaluation.feat${i}`, false]);
61+
for (let i = 1; i <= MAX_FLAGS_PER_SPAN; i++) {
62+
expectedOuterSpanFlags.push([`flag.evaluation.feat${i}`, i === 3]);
6363
}
64-
for (let i = 4; i <= MAX_FLAGS_PER_SPAN; i++) {
65-
expectedOuterSpanFlags.push([`flag.evaluation.feat${i}`, false]);
66-
}
67-
expectedOuterSpanFlags.push(['flag.evaluation.feat3', true]);
68-
expect(outerSpanFlags).toEqual(expectedOuterSpanFlags);
64+
// Order agnostic (attribute dict is unordered).
65+
expect(outerSpanFlags.sort()).toEqual(expectedOuterSpanFlags.sort());
6966
});

dev-packages/browser-integration-tests/suites/integrations/featureFlags/openfeature/onSpan/test.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,9 @@ sentryTest("Feature flags are added to active span's attributes on span end.", a
5858
expect(innerSpanFlags).toEqual([]);
5959

6060
const expectedOuterSpanFlags = [];
61-
for (let i = 1; i <= 2; i++) {
62-
expectedOuterSpanFlags.push([`flag.evaluation.feat${i}`, false]);
61+
for (let i = 1; i <= MAX_FLAGS_PER_SPAN; i++) {
62+
expectedOuterSpanFlags.push([`flag.evaluation.feat${i}`, i === 3]);
6363
}
64-
for (let i = 4; i <= MAX_FLAGS_PER_SPAN; i++) {
65-
expectedOuterSpanFlags.push([`flag.evaluation.feat${i}`, false]);
66-
}
67-
expectedOuterSpanFlags.push(['flag.evaluation.feat3', true]);
68-
expect(outerSpanFlags).toEqual(expectedOuterSpanFlags);
64+
// Order agnostic (attribute dict is unordered).
65+
expect(outerSpanFlags.sort()).toEqual(expectedOuterSpanFlags.sort());
6966
});

dev-packages/browser-integration-tests/suites/integrations/featureFlags/statsig/onSpan/test.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,9 @@ sentryTest("Feature flags are added to active span's attributes on span end.", a
6262
expect(innerSpanFlags).toEqual([]);
6363

6464
const expectedOuterSpanFlags = [];
65-
for (let i = 1; i <= 2; i++) {
66-
expectedOuterSpanFlags.push([`flag.evaluation.feat${i}`, false]);
65+
for (let i = 1; i <= MAX_FLAGS_PER_SPAN; i++) {
66+
expectedOuterSpanFlags.push([`flag.evaluation.feat${i}`, i === 3]);
6767
}
68-
for (let i = 4; i <= MAX_FLAGS_PER_SPAN; i++) {
69-
expectedOuterSpanFlags.push([`flag.evaluation.feat${i}`, false]);
70-
}
71-
expectedOuterSpanFlags.push(['flag.evaluation.feat3', true]);
72-
expect(outerSpanFlags).toEqual(expectedOuterSpanFlags);
68+
// Order agnostic (attribute dict is unordered).
69+
expect(outerSpanFlags.sort()).toEqual(expectedOuterSpanFlags.sort());
7370
});

dev-packages/browser-integration-tests/suites/integrations/featureFlags/unleash/onSpan/test.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,9 @@ sentryTest("Feature flags are added to active span's attributes on span end.", a
6060
expect(innerSpanFlags).toEqual([]);
6161

6262
const expectedOuterSpanFlags = [];
63-
for (let i = 1; i <= 2; i++) {
64-
expectedOuterSpanFlags.push([`flag.evaluation.feat${i}`, false]);
63+
for (let i = 1; i <= MAX_FLAGS_PER_SPAN; i++) {
64+
expectedOuterSpanFlags.push([`flag.evaluation.feat${i}`, i === 3]);
6565
}
66-
for (let i = 4; i <= MAX_FLAGS_PER_SPAN; i++) {
67-
expectedOuterSpanFlags.push([`flag.evaluation.feat${i}`, false]);
68-
}
69-
expectedOuterSpanFlags.push(['flag.evaluation.feat3', true]);
70-
expect(outerSpanFlags).toEqual(expectedOuterSpanFlags);
66+
// Order agnostic (attribute dict is unordered).
67+
expect(outerSpanFlags.sort()).toEqual(expectedOuterSpanFlags.sort());
7168
});

packages/browser/src/integrations/featureFlags/featureFlagsIntegration.ts

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
import type { Client, Event, EventHint, Integration, IntegrationFn, Span } from '@sentry/core';
22
import { defineIntegration } from '@sentry/core';
3-
import {
4-
bufferSpanFeatureFlag,
5-
copyFlagsFromScopeToEvent,
6-
freezeSpanFeatureFlags,
7-
insertFlagToScope,
8-
} from '../../utils/featureFlags';
3+
import { addFeatureFlagToActiveSpan, copyFlagsFromScopeToEvent, insertFlagToScope } from '../../utils/featureFlags';
94

105
export interface FeatureFlagsIntegration extends Integration {
116
addFeatureFlag: (name: string, value: unknown) => void;
@@ -39,19 +34,13 @@ export const featureFlagsIntegration = defineIntegration(() => {
3934
return {
4035
name: 'FeatureFlags',
4136

42-
setup(client: Client) {
43-
client.on('spanEnd', (span: Span) => {
44-
freezeSpanFeatureFlags(span);
45-
});
46-
},
47-
4837
processEvent(event: Event, _hint: EventHint, _client: Client): Event {
4938
return copyFlagsFromScopeToEvent(event);
5039
},
5140

5241
addFeatureFlag(name: string, value: unknown): void {
5342
insertFlagToScope(name, value);
54-
bufferSpanFeatureFlag(name, value);
43+
addFeatureFlagToActiveSpan(name, value);
5544
},
5645
};
5746
}) as IntegrationFn<FeatureFlagsIntegration>;

packages/browser/src/integrations/featureFlags/launchdarkly/integration.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import type { Client, Event, EventHint, IntegrationFn, Span } from '@sentry/core';
22
import { defineIntegration } from '@sentry/core';
33
import {
4-
bufferSpanFeatureFlag,
4+
addFeatureFlagToActiveSpan,
55
copyFlagsFromScopeToEvent,
6-
freezeSpanFeatureFlags,
76
insertFlagToScope,
87
} from '../../../utils/featureFlags';
98
import type { LDContext, LDEvaluationDetail, LDInspectionFlagUsedHandler } from './types';
@@ -27,12 +26,6 @@ export const launchDarklyIntegration = defineIntegration(() => {
2726
return {
2827
name: 'LaunchDarkly',
2928

30-
setup(client: Client) {
31-
client.on('spanEnd', (span: Span) => {
32-
freezeSpanFeatureFlags(span);
33-
});
34-
},
35-
3629
processEvent(event: Event, _hint: EventHint, _client: Client): Event {
3730
return copyFlagsFromScopeToEvent(event);
3831
},
@@ -57,7 +50,7 @@ export function buildLaunchDarklyFlagUsedHandler(): LDInspectionFlagUsedHandler
5750
*/
5851
method: (flagKey: string, flagDetail: LDEvaluationDetail, _context: LDContext) => {
5952
insertFlagToScope(flagKey, flagDetail.value);
60-
bufferSpanFeatureFlag(flagKey, flagDetail.value);
53+
addFeatureFlagToActiveSpan(flagKey, flagDetail.value);
6154
},
6255
};
6356
}

packages/browser/src/integrations/featureFlags/openfeature/integration.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,8 @@
1616
import type { Client, Event, EventHint, IntegrationFn, Span } from '@sentry/core';
1717
import { defineIntegration } from '@sentry/core';
1818
import {
19-
bufferSpanFeatureFlag,
19+
addFeatureFlagToActiveSpan,
2020
copyFlagsFromScopeToEvent,
21-
freezeSpanFeatureFlags,
2221
insertFlagToScope,
2322
} from '../../../utils/featureFlags';
2423
import type { EvaluationDetails, HookContext, HookHints, JsonValue, OpenFeatureHook } from './types';
@@ -27,12 +26,6 @@ export const openFeatureIntegration = defineIntegration(() => {
2726
return {
2827
name: 'OpenFeature',
2928

30-
setup(client: Client) {
31-
client.on('spanEnd', (span: Span) => {
32-
freezeSpanFeatureFlags(span);
33-
});
34-
},
35-
3629
processEvent(event: Event, _hint: EventHint, _client: Client): Event {
3730
return copyFlagsFromScopeToEvent(event);
3831
},
@@ -48,14 +41,14 @@ export class OpenFeatureIntegrationHook implements OpenFeatureHook {
4841
*/
4942
public after(_hookContext: Readonly<HookContext<JsonValue>>, evaluationDetails: EvaluationDetails<JsonValue>): void {
5043
insertFlagToScope(evaluationDetails.flagKey, evaluationDetails.value);
51-
bufferSpanFeatureFlag(evaluationDetails.flagKey, evaluationDetails.value);
44+
addFeatureFlagToActiveSpan(evaluationDetails.flagKey, evaluationDetails.value);
5245
}
5346

5447
/**
5548
* On error evaluation result.
5649
*/
5750
public error(hookContext: Readonly<HookContext<JsonValue>>, _error: unknown, _hookHints?: HookHints): void {
5851
insertFlagToScope(hookContext.flagKey, hookContext.defaultValue);
59-
bufferSpanFeatureFlag(hookContext.flagKey, hookContext.defaultValue);
52+
addFeatureFlagToActiveSpan(hookContext.flagKey, hookContext.defaultValue);
6053
}
6154
}

packages/browser/src/integrations/featureFlags/statsig/integration.ts

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
import type { Client, Event, EventHint, IntegrationFn, Span } from '@sentry/core';
22
import { defineIntegration } from '@sentry/core';
3-
import {
4-
bufferSpanFeatureFlag,
5-
copyFlagsFromScopeToEvent,
6-
freezeSpanFeatureFlags,
7-
insertFlagToScope,
8-
} from '../../../utils/featureFlags';
3+
import { addFeatureFlagToActiveSpan, copyFlagsFromScopeToEvent, insertFlagToScope } from '../../../utils/featureFlags';
94
import type { FeatureGate, StatsigClient } from './types';
105

116
/**
@@ -36,14 +31,10 @@ export const statsigIntegration = defineIntegration(
3631
return {
3732
name: 'Statsig',
3833

39-
setup(client: Client) {
40-
client.on('spanEnd', (span: Span) => {
41-
freezeSpanFeatureFlags(span);
42-
});
43-
34+
setup(_client: Client) {
4435
statsigClient.on('gate_evaluation', (event: { gate: FeatureGate }) => {
4536
insertFlagToScope(event.gate.name, event.gate.value);
46-
bufferSpanFeatureFlag(event.gate.name, event.gate.value);
37+
addFeatureFlagToActiveSpan(event.gate.name, event.gate.value);
4738
});
4839
},
4940

packages/browser/src/integrations/featureFlags/unleash/integration.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@ import type { Client, Event, EventHint, IntegrationFn, Span } from '@sentry/core
22
import { defineIntegration, fill, logger } from '@sentry/core';
33
import { DEBUG_BUILD } from '../../../debug-build';
44
import {
5-
bufferSpanFeatureFlag,
5+
addFeatureFlagToActiveSpan,
66
copyFlagsFromScopeToEvent,
7-
freezeSpanFeatureFlags,
87
insertFlagToScope,
98
} from '../../../utils/featureFlags';
109
import type { UnleashClient, UnleashClientClass } from './types';
@@ -40,12 +39,6 @@ export const unleashIntegration = defineIntegration(
4039
return {
4140
name: 'Unleash',
4241

43-
setup(client: Client) {
44-
client.on('spanEnd', (span: Span) => {
45-
freezeSpanFeatureFlags(span);
46-
});
47-
},
48-
4942
setupOnce() {
5043
const unleashClientPrototype = unleashClientClass.prototype as UnleashClient;
5144
fill(unleashClientPrototype, 'isEnabled', _wrappedIsEnabled);
@@ -76,7 +69,7 @@ function _wrappedIsEnabled(
7669

7770
if (typeof toggleName === 'string' && typeof result === 'boolean') {
7871
insertFlagToScope(toggleName, result);
79-
bufferSpanFeatureFlag(toggleName, result);
72+
addFeatureFlagToActiveSpan(toggleName, result);
8073
} else if (DEBUG_BUILD) {
8174
logger.error(
8275
`[Feature Flags] UnleashClient.isEnabled does not match expected signature. arg0: ${toggleName} (${typeof toggleName}), result: ${result} (${typeof result})`,

0 commit comments

Comments
 (0)