@@ -110,84 +110,6 @@ def update_max_variants(self, size: int) -> None:
110110 if self .max_variants is None or size > self .max_variants :
111111 self .max_variants = size
112112
113- def _get_features_string (self ) -> str :
114- """
115- Generate the features string for correlation context.
116-
117- :return: A string containing features used separated by delimiters.
118- :rtype: str
119- """
120- features_list = []
121-
122- if self .uses_load_balancing :
123- features_list .append (LOAD_BALANCING_FEATURE )
124- if self .uses_ai_configuration :
125- features_list .append (AI_CONFIGURATION_FEATURE )
126- if self .uses_aicc_configuration :
127- features_list .append (AI_CHAT_COMPLETION_FEATURE )
128- if self .get_assembly_version (AZURE_AI_PROJECTS_PACKAGE ):
129- features_list .append (AI_FOUNDRY_SDK_FEATURE )
130-
131- return Delimiter .join (features_list )
132-
133- def _create_features_string (self ) -> str :
134- """
135- Generate the features string for feature flag usage tracking.
136-
137- :return: A string containing feature flag usage tags separated by delimiters.
138- :rtype: str
139- """
140- features_list = []
141-
142- if self .uses_seed :
143- features_list .append (FEATURE_FLAG_USES_SEED_TAG )
144-
145- if self .uses_telemetry :
146- features_list .append (FEATURE_FLAG_USES_TELEMETRY_TAG )
147-
148- return Delimiter .join (features_list )
149-
150- @staticmethod
151- def get_host_type () -> str :
152- """
153- Detect the host environment type based on environment variables.
154-
155- :return: The detected host type.
156- :rtype: str
157- """
158- if os .environ .get (AzureFunctionEnvironmentVariable ):
159- return HostType .AZURE_FUNCTION
160- if os .environ .get (AzureWebAppEnvironmentVariable ):
161- return HostType .AZURE_WEB_APP
162- if os .environ .get (ContainerAppEnvironmentVariable ):
163- return HostType .CONTAINER_APP
164- if os .environ .get (KubernetesEnvironmentVariable ):
165- return HostType .KUBERNETES
166- if os .environ .get (ServiceFabricEnvironmentVariable ):
167- return HostType .SERVICE_FABRIC
168-
169- return HostType .UNIDENTIFIED
170-
171- @staticmethod
172- def get_assembly_version (package_name : str ) -> Optional [str ]:
173- """
174- Get the version of a Python package.
175-
176- :param package_name: The name of the package to get version for.
177- :type package_name: str
178- :return: Package version string or None if not found.
179- :rtype: Optional[str]
180- """
181- if not package_name :
182- return None
183-
184- try :
185- return version (package_name )
186- except PackageNotFoundError :
187- pass
188-
189- return None
190-
191113 def reset_ai_configuration_tracing (self ) -> None :
192114 """
193115 Reset AI configuration tracing flags.
@@ -276,12 +198,12 @@ def update_correlation_context_header(
276198 key_values .append ((MAX_VARIANTS_KEY , str (self .max_variants )))
277199
278200 # Add feature flag features if present
279- ff_features_string = self ._create_features_string ()
201+ ff_features_string = self ._create_ff_feature_string ()
280202 if ff_features_string :
281203 key_values .append ((FF_FEATURES_KEY , ff_features_string ))
282204
283205 # Add general features if present
284- features_string = self ._get_features_string ()
206+ features_string = self ._create_features_string ()
285207 if features_string :
286208 key_values .append ((FEATURES_KEY , features_string ))
287209
@@ -313,6 +235,67 @@ def update_correlation_context_header(
313235
314236 return headers
315237
238+ def update_feature_filter_telemetry (self , feature_flag ) -> None :
239+ """
240+ Track feature filter usage for App Configuration telemetry.
241+
242+ :param feature_flag: The feature flag to analyze for filter usage.
243+ :type feature_flag: FeatureFlagConfigurationSetting
244+ """
245+ # Constants are already imported at module level
246+
247+ if feature_flag .filters :
248+ for filter in feature_flag .filters :
249+ if filter .get ("name" ) in PERCENTAGE_FILTER_NAMES :
250+ self .feature_filter_usage [PERCENTAGE_FILTER_KEY ] = True
251+ elif filter .get ("name" ) in TIME_WINDOW_FILTER_NAMES :
252+ self .feature_filter_usage [TIME_WINDOW_FILTER_KEY ] = True
253+ elif filter .get ("name" ) in TARGETING_FILTER_NAMES :
254+ self .feature_filter_usage [TARGETING_FILTER_KEY ] = True
255+ else :
256+ self .feature_filter_usage [CUSTOM_FILTER_KEY ] = True
257+
258+ def reset_feature_filter_usage (self ) -> None :
259+ """Reset the feature filter usage tracking."""
260+ self .feature_filter_usage = {}
261+
262+ def _create_features_string (self ) -> str :
263+ """
264+ Generate the features string for correlation context.
265+
266+ :return: A string containing features used separated by delimiters.
267+ :rtype: str
268+ """
269+ features_list = []
270+
271+ if self .uses_load_balancing :
272+ features_list .append (LOAD_BALANCING_FEATURE )
273+ if self .uses_ai_configuration :
274+ features_list .append (AI_CONFIGURATION_FEATURE )
275+ if self .uses_aicc_configuration :
276+ features_list .append (AI_CHAT_COMPLETION_FEATURE )
277+ if self .get_assembly_version (AZURE_AI_PROJECTS_PACKAGE ):
278+ features_list .append (AI_FOUNDRY_SDK_FEATURE )
279+
280+ return Delimiter .join (features_list )
281+
282+ def _create_ff_feature_string (self ) -> str :
283+ """
284+ Generate the features string for feature flag usage tracking.
285+
286+ :return: A string containing feature flag usage tags separated by delimiters.
287+ :rtype: str
288+ """
289+ features_list = []
290+
291+ if self .uses_seed :
292+ features_list .append (FEATURE_FLAG_USES_SEED_TAG )
293+
294+ if self .uses_telemetry :
295+ features_list .append (FEATURE_FLAG_USES_TELEMETRY_TAG )
296+
297+ return Delimiter .join (features_list )
298+
316299 def _create_filters_string (self ) -> str :
317300 """
318301 Create a string representing the feature filters in use.
@@ -333,26 +316,43 @@ def _create_filters_string(self) -> str:
333316
334317 return Delimiter .join (filters )
335318
336- def update_feature_filter_telemetry (self , feature_flag ) -> None :
319+ @staticmethod
320+ def get_host_type () -> str :
337321 """
338- Track feature filter usage for App Configuration telemetry .
322+ Detect the host environment type based on environment variables .
339323
340- :param feature_flag : The feature flag to analyze for filter usage .
341- :type feature_flag: FeatureFlagConfigurationSetting
324+ :return : The detected host type .
325+ :rtype: str
342326 """
343- # Constants are already imported at module level
327+ if os .environ .get (AzureFunctionEnvironmentVariable ):
328+ return HostType .AZURE_FUNCTION
329+ if os .environ .get (AzureWebAppEnvironmentVariable ):
330+ return HostType .AZURE_WEB_APP
331+ if os .environ .get (ContainerAppEnvironmentVariable ):
332+ return HostType .CONTAINER_APP
333+ if os .environ .get (KubernetesEnvironmentVariable ):
334+ return HostType .KUBERNETES
335+ if os .environ .get (ServiceFabricEnvironmentVariable ):
336+ return HostType .SERVICE_FABRIC
344337
345- if feature_flag .filters :
346- for filter in feature_flag .filters :
347- if filter .get ("name" ) in PERCENTAGE_FILTER_NAMES :
348- self .feature_filter_usage [PERCENTAGE_FILTER_KEY ] = True
349- elif filter .get ("name" ) in TIME_WINDOW_FILTER_NAMES :
350- self .feature_filter_usage [TIME_WINDOW_FILTER_KEY ] = True
351- elif filter .get ("name" ) in TARGETING_FILTER_NAMES :
352- self .feature_filter_usage [TARGETING_FILTER_KEY ] = True
353- else :
354- self .feature_filter_usage [CUSTOM_FILTER_KEY ] = True
338+ return HostType .UNIDENTIFIED
355339
356- def reset_feature_filter_usage (self ) -> None :
357- """Reset the feature filter usage tracking."""
358- self .feature_filter_usage = {}
340+ @staticmethod
341+ def get_assembly_version (package_name : str ) -> Optional [str ]:
342+ """
343+ Get the version of a Python package.
344+
345+ :param package_name: The name of the package to get version for.
346+ :type package_name: str
347+ :return: Package version string or None if not found.
348+ :rtype: Optional[str]
349+ """
350+ if not package_name :
351+ return None
352+
353+ try :
354+ return version (package_name )
355+ except PackageNotFoundError :
356+ pass
357+
358+ return None
0 commit comments