provide defaults for threshold_configs
This commit is contained in:
+29
-8
@@ -14,6 +14,7 @@ import time
|
||||
from enum import Enum
|
||||
from typing import Dict, Any, Optional, Tuple, Callable
|
||||
from . import notify as notify_mod
|
||||
from .config import THRESHOLD_DEFAULTS
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
eventlog = notify_mod.eventlog
|
||||
@@ -386,29 +387,49 @@ class ThresholdChecker:
|
||||
def _parse_multi_config(self, config: Dict[str, Any]):
|
||||
"""Parse multiple named threshold configurations."""
|
||||
threshold_configs = config.get("threshold_configs", {})
|
||||
|
||||
|
||||
if not threshold_configs:
|
||||
logger.info("No threshold configurations defined")
|
||||
return
|
||||
|
||||
# Parse each named configuration
|
||||
|
||||
# Build effective_defaults: THRESHOLD_DEFAULTS merged with the 'default' config (if present).
|
||||
# All other configs inherit any metric not explicitly defined from effective_defaults.
|
||||
effective_defaults: Dict[str, ThresholdConfig] = {}
|
||||
for plugin_name, plugin_thresholds in THRESHOLD_DEFAULTS.get("thresholds", {}).items():
|
||||
if isinstance(plugin_thresholds, dict):
|
||||
self._parse_plugin_thresholds(plugin_name, plugin_thresholds, target_dict=effective_defaults)
|
||||
|
||||
if "default" in threshold_configs:
|
||||
default_data = threshold_configs["default"]
|
||||
if isinstance(default_data, dict) and "thresholds" in default_data:
|
||||
for plugin_name, plugin_thresholds in default_data["thresholds"].items():
|
||||
if isinstance(plugin_thresholds, dict):
|
||||
self._parse_plugin_thresholds(plugin_name, plugin_thresholds, target_dict=effective_defaults)
|
||||
|
||||
self.threshold_configs["default"] = dict(effective_defaults)
|
||||
logger.info("Registered 'default' threshold config with %d metrics", len(effective_defaults))
|
||||
|
||||
# Parse each named configuration, seeding it with effective_defaults first
|
||||
for config_name, config_data in threshold_configs.items():
|
||||
if config_name == "default":
|
||||
continue # already handled above
|
||||
|
||||
if not isinstance(config_data, dict):
|
||||
logger.warning("Invalid threshold config '%s', skipping", config_name)
|
||||
continue
|
||||
|
||||
|
||||
if "thresholds" not in config_data:
|
||||
logger.warning("No thresholds in config '%s', skipping", config_name)
|
||||
continue
|
||||
|
||||
|
||||
logger.info("Parsing threshold configuration: %s", config_name)
|
||||
self.threshold_configs[config_name] = {}
|
||||
|
||||
self.threshold_configs[config_name] = dict(effective_defaults)
|
||||
|
||||
thresholds_config = config_data["thresholds"]
|
||||
for plugin_name, plugin_thresholds in thresholds_config.items():
|
||||
if not isinstance(plugin_thresholds, dict):
|
||||
continue
|
||||
|
||||
|
||||
self._parse_plugin_thresholds(
|
||||
plugin_name,
|
||||
plugin_thresholds,
|
||||
|
||||
Reference in New Issue
Block a user