]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
python: constants: added optional dependency import check (prometheus and watchdog)
authorAleš Mrázek <ales.mrazek@nic.cz>
Mon, 6 Jan 2025 15:01:43 +0000 (16:01 +0100)
committerAleš Mrázek <ales.mrazek@nic.cz>
Tue, 14 Jan 2025 09:03:29 +0000 (10:03 +0100)
python/knot_resolver/constants.py
python/knot_resolver/constants.py.in
python/knot_resolver/manager/files/watchdog.py
python/knot_resolver/manager/metrics/prometheus.py

index f37bb2af9dbec19097f25f58b1bd18a20ea94c01..b4cfa59e18a5a5f7dc9d0ab0d58ed8dd17db8d66 100644 (file)
@@ -1,3 +1,4 @@
+import importlib.util
 from pathlib import Path
 
 VERSION = "6.0.9"
@@ -17,3 +18,11 @@ API_SOCK_FILE = RUN_DIR / "kres-api.sock"
 # executables paths
 KRESD_EXECUTABLE = SBIN_DIR / "kresd"
 KRES_CACHE_GC_EXECUTABLE = SBIN_DIR / "kres-cache-gc"
+
+WATCHDOG_LIB = False
+if importlib.util.find_spec("watchdog"):
+    WATCHDOG_LIB = True
+
+PROMETHEUS_LIB = False
+if importlib.util.find_spec("prometheus_client"):
+    PROMETHEUS_LIB = True
index 0f1c3a882f6186072c6ee7faf088d00c16c99dbd..35c25ac645a08c9863604661cfc85ceef713d3aa 100644 (file)
@@ -1,3 +1,4 @@
+import importlib.util
 from pathlib import Path
 
 VERSION = "@version@"
@@ -17,3 +18,11 @@ API_SOCK_FILE = RUN_DIR / "kres-api.sock"
 # executables paths
 KRESD_EXECUTABLE = SBIN_DIR / "kresd"
 KRES_CACHE_GC_EXECUTABLE = SBIN_DIR / "kres-cache-gc"
+
+WATCHDOG_LIB = False
+if importlib.util.find_spec("watchdog"):
+    WATCHDOG_LIB = True
+
+PROMETHEUS_LIB = False
+if importlib.util.find_spec("prometheus_client"):
+    PROMETHEUS_LIB = True
index 64547192e1d60460c54577b0cc94c449e6e5d49a..5dcc2d5eaf7d2b962521fa3934c882d9830513a3 100644 (file)
@@ -1,19 +1,15 @@
-import importlib
 import logging
 from pathlib import Path
 from threading import Timer
 from typing import List, Optional
 
+from knot_resolver.constants import WATCHDOG_LIB
 from knot_resolver.controller.registered_workers import command_registered_workers
 from knot_resolver.datamodel import KresConfig
 from knot_resolver.datamodel.types import File
 from knot_resolver.manager.config_store import ConfigStore, only_on_real_changes_update
 from knot_resolver.utils import compat
 
-_watchdog = False
-if importlib.util.find_spec("watchdog"):
-    _watchdog = True
-
 logger = logging.getLogger(__name__)
 
 
@@ -25,7 +21,7 @@ def tls_cert_paths(config: KresConfig) -> List[str]:
     return [str(file) for file in files if file is not None]
 
 
-if _watchdog:
+if WATCHDOG_LIB:
     from watchdog.events import (
         FileSystemEvent,
         FileSystemEventHandler,
@@ -112,13 +108,16 @@ if _watchdog:
             self._observer.stop()
             self._observer.join()
 
-    @only_on_real_changes_update(tls_cert_paths)
-    async def _init_tls_cert_watchdog(config: KresConfig) -> None:
+
+@only_on_real_changes_update(tls_cert_paths)
+async def _init_tls_cert_watchdog(config: KresConfig) -> None:
+    if WATCHDOG_LIB:
         global _tls_cert_watchdog
+
         if _tls_cert_watchdog:
             _tls_cert_watchdog.stop()
 
-        if config.network.tls.cert_file and config.network.tls.key_file:
+        if config.network.tls.files_watchdog and config.network.tls.cert_file and config.network.tls.key_file:
             logger.info("Initializing TLS certificate files WatchDog")
             _tls_cert_watchdog = TLSCertWatchDog(
                 config.network.tls.cert_file.to_path(),
@@ -128,6 +127,5 @@ if _watchdog:
 
 
 async def init_files_watchdog(config_store: ConfigStore) -> None:
-    if _watchdog:
-        # watchdog for TLS certificate files
-        await config_store.register_on_change_callback(_init_tls_cert_watchdog)
+    # watchdog for TLS certificate files
+    await config_store.register_on_change_callback(_init_tls_cert_watchdog)
index 5dd0d1719e7b833cd3beb4832f5bb6b0c2dc8d60..4242d960e20428448f1c4d06417eb2c19eb8370b 100644 (file)
@@ -1,8 +1,8 @@
 import asyncio
-import importlib
 import logging
 from typing import Any, Dict, Generator, List, Optional, Tuple
 
+from knot_resolver.constants import PROMETHEUS_LIB
 from knot_resolver.controller.interface import KresID
 from knot_resolver.controller.registered_workers import get_registered_workers_kresids
 from knot_resolver.datamodel.config_schema import KresConfig
@@ -12,13 +12,9 @@ from knot_resolver.utils.functional import Result
 
 from .collect import collect_kresd_workers_metrics
 
-_prometheus_client = False
-if importlib.util.find_spec("prometheus_client"):
-    _prometheus_client = True
-
 logger = logging.getLogger(__name__)
 
-if _prometheus_client:
+if PROMETHEUS_LIB:
     from prometheus_client import exposition  # type: ignore
     from prometheus_client.bridge.graphite import GraphiteBridge  # type: ignore
     from prometheus_client.core import (
@@ -359,7 +355,7 @@ async def init_prometheus(config_store: ConfigStore) -> None:
     """
     Initialize metrics collection. Must be called before any other function from this module.
     """
-    if _prometheus_client:
+    if PROMETHEUS_LIB:
         # init and register metrics collector
         global _metrics_collector
         _metrics_collector = KresPrometheusMetricsCollector(config_store)
@@ -371,7 +367,7 @@ async def init_prometheus(config_store: ConfigStore) -> None:
 
 
 async def report_prometheus() -> Optional[bytes]:
-    if _prometheus_client:
+    if PROMETHEUS_LIB:
         # manually trigger stat collection so that we do not have to wait for it
         if _metrics_collector is not None:
             await _metrics_collector.collect_kresd_stats()