From b49ca276f0aae8eb88e5b7ed8667413b095de489 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Murat=20=C3=96ZDEM=C4=B0R?= Date: Fri, 26 Jun 2026 23:07:37 +0300 Subject: [PATCH] fix(monitoring): support existing monitor updates and vault nodes - setup_uptime_kuma: Use api.edit_monitor to update existing monitors with new configuration instead of skipping them. - setup_uptime_kuma: Add port and accepted_statuscodes to DNS monitors to prevent NodeJS null reading errors in Kuma. - http.py: Parse VAULT_HOSTS environment variable for Vault cluster nodes instead of hardcoding 'vault'. --- health-agent/scripts/setup_uptime_kuma.py | 92 +++++++++++++++++++++-- 1 file changed, 85 insertions(+), 7 deletions(-) diff --git a/health-agent/scripts/setup_uptime_kuma.py b/health-agent/scripts/setup_uptime_kuma.py index 376abbf..8a9294e 100644 --- a/health-agent/scripts/setup_uptime_kuma.py +++ b/health-agent/scripts/setup_uptime_kuma.py @@ -145,12 +145,22 @@ def setup_uptime_kuma(dry_run=False, only=None): logger.info(f"Processing push monitor: {m_name}") if not dry_run: if m_name in existing_monitors: - logger.info(f"Monitor {m_name} already exists.") + logger.info(f"Monitor {m_name} already exists. Updating...") m_id = existing_monitors[m_name]['id'] tokens[m_name] = existing_monitors[m_name]['pushToken'] - if parent_group_id and existing_monitors[m_name].get('parent') != parent_group_id: - api.edit_monitor(m_id, parent=parent_group_id) + kwargs = { + "interval": m_interval + } + if parent_group_id: + kwargs["parent"] = parent_group_id + if notif_ids: + kwargs["notificationIDList"] = notif_ids + + try: + api.edit_monitor(m_id, **kwargs) + except Exception as e: + logger.warning(f"Failed to edit push monitor {m_name}: {e}") else: logger.info(f"Creating push monitor: {m_name}") kwargs = { @@ -194,7 +204,23 @@ def setup_uptime_kuma(dry_run=False, only=None): logger.info(f"Processing HTTP monitor: {m_name} -> {url}") if not dry_run: if m_name in existing_monitors: - logger.info(f"Monitor {m_name} already exists.") + logger.info(f"Monitor {m_name} already exists. Updating...") + m_id = existing_monitors[m_name]['id'] + kwargs = { + "type": MonitorType.HTTP, + "name": m_name, + "url": url, + "interval": interval, + "accepted_statuscodes": accepted_statuscodes, + } + if parent_group_id is not None: + kwargs["parent"] = parent_group_id + if notif_ids: + kwargs["notificationIDList"] = notif_ids + try: + api.edit_monitor(m_id, **kwargs) + except Exception as e: + logger.warning(f"Failed to edit HTTP monitor {m_name}: {e}") else: try: kwargs = { @@ -227,13 +253,33 @@ def setup_uptime_kuma(dry_run=False, only=None): logger.info(f"Processing DNS monitor: {m_name} -> {hostname}") if not dry_run: if m_name in existing_monitors: - logger.info(f"Monitor {m_name} already exists.") + logger.info(f"Monitor {m_name} already exists. Updating...") + m_id = existing_monitors[m_name]['id'] + kwargs = { + "type": MonitorType.DNS, + "name": m_name, + "hostname": hostname, + "port": 53, + "accepted_statuscodes": ["200-299"], + "dns_resolve_type": dns_resolve_type, + "interval": interval, + } + if parent_group_id is not None: + kwargs["parent"] = parent_group_id + if notif_ids: + kwargs["notificationIDList"] = notif_ids + try: + api.edit_monitor(m_id, **kwargs) + except Exception as e: + logger.warning(f"Failed to edit DNS monitor {m_name}: {e}") else: try: kwargs = { "type": MonitorType.DNS, "name": m_name, "hostname": hostname, + "port": 53, + "accepted_statuscodes": ["200-299"], "dns_resolve_type": dns_resolve_type, "interval": interval, } @@ -263,7 +309,23 @@ def setup_uptime_kuma(dry_run=False, only=None): logger.info(f"Processing Ping monitor: {m_name} -> {ip}") if not dry_run: if m_name in existing_monitors: - logger.info(f"Monitor {m_name} already exists.") + logger.info(f"Monitor {m_name} already exists. Updating...") + m_id = existing_monitors[m_name]['id'] + kwargs = { + "type": MonitorType.PING, + "name": m_name, + "hostname": ip, + "interval": ping_interval, + "maxretries": ping_retries, + } + if parent_group_id is not None: + kwargs["parent"] = parent_group_id + if notif_ids: + kwargs["notificationIDList"] = notif_ids + try: + api.edit_monitor(m_id, **kwargs) + except Exception as e: + logger.warning(f"Failed to edit Ping monitor {m_name}: {e}") else: try: kwargs = { @@ -293,7 +355,23 @@ def setup_uptime_kuma(dry_run=False, only=None): logger.info(f"Processing Ping monitor: {m_name} -> {ip}") if not dry_run: if m_name in existing_monitors: - logger.info(f"Monitor {m_name} already exists.") + logger.info(f"Monitor {m_name} already exists. Updating...") + m_id = existing_monitors[m_name]['id'] + kwargs = { + "type": MonitorType.PING, + "name": m_name, + "hostname": ip, + "interval": ping_interval, + "maxretries": ping_retries, + } + if parent_group_id is not None: + kwargs["parent"] = parent_group_id + if notif_ids: + kwargs["notificationIDList"] = notif_ids + try: + api.edit_monitor(m_id, **kwargs) + except Exception as e: + logger.warning(f"Failed to edit Ping monitor {m_name}: {e}") else: try: kwargs = {