diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-05 12:08:03 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-05 12:08:18 +0000 |
commit | 5da14042f70711ea5cf66e034699730335462f66 (patch) | |
tree | 0f6354ccac934ed87a2d555f45be4c831cf92f4a /web/api/health/health_cmdapi.c | |
parent | Releasing debian version 1.44.3-2. (diff) | |
download | netdata-5da14042f70711ea5cf66e034699730335462f66.tar.xz netdata-5da14042f70711ea5cf66e034699730335462f66.zip |
Merging upstream version 1.45.3+dfsg.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'web/api/health/health_cmdapi.c')
-rw-r--r-- | web/api/health/health_cmdapi.c | 204 |
1 files changed, 0 insertions, 204 deletions
diff --git a/web/api/health/health_cmdapi.c b/web/api/health/health_cmdapi.c deleted file mode 100644 index 27d062653..000000000 --- a/web/api/health/health_cmdapi.c +++ /dev/null @@ -1,204 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// -// Created by Christopher on 11/12/18. -// - -#include "health_cmdapi.h" - -/** - * Free Silencers - * - * Clean the silencer structure - * - * @param t is the structure that will be cleaned. - */ -void free_silencers(SILENCER *t) { - if (!t) return; - if (t->next) free_silencers(t->next); - netdata_log_debug(D_HEALTH, "HEALTH command API: Freeing silencer %s:%s:%s:%s", t->alarms, - t->charts, t->contexts, t->hosts); - simple_pattern_free(t->alarms_pattern); - simple_pattern_free(t->charts_pattern); - simple_pattern_free(t->contexts_pattern); - simple_pattern_free(t->hosts_pattern); - freez(t->alarms); - freez(t->charts); - freez(t->contexts); - freez(t->hosts); - freez(t); - return; -} - -/** - * Silencers to JSON Entry - * - * Fill the buffer with the other values given. - * - * @param wb a pointer to the output buffer - * @param var the json variable - * @param val the json value - * @param hasprev has it a previous value? - * - * @return - */ -int health_silencers2json_entry(BUFFER *wb, char* var, char* val, int hasprev) { - if (val) { - buffer_sprintf(wb, "%s\n\t\t\t\"%s\": \"%s\"", (hasprev)?",":"", var, val); - return 1; - } else { - return hasprev; - } -} - -/** - * Silencer to JSON - * - * Write the silencer values using JSON format inside a buffer. - * - * @param wb is the buffer to write the silencers. - */ -void health_silencers2json(BUFFER *wb) { - buffer_sprintf(wb, "{\n\t\"all\": %s," - "\n\t\"type\": \"%s\"," - "\n\t\"silencers\": [", - (silencers->all_alarms)?"true":"false", - (silencers->stype == STYPE_NONE)?"None":((silencers->stype == STYPE_DISABLE_ALARMS)?"DISABLE":"SILENCE")); - - SILENCER *silencer; - int i = 0, j = 0; - for(silencer = silencers->silencers; silencer ; silencer = silencer->next) { - if(likely(i)) buffer_strcat(wb, ","); - buffer_strcat(wb, "\n\t\t{"); - j=health_silencers2json_entry(wb, HEALTH_ALARM_KEY, silencer->alarms, j); - j=health_silencers2json_entry(wb, HEALTH_CHART_KEY, silencer->charts, j); - j=health_silencers2json_entry(wb, HEALTH_CONTEXT_KEY, silencer->contexts, j); - j=health_silencers2json_entry(wb, HEALTH_HOST_KEY, silencer->hosts, j); - j=0; - buffer_strcat(wb, "\n\t\t}"); - i++; - } - if(likely(i)) buffer_strcat(wb, "\n\t"); - buffer_strcat(wb, "]\n}\n"); -} - -/** - * Silencer to FILE - * - * Write the silencer buffer to a file. - * @param wb - */ -void health_silencers2file(BUFFER *wb) { - if (wb->len == 0) return; - - FILE *fd = fopen(silencers_filename, "wb"); - if(fd) { - size_t written = (size_t)fprintf(fd, "%s", wb->buffer) ; - if (written == wb->len ) { - netdata_log_info("Silencer changes written to %s", silencers_filename); - } - fclose(fd); - return; - } - netdata_log_error("Silencer changes could not be written to %s. Error %s", silencers_filename, strerror(errno)); -} - -/** - * Request V1 MGMT Health - * - * Function called by api to management the health. - * - * @param host main structure with client information! - * @param w is the structure with all information of the client request. - * @param url is the url that netdata is working - * - * @return It returns 200 on success and another code otherwise. - */ -int web_client_api_request_v1_mgmt_health(RRDHOST *host, struct web_client *w, char *url) { - int ret; - (void) host; - - BUFFER *wb = w->response.data; - buffer_flush(wb); - wb->content_type = CT_TEXT_PLAIN; - - buffer_flush(w->response.data); - - //Local instance of the silencer - SILENCER *silencer = NULL; - int config_changed = 1; - - if (!w->auth_bearer_token) { - buffer_strcat(wb, HEALTH_CMDAPI_MSG_AUTHERROR); - ret = HTTP_RESP_FORBIDDEN; - } else { - netdata_log_debug(D_HEALTH, "HEALTH command API: Comparing secret '%s' to '%s'", w->auth_bearer_token, api_secret); - if (strcmp(w->auth_bearer_token, api_secret)) { - buffer_strcat(wb, HEALTH_CMDAPI_MSG_AUTHERROR); - ret = HTTP_RESP_FORBIDDEN; - } else { - while (url) { - char *value = strsep_skip_consecutive_separators(&url, "&"); - if (!value || !*value) continue; - - char *key = strsep_skip_consecutive_separators(&value, "="); - if (!key || !*key) continue; - if (!value || !*value) continue; - - netdata_log_debug(D_WEB_CLIENT, "%llu: API v1 health query param '%s' with value '%s'", w->id, key, value); - - // name and value are now the parameters - if (!strcmp(key, "cmd")) { - if (!strcmp(value, HEALTH_CMDAPI_CMD_SILENCEALL)) { - silencers->all_alarms = 1; - silencers->stype = STYPE_SILENCE_NOTIFICATIONS; - buffer_strcat(wb, HEALTH_CMDAPI_MSG_SILENCEALL); - } else if (!strcmp(value, HEALTH_CMDAPI_CMD_DISABLEALL)) { - silencers->all_alarms = 1; - silencers->stype = STYPE_DISABLE_ALARMS; - buffer_strcat(wb, HEALTH_CMDAPI_MSG_DISABLEALL); - } else if (!strcmp(value, HEALTH_CMDAPI_CMD_SILENCE)) { - silencers->stype = STYPE_SILENCE_NOTIFICATIONS; - buffer_strcat(wb, HEALTH_CMDAPI_MSG_SILENCE); - } else if (!strcmp(value, HEALTH_CMDAPI_CMD_DISABLE)) { - silencers->stype = STYPE_DISABLE_ALARMS; - buffer_strcat(wb, HEALTH_CMDAPI_MSG_DISABLE); - } else if (!strcmp(value, HEALTH_CMDAPI_CMD_RESET)) { - silencers->all_alarms = 0; - silencers->stype = STYPE_NONE; - free_silencers(silencers->silencers); - silencers->silencers = NULL; - buffer_strcat(wb, HEALTH_CMDAPI_MSG_RESET); - } else if (!strcmp(value, HEALTH_CMDAPI_CMD_LIST)) { - w->response.data->content_type = CT_APPLICATION_JSON; - health_silencers2json(wb); - config_changed=0; - } - } else { - silencer = health_silencers_addparam(silencer, key, value); - } - } - - if (likely(silencer)) { - health_silencers_add(silencer); - buffer_strcat(wb, HEALTH_CMDAPI_MSG_ADDED); - if (silencers->stype == STYPE_NONE) { - buffer_strcat(wb, HEALTH_CMDAPI_MSG_STYPEWARNING); - } - } - if (unlikely(silencers->stype != STYPE_NONE && !silencers->all_alarms && !silencers->silencers)) { - buffer_strcat(wb, HEALTH_CMDAPI_MSG_NOSELECTORWARNING); - } - ret = HTTP_RESP_OK; - } - } - w->response.data = wb; - buffer_no_cacheable(w->response.data); - if (ret == HTTP_RESP_OK && config_changed) { - BUFFER *jsonb = buffer_create(200, &netdata_buffers_statistics.buffers_health); - health_silencers2json(jsonb); - health_silencers2file(jsonb); - buffer_free(jsonb); - } - - return ret; -} |