"""Configuration loader and defaults for hbc (HeartBeat Client).""" import logging import os 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 # 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: ~/.hb.yaml) Returns: Dictionary with configuration """ cfg = CLIENT_DEFAULTS.copy() if not path: # default path (~/.hb.yaml) path = os.path.join(os.path.expanduser("~"), ".hb.yaml") if os.path.exists(path): if yaml: 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 pass return cfg