@@ -29,11 +29,14 @@ import {
2929 SEED_KEY_NAME ,
3030 VARIANT_KEY_NAME ,
3131 VARIANTS_KEY_NAME ,
32- CONFIGURATION_VALUE_KEY_NAME
32+ CONFIGURATION_VALUE_KEY_NAME ,
33+ CONDITIONS_KEY_NAME ,
34+ CLIENT_FILTERS_KEY_NAME
3335} from "./featureManagement/constants.js" ;
3436import { AzureKeyVaultKeyValueAdapter } from "./keyvault/AzureKeyVaultKeyValueAdapter.js" ;
3537import { RefreshTimer } from "./refresh/RefreshTimer.js" ;
3638import { RequestTracingOptions , getConfigurationSettingWithTrace , listConfigurationSettingsWithTrace , requestTracingEnabled } from "./requestTracing/utils.js" ;
39+ import { FeatureFlagTracingOptions } from "./requestTracing/FeatureFlagTracingOptions.js" ;
3740import { KeyFilter , LabelFilter , SettingSelector } from "./types.js" ;
3841import { ConfigurationClientManager } from "./ConfigurationClientManager.js" ;
3942
@@ -61,6 +64,7 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
6164 #options: AzureAppConfigurationOptions | undefined ;
6265 #isInitialLoadCompleted: boolean = false ;
6366 #isFailoverRequest: boolean = false ;
67+ #featureFlagTracing: FeatureFlagTracingOptions | undefined ;
6468
6569 // Refresh
6670 #refreshInProgress: boolean = false ;
@@ -92,6 +96,9 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
9296
9397 // Enable request tracing if not opt-out
9498 this . #requestTracingEnabled = requestTracingEnabled ( ) ;
99+ if ( this . #requestTracingEnabled) {
100+ this . #featureFlagTracing = new FeatureFlagTracingOptions ( ) ;
101+ }
95102
96103 if ( options ?. trimKeyPrefixes ) {
97104 this . #sortedTrimKeyPrefixes = [ ...options . trimKeyPrefixes ] . sort ( ( a , b ) => b . localeCompare ( a ) ) ;
@@ -203,7 +210,8 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
203210 appConfigOptions : this . #options,
204211 initialLoadCompleted : this . #isInitialLoadCompleted,
205212 replicaCount : this . #clientManager. getReplicaCount ( ) ,
206- isFailoverRequest : this . #isFailoverRequest
213+ isFailoverRequest : this . #isFailoverRequest,
214+ featureFlagTracing : this . #featureFlagTracing
207215 } ;
208216 }
209217
@@ -367,6 +375,10 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
367375
368376 const featureFlagSettings = await this . #executeWithFailoverPolicy( funcToExecute ) as ConfigurationSetting [ ] ;
369377
378+ if ( this . #requestTracingEnabled && this . #featureFlagTracing !== undefined ) {
379+ this . #featureFlagTracing. resetFeatureFlagTracing ( ) ;
380+ }
381+
370382 // parse feature flags
371383 const featureFlags = await Promise . all (
372384 featureFlagSettings . map ( setting => this . #parseFeatureFlag( setting ) )
@@ -647,6 +659,25 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
647659 } ;
648660 }
649661
662+ if ( this . #requestTracingEnabled && this . #featureFlagTracing !== undefined ) {
663+ if ( featureFlag [ CONDITIONS_KEY_NAME ] &&
664+ featureFlag [ CONDITIONS_KEY_NAME ] [ CLIENT_FILTERS_KEY_NAME ] &&
665+ Array . isArray ( featureFlag [ CONDITIONS_KEY_NAME ] [ CLIENT_FILTERS_KEY_NAME ] ) ) {
666+ for ( const filter of featureFlag [ CONDITIONS_KEY_NAME ] [ CLIENT_FILTERS_KEY_NAME ] ) {
667+ this . #featureFlagTracing. updateFeatureFilterTracing ( filter [ NAME_KEY_NAME ] ) ;
668+ }
669+ }
670+ if ( featureFlag [ VARIANTS_KEY_NAME ] && Array . isArray ( featureFlag [ VARIANTS_KEY_NAME ] ) ) {
671+ this . #featureFlagTracing. notifyMaxVariants ( featureFlag [ VARIANTS_KEY_NAME ] . length ) ;
672+ }
673+ if ( featureFlag [ TELEMETRY_KEY_NAME ] && featureFlag [ TELEMETRY_KEY_NAME ] [ ENABLED_KEY_NAME ] ) {
674+ this . #featureFlagTracing. usesTelemetry = true ;
675+ }
676+ if ( featureFlag [ ALLOCATION_KEY_NAME ] && featureFlag [ ALLOCATION_KEY_NAME ] [ SEED_KEY_NAME ] ) {
677+ this . #featureFlagTracing. usesSeed = true ;
678+ }
679+ }
680+
650681 return featureFlag ;
651682 }
652683
0 commit comments