From 9aae0fe8dc871d135f410e8e42bd216f2f7ff855 Mon Sep 17 00:00:00 2001 From: Matthew Metcalf Date: Wed, 9 Oct 2024 09:49:21 -0700 Subject: [PATCH] Revert "Remove Telemetry from main (#37783)" This reverts commit a65dfb2c24a90c0b8218bbb968b92ea0abf2a5ff. --- .../provider/_client_manager.py | 2 ++ .../provider/_client_manager_base.py | 23 +++++++++++++++++++ .../provider/aio/_async_client_manager.py | 2 ++ 3 files changed, 27 insertions(+) diff --git a/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_client_manager.py b/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_client_manager.py index 9e028d695e2c..e9ae3b3b65f7 100644 --- a/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_client_manager.py +++ b/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_client_manager.py @@ -163,6 +163,7 @@ def load_feature_flags( loaded_feature_flags = [] # Needs to be removed unknown keyword argument for list_configuration_settings kwargs.pop("sentinel_keys", None) + endpoint = self._client._impl._config.endpoint # pylint: disable=protected-access filters_used: Dict[str, bool] = {} for select in feature_flag_selectors: feature_flags = self._client.list_configuration_settings( @@ -176,6 +177,7 @@ def load_feature_flags( feature_flag_value = json.loads(feature_flag.value) + self._feature_flag_telemetry(endpoint, feature_flag, feature_flag_value) self._feature_flag_appconfig_telemetry(feature_flag, filters_used) loaded_feature_flags.append(feature_flag_value) diff --git a/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_client_manager_base.py b/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_client_manager_base.py index 38cae3676180..cf7870a4681f 100644 --- a/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_client_manager_base.py +++ b/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/_client_manager_base.py @@ -20,6 +20,11 @@ PERCENTAGE_FILTER_KEY, TIME_WINDOW_FILTER_KEY, TARGETING_FILTER_KEY, + TELEMETRY_KEY, + METADATA_KEY, + ETAG_KEY, + FEATURE_FLAG_REFERENCE_KEY, + FEATURE_FLAG_ID_KEY, ) FALLBACK_CLIENT_REFRESH_EXPIRED_INTERVAL = 3600 # 1 hour in seconds @@ -40,6 +45,24 @@ def _calculate_feature_id(key, label): encoded_flag = encoded_flag.replace(b"+", b"-").replace(b"/", b"_") return encoded_flag[: encoded_flag.find(b"=")] + def _feature_flag_telemetry( + self, endpoint: str, feature_flag: FeatureFlagConfigurationSetting, feature_flag_value: Dict + ): + if TELEMETRY_KEY in feature_flag_value: + if METADATA_KEY not in feature_flag_value[TELEMETRY_KEY]: + feature_flag_value[TELEMETRY_KEY][METADATA_KEY] = {} + feature_flag_value[TELEMETRY_KEY][METADATA_KEY][ETAG_KEY] = feature_flag.etag + + if not endpoint.endswith("/"): + endpoint += "/" + feature_flag_reference = f"{endpoint}kv/{feature_flag.key}" + if feature_flag.label and not feature_flag.label.isspace(): + feature_flag_reference += f"?label={feature_flag.label}" + feature_flag_value[TELEMETRY_KEY][METADATA_KEY][FEATURE_FLAG_REFERENCE_KEY] = feature_flag_reference + feature_flag_value[TELEMETRY_KEY][METADATA_KEY][FEATURE_FLAG_ID_KEY] = self._calculate_feature_id( + feature_flag.key, feature_flag.label + ) + def _feature_flag_appconfig_telemetry( self, feature_flag: FeatureFlagConfigurationSetting, filters_used: Dict[str, bool] ): diff --git a/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/aio/_async_client_manager.py b/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/aio/_async_client_manager.py index 8f236695536a..6ba0fa43d1e9 100644 --- a/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/aio/_async_client_manager.py +++ b/sdk/appconfiguration/azure-appconfiguration-provider/azure/appconfiguration/provider/aio/_async_client_manager.py @@ -165,6 +165,7 @@ async def load_feature_flags( loaded_feature_flags = [] # Needs to be removed unknown keyword argument for list_configuration_settings kwargs.pop("sentinel_keys", None) + endpoint = self._client._impl._config.endpoint # pylint: disable=protected-access filters_used: Dict[str, bool] = {} for select in feature_flag_selectors: feature_flags = self._client.list_configuration_settings( @@ -178,6 +179,7 @@ async def load_feature_flags( feature_flag_value = json.loads(feature_flag.value) + self._feature_flag_telemetry(endpoint, feature_flag, feature_flag_value) self._feature_flag_appconfig_telemetry(feature_flag, filters_used) loaded_feature_flags.append(feature_flag_value)