Skip to content

Commit 41962f8

Browse files
committed
ran validations and fixed formatting issues
1 parent df9272b commit 41962f8

4 files changed

Lines changed: 24 additions & 20 deletions

File tree

featuremanagement/azuremonitor/_send_telemetry.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,10 @@
2828
SpanProcessor = object # type: ignore
2929

3030

31-
_events_logger_initialized = False
31+
_EVENTS_LOGGER_INITIALIZED: list[bool] = []
3232

3333
def _initialize_event_logger() -> None:
34-
global _events_logger_initialized
35-
if _events_logger_initialized:
34+
if _EVENTS_LOGGER_INITIALIZED:
3635
return
3736

3837
if not HAS_OPENTELEMETRY_LOGGING:
@@ -43,7 +42,8 @@ def _initialize_event_logger() -> None:
4342

4443
_event_logger.addHandler(LoggingHandler())
4544
_event_logger.setLevel(INFO)
46-
_events_logger_initialized = True
45+
_EVENTS_LOGGER_INITIALIZED.append(True)
46+
4747

4848
FEATURE_NAME = "FeatureName"
4949
ENABLED = "Enabled"
@@ -80,11 +80,16 @@ def track_event(event_name: str, user: str, event_properties: Optional[Dict[str,
8080
event_properties[TARGETING_ID] = user
8181

8282
# Azure Monitor exporter maps this attribute to customEvent telemetry name.
83-
custom_event_attributes = {
84-
**event_properties,
85-
"microsoft.custom_event.name": event_name,
86-
}
87-
_event_logger.info(event_name, extra=custom_event_attributes)
83+
custom_event_attributes = {**event_properties, "microsoft.custom_event.name": event_name}
84+
85+
# logging raises KeyError if an `extra` key overwrites a built-in LogRecord attribute (e.g. "name", "message").
86+
reserved = logging.makeLogRecord({}).__dict__
87+
safe_attributes: Dict[str, Optional[str]] = {}
88+
for key, value in custom_event_attributes.items():
89+
safe_key = key if key not in reserved else f"telemetry.{key}"
90+
safe_attributes[safe_key] = value
91+
92+
_event_logger.info(event_name, extra=safe_attributes)
8893

8994

9095
def publish_telemetry(evaluation_event: EvaluationEvent) -> None:

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,10 @@ Homepage = "https://github.com/microsoft/FeatureManagement-Python"
5858
Issues = "https://github.com/microsoft/FeatureManagement-Python/issues"
5959

6060
[project.optional-dependencies]
61-
AzureMonitor = ["azure-monitor-opentelemetry < 2.0.0"]
61+
AzureMonitor = ["azure-monitor-opentelemetry < 2.0.0", "opentelemetry-instrumentation-logging >= 0.40b0, < 1.0.0"]
6262
test = [
6363
"azure-monitor-opentelemetry < 2.0.0",
64+
"opentelemetry-instrumentation-logging >= 0.40b0, < 1.0.0",
6465
]
6566
dev = [
6667
"pytest >= 7.0.0, < 10.0.0",

samples/requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
featuremanagement
22
azure-appconfiguration-provider
33
azure-monitor-opentelemetry
4-
azure-monitor-events-extension
54
quart
65
azure-identity

tests/test_send_telemetry_appinsights.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,17 +57,14 @@ def test_send_telemetry_appinsights(self):
5757
assert event_properties["Enabled"] == "True"
5858
assert event_properties["Variant"] == "TestVariant"
5959
assert event_properties["ETag"] == "cmwBRcIAq1jUyKL3Kj8bvf9jtxBrFg-R-ayExStMC90"
60-
assert (
61-
event_properties["FeatureFlagReference"]
62-
== "fake-store-uri/kv/.appconfig.featureflag/TestFeature"
63-
)
60+
assert event_properties["FeatureFlagReference"] == "fake-store-uri/kv/.appconfig.featureflag/TestFeature"
6461
assert event_properties["FeatureFlagId"] == "fake-feature-flag-id"
6562

6663
def test_track_event_preserves_reserved_custom_event_name(self):
67-
with patch("featuremanagement.azuremonitor._send_telemetry._initialize_event_logger"), patch(
68-
"featuremanagement.azuremonitor._send_telemetry._event_logger.info"
69-
) as mock_event_logger_info, patch(
70-
"featuremanagement.azuremonitor._send_telemetry.HAS_OPENTELEMETRY_LOGGING", True
64+
with (
65+
patch("featuremanagement.azuremonitor._send_telemetry._initialize_event_logger"),
66+
patch("featuremanagement.azuremonitor._send_telemetry._event_logger.info") as mock_event_logger_info,
67+
patch("featuremanagement.azuremonitor._send_telemetry.HAS_OPENTELEMETRY_LOGGING", True),
7168
):
7269
featuremanagement.azuremonitor._send_telemetry.track_event(
7370
"FeatureEvaluation",
@@ -80,7 +77,9 @@ def test_track_event_preserves_reserved_custom_event_name(self):
8077

8178
mock_event_logger_info.assert_called_once()
8279
assert mock_event_logger_info.call_args[0][0] == "FeatureEvaluation"
83-
assert mock_event_logger_info.call_args.kwargs["extra"]["microsoft.custom_event.name"] == "FeatureEvaluation"
80+
assert (
81+
mock_event_logger_info.call_args.kwargs["extra"]["microsoft.custom_event.name"] == "FeatureEvaluation"
82+
)
8483
assert mock_event_logger_info.call_args.kwargs["extra"]["CustomProperty"] == "custom_value"
8584
assert mock_event_logger_info.call_args.kwargs["extra"]["TargetingId"] == "test_user"
8685

0 commit comments

Comments
 (0)