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:
@@ -169,15 +169,24 @@ class SystemHealthMonitor:
|
|||||||
cls.CONFIG['CEPH_TICKET_NODE'] = value if value else None
|
cls.CONFIG['CEPH_TICKET_NODE'] = value if value else None
|
||||||
logger.info(f"✓ Loaded CEPH_TICKET_NODE: {value}")
|
logger.info(f"✓ Loaded CEPH_TICKET_NODE: {value}")
|
||||||
elif key == 'CEPH_USAGE_WARNING':
|
elif key == 'CEPH_USAGE_WARNING':
|
||||||
|
try:
|
||||||
cls.CONFIG['CEPH_USAGE_WARNING'] = int(value)
|
cls.CONFIG['CEPH_USAGE_WARNING'] = int(value)
|
||||||
|
except ValueError:
|
||||||
|
logger.warning(f"Invalid CEPH_USAGE_WARNING value: {value}")
|
||||||
elif key == 'CEPH_USAGE_CRITICAL':
|
elif key == 'CEPH_USAGE_CRITICAL':
|
||||||
|
try:
|
||||||
cls.CONFIG['CEPH_USAGE_CRITICAL'] = int(value)
|
cls.CONFIG['CEPH_USAGE_CRITICAL'] = int(value)
|
||||||
|
except ValueError:
|
||||||
|
logger.warning(f"Invalid CEPH_USAGE_CRITICAL value: {value}")
|
||||||
# Prometheus settings
|
# Prometheus settings
|
||||||
elif key == 'PROMETHEUS_ENABLED':
|
elif key == 'PROMETHEUS_ENABLED':
|
||||||
cls.CONFIG['PROMETHEUS_ENABLED'] = value.lower() in ('true', '1', 'yes')
|
cls.CONFIG['PROMETHEUS_ENABLED'] = value.lower() in ('true', '1', 'yes')
|
||||||
logger.info(f"✓ Loaded PROMETHEUS_ENABLED: {cls.CONFIG['PROMETHEUS_ENABLED']}")
|
logger.info(f"✓ Loaded PROMETHEUS_ENABLED: {cls.CONFIG['PROMETHEUS_ENABLED']}")
|
||||||
elif key == 'PROMETHEUS_PORT':
|
elif key == 'PROMETHEUS_PORT':
|
||||||
|
try:
|
||||||
cls.CONFIG['PROMETHEUS_PORT'] = int(value)
|
cls.CONFIG['PROMETHEUS_PORT'] = int(value)
|
||||||
|
except ValueError:
|
||||||
|
logger.warning(f"Invalid PROMETHEUS_PORT value: {value}")
|
||||||
elif key == 'PROMETHEUS_TEXTFILE_PATH':
|
elif key == 'PROMETHEUS_TEXTFILE_PATH':
|
||||||
cls.CONFIG['PROMETHEUS_TEXTFILE_PATH'] = value if value else None
|
cls.CONFIG['PROMETHEUS_TEXTFILE_PATH'] = value if value else None
|
||||||
logger.info(f"✓ Loaded PROMETHEUS_TEXTFILE_PATH: {value}")
|
logger.info(f"✓ Loaded PROMETHEUS_TEXTFILE_PATH: {value}")
|
||||||
@@ -186,13 +195,24 @@ class SystemHealthMonitor:
|
|||||||
cls.CONFIG['CLUSTER_NAME'] = value if value else 'proxmox-cluster'
|
cls.CONFIG['CLUSTER_NAME'] = value if value else 'proxmox-cluster'
|
||||||
logger.info(f"✓ Loaded CLUSTER_NAME: {value}")
|
logger.info(f"✓ Loaded CLUSTER_NAME: {value}")
|
||||||
elif key == 'NEW_DRIVE_HOURS_THRESHOLD':
|
elif key == 'NEW_DRIVE_HOURS_THRESHOLD':
|
||||||
|
try:
|
||||||
cls.CONFIG['NEW_DRIVE_HOURS_THRESHOLD'] = int(value)
|
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':
|
elif key == 'SMART_ERROR_RECENT_HOURS':
|
||||||
|
try:
|
||||||
cls.CONFIG['SMART_ERROR_RECENT_HOURS'] = int(value)
|
cls.CONFIG['SMART_ERROR_RECENT_HOURS'] = int(value)
|
||||||
|
except ValueError:
|
||||||
|
logger.warning(f"Invalid SMART_ERROR_RECENT_HOURS value: {value}")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Failed to load .env file: {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 = {
|
TICKET_TEMPLATES = {
|
||||||
'ACTION_TYPE': {
|
'ACTION_TYPE': {
|
||||||
'AUTO': '[auto]',
|
'AUTO': '[auto]',
|
||||||
|
|||||||
Reference in New Issue
Block a user