Skip to content

Commit

Permalink
feat: handle invalid metrics (#6795)
Browse files Browse the repository at this point in the history
  • Loading branch information
kwasniew committed Apr 8, 2024
1 parent 9dc9fb3 commit 7cb9910
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,15 @@ import { createFakeFeatureLifecycleService } from './createFeatureLifecycle';
import EventEmitter from 'events';
import type { StageName } from './feature-lifecycle-store-type';
import { STAGE_ENTERED } from './feature-lifecycle-service';
import noLoggerProvider from '../../../test/fixtures/no-logger';

test('can insert and read lifecycle stages', async () => {
const eventBus = new EventEmitter();
const { featureLifecycleService, eventStore, environmentStore } =
createFakeFeatureLifecycleService({
flagResolver: { isEnabled: () => true },
eventBus,
getLogger: noLoggerProvider,
} as unknown as IUnleashConfig);
const featureName = 'testFeature';

Expand Down Expand Up @@ -85,6 +87,7 @@ test('ignores lifecycle state updates when flag disabled', async () => {
createFakeFeatureLifecycleService({
flagResolver: { isEnabled: () => false },
eventBus,
getLogger: noLoggerProvider,
} as unknown as IUnleashConfig);
const featureName = 'testFeature';

Expand Down
34 changes: 25 additions & 9 deletions src/lib/features/feature-lifecycle/feature-lifecycle-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import type {
IFeatureLifecycleStore,
} from './feature-lifecycle-store-type';
import EventEmitter from 'events';
import type { Logger } from '../../logger';

export const STAGE_ENTERED = 'STAGE_ENTERED';

Expand All @@ -27,6 +28,8 @@ export class FeatureLifecycleService extends EventEmitter {

private eventBus: EventEmitter;

private logger: Logger;

constructor(
{
eventStore,
Expand All @@ -40,14 +43,18 @@ export class FeatureLifecycleService extends EventEmitter {
{
flagResolver,
eventBus,
}: Pick<IUnleashConfig, 'flagResolver' | 'eventBus'>,
getLogger,
}: Pick<IUnleashConfig, 'flagResolver' | 'eventBus' | 'getLogger'>,
) {
super();
this.eventStore = eventStore;
this.featureLifecycleStore = featureLifecycleStore;
this.environmentStore = environmentStore;
this.flagResolver = flagResolver;
this.eventBus = eventBus;
this.logger = getLogger(
'feature-lifecycle/feature-lifecycle-service.ts',
);
}

private async checkEnabled(fn: () => Promise<void>) {
Expand All @@ -64,6 +71,7 @@ export class FeatureLifecycleService extends EventEmitter {
);
});
this.eventBus.on(CLIENT_METRICS, async (event) => {
if (!event.featureName || !event.environment) return;
await this.checkEnabled(() =>
this.featureReceivedMetrics(
event.featureName,
Expand Down Expand Up @@ -107,14 +115,22 @@ export class FeatureLifecycleService extends EventEmitter {
}

private async featureReceivedMetrics(feature: string, environment: string) {
const env = await this.environmentStore.get(environment);
if (!env) {
return;
}
if (env.type === 'production') {
await this.stageReceivedMetrics(feature, 'live');
} else if (env.type === 'development') {
await this.stageReceivedMetrics(feature, 'pre-live');
try {
const env = await this.environmentStore.get(environment);

if (!env) {
return;
}
if (env.type === 'production') {
await this.stageReceivedMetrics(feature, 'live');
} else if (env.type === 'development') {
await this.stageReceivedMetrics(feature, 'pre-live');
}
} catch (e) {
this.logger.warn(
`Error handling metrics for ${feature} in ${environment}`,
e,
);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,15 @@ test('should return lifecycle stages', async () => {
featureName: 'my_feature_a',
environment: 'default',
});
// missing feature
eventBus.emit(CLIENT_METRICS, {
environment: 'default',
});
// non existent env
eventBus.emit(CLIENT_METRICS, {
featureName: 'my_feature_a',
environment: 'non-existent',
});
await reachedStage('live');
eventStore.emit(FEATURE_ARCHIVED, { featureName: 'my_feature_a' });
await reachedStage('archived');
Expand Down

0 comments on commit 7cb9910

Please sign in to comment.