| 1 | // SPDX-License-Identifier: GPL-3.0-or-later |
| 2 | |
| 3 | #include "pluginsd_dyncfg.h" |
| 4 | |
| 5 | |
| 6 | // ---------------------------------------------------------------------------- |
| 7 | |
| 8 | PARSER_RC pluginsd_config(char **words, size_t num_words, PARSER *parser) { |
| 9 | // config command is only available to localhost |
| 10 | RRDHOST *host = localhost; /* pluginsd_require_scope_host(parser, PLUGINSD_KEYWORD_CONFIG);*/ |
| 11 | if(!host) return PARSER_RC_ERROR; |
| 12 | |
| 13 | size_t i = 1; |
| 14 | char *id = get_word(words, num_words, i++); |
| 15 | char *action = get_word(words, num_words, i++); |
| 16 | |
| 17 | if(strcmp(action, PLUGINSD_KEYWORD_CONFIG_ACTION_CREATE) == 0) { |
| 18 | char *status_str = get_word(words, num_words, i++); |
| 19 | char *type_str = get_word(words, num_words, i++); |
| 20 | char *path = get_word(words, num_words, i++); |
| 21 | char *source_type_str = get_word(words, num_words, i++); |
| 22 | char *source = get_word(words, num_words, i++); |
| 23 | char *supported_cmds_str = get_word(words, num_words, i++); |
| 24 | char *view_permissions_str = get_word(words, num_words, i++); |
| 25 | char *edit_permissions_str = get_word(words, num_words, i++); |
| 26 | |
| 27 | DYNCFG_STATUS status = dyncfg_status2id(status_str); |
| 28 | DYNCFG_TYPE type = dyncfg_type2id(type_str); |
| 29 | DYNCFG_SOURCE_TYPE source_type = dyncfg_source_type2id(source_type_str); |
| 30 | DYNCFG_CMDS cmds = dyncfg_cmds2id(supported_cmds_str); |
| 31 | HTTP_ACCESS view_access = http_access_from_hex(view_permissions_str); |
| 32 | HTTP_ACCESS edit_access = http_access_from_hex(edit_permissions_str); |
| 33 | |
| 34 | if(!dyncfg_add_low_level( |
| 35 | host, |
| 36 | id, |
| 37 | path, |
| 38 | status, |
| 39 | type, |
| 40 | source_type, |
| 41 | source, |
| 42 | cmds, |
| 43 | 0, |
| 44 | 0, |
| 45 | false, |
| 46 | view_access, |
| 47 | edit_access, |
| 48 | pluginsd_function_execute_cb, |
| 49 | parser)) |
| 50 | return PARSER_RC_ERROR; |
| 51 | } |
| 52 | else if(strcmp(action, PLUGINSD_KEYWORD_CONFIG_ACTION_DELETE) == 0) { |
| 53 | dyncfg_del_low_level(host, id); |
| 54 | } |
| 55 | else if(strcmp(action, PLUGINSD_KEYWORD_CONFIG_ACTION_STATUS) == 0) { |
| 56 | char *status_str = get_word(words, num_words, i++); |
| 57 | dyncfg_status_low_level(host, id, dyncfg_status2id(status_str)); |
| 58 | } |
| 59 | else |
| 60 | nd_log(NDLS_COLLECTORS, NDLP_WARNING, "DYNCFG: unknown action '%s' received from plugin", action); |
| 61 | |
| 62 | parser->user.data_collections_count++; |
| 63 | return PARSER_RC_OK; |
| 64 | } |
| 65 | |
| 66 | // ---------------------------------------------------------------------------- |
| 67 | |
| 68 | PARSER_RC pluginsd_dyncfg_noop(char **words __maybe_unused, size_t num_words __maybe_unused, PARSER *parser __maybe_unused) { |
| 69 | return PARSER_RC_OK; |
| 70 | } |