11import { LoggerFactory } from '../telemetry/LoggerFactory' ;
2+ import { ScopedTelemetry } from '../telemetry/ScopedTelemetry' ;
3+ import { Telemetry } from '../telemetry/TelemetryDecorator' ;
24import { Closeable } from '../utils/Closeable' ;
35import { toString } from '../utils/String' ;
46import { CompoundFeatureFlag } from './CombinedFeatureFlags' ;
@@ -17,6 +19,9 @@ import { FeatureFlag, TargetedFeatureFlag } from './FeatureFlagI';
1719const log = LoggerFactory . getLogger ( 'FeatureFlagSupplier' ) ;
1820
1921export class FeatureFlagSupplier implements Closeable {
22+ @Telemetry ( )
23+ private readonly telemetry ! : ScopedTelemetry ;
24+
2025 private readonly _featureFlags = new Map < FeatureFlagConfigKey , FeatureFlag | DynamicFeatureFlag > ( ) ;
2126 private readonly _targetedFeatureFlags = new Map <
2227 TargetedFeatureFlagConfigKey ,
@@ -27,7 +32,7 @@ export class FeatureFlagSupplier implements Closeable {
2732 for ( const [ key , builder ] of Object . entries ( FeatureBuilders ) ) {
2833 const ff = new DynamicFeatureFlag (
2934 key ,
30- ( ) => featureConfigSupplier ( key , configSupplier , defaultConfig ) ,
35+ ( ) => featureConfigSupplier ( key , configSupplier , defaultConfig , this . telemetry ) ,
3136 builder ,
3237 ) ;
3338 this . _featureFlags . set ( key , ff ) ;
@@ -36,7 +41,7 @@ export class FeatureFlagSupplier implements Closeable {
3641 for ( const [ key , builder ] of Object . entries ( TargetedFeatureBuilders ) ) {
3742 const ff = new DynamicTargetedFeatureFlag (
3843 key ,
39- ( ) => featureConfigSupplier ( key , configSupplier , defaultConfig ) ,
44+ ( ) => featureConfigSupplier ( key , configSupplier , defaultConfig , this . telemetry ) ,
4045 builder ,
4146 ) ;
4247 this . _targetedFeatureFlags . set ( key , ff ) ;
@@ -77,10 +82,13 @@ function featureConfigSupplier(
7782 key : string ,
7883 configSupplier : ( ) => unknown ,
7984 defaultConfig : ( ) => unknown ,
85+ telemetry : ScopedTelemetry ,
8086) : FeatureFlagConfigType | undefined {
87+ telemetry . count ( 'used.config.default' , 0 ) ;
8188 try {
8289 return FeatureFlagConfigSchema . parse ( configSupplier ( ) ) . features [ key ] ;
8390 } catch ( err ) {
91+ telemetry . count ( 'used.config.default' , 1 ) ;
8492 log . warn ( err , `Failed to parse feature flag config: \n${ toString ( configSupplier ( ) ) } . Using defaults instead` ) ;
8593 return FeatureFlagConfigSchema . parse ( defaultConfig ( ) ) . features [ key ] ;
8694 }
0 commit comments