Skip to content

Commit c2c3215

Browse files
ESS-3751: Extracted azure monitor config into own function with lock (#146)
* Extracted azure monitor config into own function with lock * Cleanup * Formatting * Bug snuck in * And a bit more formatting * Typo * One more typo * isort and black --------- Co-authored-by: Branislav Jenco <branislavjenco@gmail.com>
1 parent b474e39 commit c2c3215

2 files changed

Lines changed: 24 additions & 7 deletions

File tree

datareservoirio/_logging.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import logging
22
import os
3-
from functools import cache, wraps
3+
import threading
4+
from functools import lru_cache, wraps
45

56
from azure.monitor.opentelemetry import configure_azure_monitor
67

@@ -9,16 +10,32 @@
910
from ._constants import ENV_VAR_ENABLE_APP_INSIGHTS, ENV_VAR_ENGINE_ROOM_APP_ID
1011
from .globalsettings import environment
1112

13+
_configure_lock = threading.Lock()
14+
_configured_loggers = {}
1215

13-
@cache
16+
17+
def _ensure_azure_monitor_configured(connection_string, logger_name):
18+
cache_key = (connection_string, logger_name)
19+
20+
if cache_key not in _configured_loggers:
21+
with _configure_lock:
22+
# Double-check locking
23+
if cache_key not in _configured_loggers:
24+
configure_azure_monitor(
25+
connection_string=connection_string, logger_name=logger_name
26+
)
27+
_configured_loggers[cache_key] = True
28+
29+
30+
@lru_cache(maxsize=1)
1431
def get_exceptions_logger() -> logging.Logger:
1532
exceptions_logger = logging.getLogger(__name__ + "_exception_logger")
1633
exceptions_logger.setLevel(logging.DEBUG)
1734

1835
if os.getenv(ENV_VAR_ENABLE_APP_INSIGHTS) is not None:
1936
enable_app_insights = os.environ[ENV_VAR_ENABLE_APP_INSIGHTS].lower()
2037
if enable_app_insights == "true" or enable_app_insights == "1":
21-
configure_azure_monitor(
38+
_ensure_azure_monitor_configured(
2239
connection_string=environment._application_insight_connectionstring,
2340
logger_name=__name__ + "_exceptions_logger",
2441
)

datareservoirio/client.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from collections import defaultdict
66
from concurrent.futures import ThreadPoolExecutor
77
from datetime import datetime
8-
from functools import cache, wraps
8+
from functools import lru_cache, wraps
99
from operator import itemgetter
1010
from urllib.parse import urlencode
1111
from uuid import uuid4
@@ -25,22 +25,22 @@
2525

2626
from datareservoirio._constants import ENV_VAR_ENABLE_APP_INSIGHTS
2727

28-
from ._logging import log_decorator
28+
from ._logging import _ensure_azure_monitor_configured, log_decorator
2929
from ._utils import function_translation, period_translation
3030
from .globalsettings import environment
3131
from .storage import Storage
3232

3333
log = logging.getLogger(__name__)
3434

3535

36-
@cache
36+
@lru_cache(maxsize=1)
3737
def metric() -> logging.Logger:
3838
logger = logging.getLogger(__name__ + "_metric_appinsight")
3939
if os.getenv(ENV_VAR_ENABLE_APP_INSIGHTS) is not None:
4040
enable_app_insights = os.environ[ENV_VAR_ENABLE_APP_INSIGHTS].lower()
4141
if enable_app_insights == "true" or enable_app_insights == "1":
4242
logger.setLevel(logging.DEBUG)
43-
configure_azure_monitor(
43+
_ensure_azure_monitor_configured(
4444
connection_string=environment._application_insight_connectionstring,
4545
logger_name=__name__ + "_metric_appinsight",
4646
)

0 commit comments

Comments
 (0)