Add config validation for .env values

Wrap all int() conversions in try/except to handle malformed .env values
gracefully. Validate TICKET_API_KEY is not empty or placeholder value,
logging a warning instead of raising to preserve dry-run compatibility.

Resolves #17

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-10 12:58:02 -05:00
parent 7383a0c674
commit 38dd120da2

View File

@@ -169,15 +169,24 @@ class SystemHealthMonitor:
cls.CONFIG['CEPH_TICKET_NODE'] = value if value else None
logger.info(f"✓ Loaded CEPH_TICKET_NODE: {value}")
elif key == 'CEPH_USAGE_WARNING':
cls.CONFIG['CEPH_USAGE_WARNING'] = int(value)
try:
cls.CONFIG['CEPH_USAGE_WARNING'] = int(value)
except ValueError:
logger.warning(f"Invalid CEPH_USAGE_WARNING value: {value}")
elif key == 'CEPH_USAGE_CRITICAL':
cls.CONFIG['CEPH_USAGE_CRITICAL'] = int(value)
try:
cls.CONFIG['CEPH_USAGE_CRITICAL'] = int(value)
except ValueError:
logger.warning(f"Invalid CEPH_USAGE_CRITICAL value: {value}")
# Prometheus settings
elif key == 'PROMETHEUS_ENABLED':
cls.CONFIG['PROMETHEUS_ENABLED'] = value.lower() in ('true', '1', 'yes')
logger.info(f"✓ Loaded PROMETHEUS_ENABLED: {cls.CONFIG['PROMETHEUS_ENABLED']}")
elif key == 'PROMETHEUS_PORT':
cls.CONFIG['PROMETHEUS_PORT'] = int(value)
try:
cls.CONFIG['PROMETHEUS_PORT'] = int(value)
except ValueError:
logger.warning(f"Invalid PROMETHEUS_PORT value: {value}")
elif key == 'PROMETHEUS_TEXTFILE_PATH':
cls.CONFIG['PROMETHEUS_TEXTFILE_PATH'] = value if value else None
logger.info(f"✓ Loaded PROMETHEUS_TEXTFILE_PATH: {value}")
@@ -186,13 +195,24 @@ class SystemHealthMonitor:
cls.CONFIG['CLUSTER_NAME'] = value if value else 'proxmox-cluster'
logger.info(f"✓ Loaded CLUSTER_NAME: {value}")
elif key == 'NEW_DRIVE_HOURS_THRESHOLD':
cls.CONFIG['NEW_DRIVE_HOURS_THRESHOLD'] = int(value)
try:
cls.CONFIG['NEW_DRIVE_HOURS_THRESHOLD'] = int(value)
except ValueError:
logger.warning(f"Invalid NEW_DRIVE_HOURS_THRESHOLD value: {value}")
elif key == 'SMART_ERROR_RECENT_HOURS':
cls.CONFIG['SMART_ERROR_RECENT_HOURS'] = int(value)
try:
cls.CONFIG['SMART_ERROR_RECENT_HOURS'] = int(value)
except ValueError:
logger.warning(f"Invalid SMART_ERROR_RECENT_HOURS value: {value}")
except Exception as e:
logger.error(f"Failed to load .env file: {e}")
# Validate critical configuration
api_key = cls.CONFIG.get('TICKET_API_KEY')
if not api_key or api_key == 'your_api_key_here':
logger.warning("TICKET_API_KEY is not configured - ticket creation will fail (dry-run will still work)")
TICKET_TEMPLATES = {
'ACTION_TYPE': {
'AUTO': '[auto]',