0504402a8a
- owner: optional top-level config key in ~/.hbc.yaml / ~/.hbc.json - Propagated into plugin configs at load time so os_info can include it - os_info PLG data carries owner field when set - udp: sets host.owner from os_info if not already configured server-side - live.html: format event log timestamps as YYYY-MM-DD HH:MM:SS (24-hour) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
"""Configuration loader and defaults for hbc (HeartBeat Client)."""
|
|
|
|
import logging
|
|
import os
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
try:
|
|
import yaml
|
|
except Exception:
|
|
yaml = None
|
|
|
|
CLIENT_DEFAULTS = {
|
|
# Network settings
|
|
"hb_port": 50003, # Port where hbd servers listen
|
|
"interval": 10, # Heartbeat interval in seconds
|
|
|
|
# Host identity
|
|
"owner": None, # Optional username to set as this host's owner on the server
|
|
|
|
# Runtime flags
|
|
"foreground": False,
|
|
"verbose": False,
|
|
"debug": 0,
|
|
|
|
# Plugin configuration
|
|
"plugins": {}, # Per-plugin configuration
|
|
"thresholds": {}, # Threshold configuration for monitoring
|
|
}
|
|
|
|
|
|
def load_config(path=None):
|
|
"""Load configuration from a YAML file and merge with client defaults.
|
|
|
|
If YAML is not available or the file does not exist, defaults are returned.
|
|
|
|
Args:
|
|
path: Path to YAML config file (default: ~/.hbc.yaml)
|
|
|
|
Returns:
|
|
Dictionary with configuration
|
|
"""
|
|
cfg = CLIENT_DEFAULTS.copy()
|
|
if not path:
|
|
# default path (~/.hbc.yaml)
|
|
path = os.path.join(os.path.expanduser("~"), ".hbc.yaml")
|
|
|
|
if os.path.exists(path):
|
|
if yaml:
|
|
logger.info("Loading configuration from %s", path)
|
|
with open(path) as fh:
|
|
data = yaml.safe_load(fh)
|
|
# Merge YAML data with defaults
|
|
# Keep all keys from YAML to support plugin configs and future extensions
|
|
for k, v in data.items():
|
|
cfg[k] = v
|
|
else:
|
|
# yaml not installed: do not attempt to parse; user must ensure defaults
|
|
logger.warning("PyYAML not available - cannot load config from %s, using defaults", path)
|
|
return cfg
|