diff options
Diffstat (limited to 'src/plugins.d/pluginsd_dyncfg.c')
-rw-r--r-- | src/plugins.d/pluginsd_dyncfg.c | 69 |
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; +} |