123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- // SPDX-License-Identifier: GPL-3.0-or-later
- #define NETDATA_RRD_INTERNALS
- #include "rrdfunctions-internals.h"
- #include "rrdfunctions-exporters.h"
- void rrd_chart_functions_expose_rrdpush(RRDSET *st, BUFFER *wb) {
- if(!st->functions_view)
- return;
- struct rrd_host_function *t;
- dfe_start_read(st->functions_view, t) {
- if(t->options & RRD_FUNCTION_DYNCFG) continue;
- buffer_sprintf(wb
- , PLUGINSD_KEYWORD_FUNCTION " \"%s\" %d \"%s\" \"%s\" \"%s\" %d\n"
- , t_dfe.name
- , t->timeout
- , string2str(t->help)
- , string2str(t->tags)
- , http_id2access(t->access)
- ,
- t->priority
- );
- }
- dfe_done(t);
- }
- void rrd_global_functions_expose_rrdpush(RRDHOST *host, BUFFER *wb, bool dyncfg) {
- rrdhost_flag_clear(host, RRDHOST_FLAG_GLOBAL_FUNCTIONS_UPDATED);
- size_t configs = 0;
- struct rrd_host_function *tmp;
- dfe_start_read(host->functions, tmp) {
- if(tmp->options & RRD_FUNCTION_LOCAL) continue;
- if(tmp->options & RRD_FUNCTION_DYNCFG) {
- // we should not send dyncfg to this parent
- configs++;
- continue;
- }
- buffer_sprintf(wb
- , PLUGINSD_KEYWORD_FUNCTION " GLOBAL \"%s\" %d \"%s\" \"%s\" \"%s\" %d\n"
- , tmp_dfe.name
- , tmp->timeout
- , string2str(tmp->help)
- , string2str(tmp->tags)
- , http_id2access(tmp->access)
- , tmp->priority
- );
- }
- dfe_done(tmp);
- if(dyncfg && configs)
- dyncfg_add_streaming(wb);
- }
- static void functions2json(DICTIONARY *functions, BUFFER *wb) {
- struct rrd_host_function *t;
- dfe_start_read(functions, t) {
- if (!rrd_collector_running(t->collector)) continue;
- if(t->options & RRD_FUNCTION_DYNCFG) continue;
- buffer_json_member_add_object(wb, t_dfe.name);
- {
- buffer_json_member_add_string_or_empty(wb, "help", string2str(t->help));
- buffer_json_member_add_int64(wb, "timeout", (int64_t) t->timeout);
- char options[65];
- snprintfz(
- options, 64
- , "%s%s"
- , (t->options & RRD_FUNCTION_LOCAL) ? "LOCAL " : ""
- , (t->options & RRD_FUNCTION_GLOBAL) ? "GLOBAL" : ""
- );
- buffer_json_member_add_string_or_empty(wb, "options", options);
- buffer_json_member_add_string_or_empty(wb, "tags", string2str(t->tags));
- buffer_json_member_add_string(wb, "access", http_id2access(t->access));
- buffer_json_member_add_uint64(wb, "priority", t->priority);
- }
- buffer_json_object_close(wb);
- }
- dfe_done(t);
- }
- void chart_functions2json(RRDSET *st, BUFFER *wb) {
- if(!st || !st->functions_view) return;
- functions2json(st->functions_view, wb);
- }
- void host_functions2json(RRDHOST *host, BUFFER *wb) {
- if(!host || !host->functions) return;
- buffer_json_member_add_object(wb, "functions");
- struct rrd_host_function *t;
- dfe_start_read(host->functions, t) {
- if(!rrd_collector_running(t->collector)) continue;
- if(t->options & RRD_FUNCTION_DYNCFG) continue;
- buffer_json_member_add_object(wb, t_dfe.name);
- {
- buffer_json_member_add_string(wb, "help", string2str(t->help));
- buffer_json_member_add_int64(wb, "timeout", t->timeout);
- buffer_json_member_add_array(wb, "options");
- {
- if (t->options & RRD_FUNCTION_GLOBAL)
- buffer_json_add_array_item_string(wb, "GLOBAL");
- if (t->options & RRD_FUNCTION_LOCAL)
- buffer_json_add_array_item_string(wb, "LOCAL");
- }
- buffer_json_array_close(wb);
- buffer_json_member_add_string(wb, "tags", string2str(t->tags));
- buffer_json_member_add_string(wb, "access", http_id2access(t->access));
- buffer_json_member_add_uint64(wb, "priority", t->priority);
- }
- buffer_json_object_close(wb);
- }
- dfe_done(t);
- buffer_json_object_close(wb);
- }
- void chart_functions_to_dict(DICTIONARY *rrdset_functions_view, DICTIONARY *dst, void *value, size_t value_size) {
- if(!rrdset_functions_view || !dst) return;
- struct rrd_host_function *t;
- dfe_start_read(rrdset_functions_view, t) {
- if(!rrd_collector_running(t->collector)) continue;
- if(t->options & RRD_FUNCTION_DYNCFG) continue;
- dictionary_set(dst, t_dfe.name, value, value_size);
- }
- dfe_done(t);
- }
- void host_functions_to_dict(RRDHOST *host, DICTIONARY *dst, void *value, size_t value_size, STRING **help, STRING **tags, HTTP_ACCESS *access, int *priority) {
- if(!host || !host->functions || !dictionary_entries(host->functions) || !dst) return;
- struct rrd_host_function *t;
- dfe_start_read(host->functions, t) {
- if(!rrd_collector_running(t->collector)) continue;
- if(t->options & RRD_FUNCTION_DYNCFG) continue;
- if(help)
- *help = t->help;
- if(tags)
- *tags = t->tags;
- if(access)
- *access = t->access;
- if(priority)
- *priority = t->priority;
- dictionary_set(dst, t_dfe.name, value, value_size);
- }
- dfe_done(t);
- }
|