diff options
author | Costa Tsaousis <costa@netdata.cloud> | 2023-07-12 21:08:44 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-12 21:08:44 +0300 |
commit | b61ddad5e631fe0fedd11ff835a642a42d5d71b8 (patch) | |
tree | 8a4e439af433cf83271b1d0be16d0a4a388255b4 /health | |
parent | 1fb7aeddcc5a85d458bcbd3a20d7b0b2939e3cfe (diff) |
agent alert notifications redirect (#15350)
* agent alert notifications redirect
* set the same cookies with SameSite: Strict
* registry search now requires only "for" parameter
* registry responses are not cacheable
* fix typo and add more error checking
* registry memory when mmap is used
* fix free with aral
Diffstat (limited to 'health')
-rw-r--r-- | health/health.c | 14 | ||||
-rwxr-xr-x | health/notifications/alarm-notify.sh.in | 31 |
2 files changed, 20 insertions, 25 deletions
diff --git a/health/health.c b/health/health.c index 4ae7e99974..c39677e250 100644 --- a/health/health.c +++ b/health/health.c @@ -81,8 +81,9 @@ static bool prepare_command(BUFFER *wb, const char *crit_alarms, const char *classification, const char *edit_command, - const char *machine_guid) -{ + const char *machine_guid, + uuid_t *transition_id +) { char buf[8192]; size_t n = 8192 - 1; @@ -188,6 +189,12 @@ static bool prepare_command(BUFFER *wb, return false; buffer_sprintf(wb, " '%s'", buf); + char tr_id[UUID_STR_LEN]; + uuid_unparse_lower(*transition_id, tr_id); + if (!sanitize_command_argument_string(buf, tr_id, n)) + return false; + buffer_sprintf(wb, " '%s'", buf); + return true; } @@ -575,7 +582,8 @@ static inline void health_alarm_execute(RRDHOST *host, ALARM_ENTRY *ae) { buffer_tostring(crit_alarms), ae->classification?ae_classification(ae):"Unknown", edit_command, - host != localhost ? host->machine_guid:""); + host->machine_guid, + &ae->transition_id); const char *command_to_run = buffer_tostring(wb); if (ok) { diff --git a/health/notifications/alarm-notify.sh.in b/health/notifications/alarm-notify.sh.in index 1867cf818f..3cff33db93 100755 --- a/health/notifications/alarm-notify.sh.in +++ b/health/notifications/alarm-notify.sh.in @@ -3,7 +3,7 @@ # netdata # real-time performance and health monitoring, done right! -# (C) 2017 Costa Tsaousis <costa@tsaousis.gr> +# (C) 2023 Netdata Inc. # SPDX-License-Identifier: GPL-3.0-or-later # # Script to send alarm notifications for netdata @@ -246,7 +246,8 @@ else total_crit_alarms="${26}" # List of alarms in critical state classification="${27}" # The class field from .conf files edit_command_line="${28}" # The command to edit the alarm, with the line number - child_machine_guid="${29}" # If populated, the notification is sent for a child + child_machine_guid="${29}" # the machine_guid of the child + transition_id="${30}" # the transition_id of the alert fi # ----------------------------------------------------------------------------- @@ -2488,31 +2489,17 @@ urlencode "${value_string}" >/dev/null url_value_string="${REPLY}" redirect_params="host=${url_host}&chart=${url_chart}&family=${url_family}&alarm=${url_name}&alarm_unique_id=${unique_id}&alarm_id=${alarm_id}&alarm_event_id=${event_id}&alarm_when=${when}&alarm_status=${status}&alarm_chart=${chart}&alarm_value=${url_value_string}" -GOTOCLOUD=0 -if [ "${NETDATA_REGISTRY_URL}" == "https://registry.my-netdata.io" ]; then - if [ -z "${NETDATA_REGISTRY_UNIQUE_ID}" ]; then - if [ -f "@registrydir_POST@/netdata.public.unique.id" ]; then - NETDATA_REGISTRY_UNIQUE_ID="$(cat "@registrydir_POST@/netdata.public.unique.id")" - fi - fi - if [ -n "${NETDATA_REGISTRY_UNIQUE_ID}" ]; then - GOTOCLOUD=1 - fi -fi - -if [ ${GOTOCLOUD} -eq 0 ]; then - goto_url="${NETDATA_REGISTRY_URL}/goto-host-from-alarm.html?${redirect_params}" -else - # Temporarily disable alarm redirection, as the cloud endpoint no longer exists. This functionality will be restored after discussion on #9487. For now, just lead to netdata.cloud - # Re-allow alarm redirection, for alarms 2.0, new template - if [ -z "${child_machine_guid}" ]; then - goto_url="${NETDATA_REGISTRY_CLOUD_BASE_URL}/alarms/redirect?agentId=${NETDATA_REGISTRY_UNIQUE_ID}&${redirect_params}" +if [ -z "${NETDATA_REGISTRY_UNIQUE_ID}" ]; then + if [ -f "@registrydir_POST@/netdata.public.unique.id" ]; then + NETDATA_REGISTRY_UNIQUE_ID="$(cat "@registrydir_POST@/netdata.public.unique.id")" else - goto_url="${NETDATA_REGISTRY_CLOUD_BASE_URL}/alarms/redirect?agentId=${NETDATA_REGISTRY_UNIQUE_ID}&childId=${child_machine_guid}&${redirect_params}" + error "failed to identify this agent via its NETDATA_REGISTRY_UNIQUE_ID." fi fi +goto_url="${NETDATA_REGISTRY_URL}/registry-alert-redirect.html?agent_machine_guid=${NETDATA_REGISTRY_UNIQUE_ID}&host_machine_guid=${child_machine_guid}&transition_id=${transition_id}&${redirect_params}" + # the severity of the alarm severity="${status}" |