summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/knot_resolver/constants.py9
-rw-r--r--python/knot_resolver/constants.py.in9
-rw-r--r--python/knot_resolver/manager/files/watchdog.py22
-rw-r--r--python/knot_resolver/manager/metrics/prometheus.py12
4 files changed, 32 insertions, 20 deletions
diff --git a/python/knot_resolver/constants.py b/python/knot_resolver/constants.py
index f37bb2af..b4cfa59e 100644
--- a/python/knot_resolver/constants.py
+++ b/python/knot_resolver/constants.py
@@ -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
diff --git a/python/knot_resolver/constants.py.in b/python/knot_resolver/constants.py.in
index 0f1c3a88..35c25ac6 100644
--- a/python/knot_resolver/constants.py.in
+++ b/python/knot_resolver/constants.py.in
@@ -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
diff --git a/python/knot_resolver/manager/files/watchdog.py b/python/knot_resolver/manager/files/watchdog.py
index 64547192..5dcc2d5e 100644
--- a/python/knot_resolver/manager/files/watchdog.py
+++ b/python/knot_resolver/manager/files/watchdog.py
@@ -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)
diff --git a/python/knot_resolver/manager/metrics/prometheus.py b/python/knot_resolver/manager/metrics/prometheus.py
index 5dd0d171..4242d960 100644
--- a/python/knot_resolver/manager/metrics/prometheus.py
+++ b/python/knot_resolver/manager/metrics/prometheus.py
@@ -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()