summaryrefslogtreecommitdiffstats
path: root/src/plugins.d/pluginsd_dyncfg.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins.d/pluginsd_dyncfg.c')
-rw-r--r--src/plugins.d/pluginsd_dyncfg.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/plugins.d/pluginsd_dyncfg.c b/src/plugins.d/pluginsd_dyncfg.c
new file mode 100644
index 000000000..c4dd42a73
--- /dev/null
+++ b/src/plugins.d/pluginsd_dyncfg.c
@@ -0,0 +1,69 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#include "pluginsd_dyncfg.h"
+
+
+// ----------------------------------------------------------------------------
+
+PARSER_RC pluginsd_config(char **words, size_t num_words, PARSER *parser) {
+ RRDHOST *host = pluginsd_require_scope_host(parser, PLUGINSD_KEYWORD_CONFIG);
+ if(!host) return PARSER_RC_ERROR;
+
+ size_t i = 1;
+ char *id = get_word(words, num_words, i++);
+ char *action = get_word(words, num_words, i++);
+
+ if(strcmp(action, PLUGINSD_KEYWORD_CONFIG_ACTION_CREATE) == 0) {
+ char *status_str = get_word(words, num_words, i++);
+ char *type_str = get_word(words, num_words, i++);
+ char *path = get_word(words, num_words, i++);
+ char *source_type_str = get_word(words, num_words, i++);
+ char *source = get_word(words, num_words, i++);
+ char *supported_cmds_str = get_word(words, num_words, i++);
+ char *view_permissions_str = get_word(words, num_words, i++);
+ char *edit_permissions_str = get_word(words, num_words, i++);
+
+ DYNCFG_STATUS status = dyncfg_status2id(status_str);
+ DYNCFG_TYPE type = dyncfg_type2id(type_str);
+ DYNCFG_SOURCE_TYPE source_type = dyncfg_source_type2id(source_type_str);
+ DYNCFG_CMDS cmds = dyncfg_cmds2id(supported_cmds_str);
+ HTTP_ACCESS view_access = http_access_from_hex(view_permissions_str);
+ HTTP_ACCESS edit_access = http_access_from_hex(edit_permissions_str);
+
+ if(!dyncfg_add_low_level(
+ host,
+ id,
+ path,
+ status,
+ type,
+ source_type,
+ source,
+ cmds,
+ 0,
+ 0,
+ false,
+ view_access,
+ edit_access,
+ pluginsd_function_execute_cb,
+ parser))
+ return PARSER_RC_ERROR;
+ }
+ else if(strcmp(action, PLUGINSD_KEYWORD_CONFIG_ACTION_DELETE) == 0) {
+ dyncfg_del_low_level(host, id);
+ }
+ else if(strcmp(action, PLUGINSD_KEYWORD_CONFIG_ACTION_STATUS) == 0) {
+ char *status_str = get_word(words, num_words, i++);
+ dyncfg_status_low_level(host, id, dyncfg_status2id(status_str));
+ }
+ else
+ nd_log(NDLS_COLLECTORS, NDLP_WARNING, "DYNCFG: unknown action '%s' received from plugin", action);
+
+ parser->user.data_collections_count++;
+ return PARSER_RC_OK;
+}
+
+// ----------------------------------------------------------------------------
+
+PARSER_RC pluginsd_dyncfg_noop(char **words __maybe_unused, size_t num_words __maybe_unused, PARSER *parser __maybe_unused) {
+ return PARSER_RC_OK;
+}