provide defaults for threshold_configs
This commit is contained in:
Vendored
+2
-2
@@ -9,7 +9,7 @@
|
|||||||
"type": "debugpy",
|
"type": "debugpy",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"module": "hbd.server.cli",
|
"module": "hbd.server.cli",
|
||||||
"args": ["-c", "/home/andreas/git/heartbeat/.hb.yaml", "-f", "-v", "-x"],
|
"args": ["-c", "~/.hb.yaml", "-f", "-v", "-x"],
|
||||||
"cwd": "${workspaceFolder}",
|
"cwd": "${workspaceFolder}",
|
||||||
"env": {
|
"env": {
|
||||||
"PYTHONPATH": "${workspaceFolder}"
|
"PYTHONPATH": "${workspaceFolder}"
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
"type": "debugpy",
|
"type": "debugpy",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"module": "debugpy",
|
"module": "debugpy",
|
||||||
"args": ["--listen", "5678", "--wait-for-client", "-m", "hbd.server.cli", "-c", ".hb.yaml", "-f", "-v"],
|
"args": ["--listen", "5678", "--wait-for-client", "-m", "hbd.server.cli", "-c", "~/.hb.yaml", "-f", "-v"],
|
||||||
"env": { "PYTHONPATH": "${workspaceFolder}" },
|
"env": { "PYTHONPATH": "${workspaceFolder}" },
|
||||||
"console": "integratedTerminal",
|
"console": "integratedTerminal",
|
||||||
"justMyCode": false
|
"justMyCode": false
|
||||||
|
|||||||
@@ -69,6 +69,37 @@ SERVER_DEFAULTS = {
|
|||||||
"thresholds": {},
|
"thresholds": {},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
THRESHOLD_DEFAULTS = {
|
||||||
|
'thresholds': {
|
||||||
|
'cpu_monitor': {
|
||||||
|
'cpu_percent': {
|
||||||
|
'warning': 80.0,
|
||||||
|
'critical': 90.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'memory_monitor': {
|
||||||
|
'percent': {
|
||||||
|
'warning': 85.0,
|
||||||
|
'critical': 95.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'disk_monitor': {
|
||||||
|
'partitions': {
|
||||||
|
'/': {
|
||||||
|
'percent': {
|
||||||
|
'warning': 85.0,
|
||||||
|
'critical': 90.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'rtt': {
|
||||||
|
'warning': 200,
|
||||||
|
'critical': 250.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def load_config(path=None):
|
def load_config(path=None):
|
||||||
"""Load configuration from a YAML file and merge with server defaults.
|
"""Load configuration from a YAML file and merge with server defaults.
|
||||||
|
|||||||
@@ -3,6 +3,10 @@
|
|||||||
{% include 'head.html' %}
|
{% include 'head.html' %}
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
html, body {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
margin: 20px;
|
margin: 20px;
|
||||||
background: #f5f5f5;
|
background: #f5f5f5;
|
||||||
|
|||||||
+23
-2
@@ -14,6 +14,7 @@ import time
|
|||||||
from enum import Enum
|
from enum import Enum
|
||||||
from typing import Dict, Any, Optional, Tuple, Callable
|
from typing import Dict, Any, Optional, Tuple, Callable
|
||||||
from . import notify as notify_mod
|
from . import notify as notify_mod
|
||||||
|
from .config import THRESHOLD_DEFAULTS
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
eventlog = notify_mod.eventlog
|
eventlog = notify_mod.eventlog
|
||||||
@@ -391,8 +392,28 @@ class ThresholdChecker:
|
|||||||
logger.info("No threshold configurations defined")
|
logger.info("No threshold configurations defined")
|
||||||
return
|
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():
|
for config_name, config_data in threshold_configs.items():
|
||||||
|
if config_name == "default":
|
||||||
|
continue # already handled above
|
||||||
|
|
||||||
if not isinstance(config_data, dict):
|
if not isinstance(config_data, dict):
|
||||||
logger.warning("Invalid threshold config '%s', skipping", config_name)
|
logger.warning("Invalid threshold config '%s', skipping", config_name)
|
||||||
continue
|
continue
|
||||||
@@ -402,7 +423,7 @@ class ThresholdChecker:
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
logger.info("Parsing threshold configuration: %s", config_name)
|
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"]
|
thresholds_config = config_data["thresholds"]
|
||||||
for plugin_name, plugin_thresholds in thresholds_config.items():
|
for plugin_name, plugin_thresholds in thresholds_config.items():
|
||||||
|
|||||||
Reference in New Issue
Block a user