diff options
-rw-r--r-- | CMakeLists.txt | 8 | ||||
-rw-r--r-- | libnetdata/parser/README.md | 154 |
2 files changed, 14 insertions, 148 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 263fb81256..c9fee2a08e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -512,6 +512,8 @@ set(LIBNETDATA_FILES libnetdata/string/utf8.h libnetdata/worker_utilization/worker_utilization.c libnetdata/worker_utilization/worker_utilization.h + libnetdata/parser/parser.h + libnetdata/parser/parser.c ) IF(ENABLE_PLUGIN_EBPF) @@ -695,11 +697,6 @@ set(PLUGINSD_PLUGIN_FILES collectors/plugins.d/pluginsd_parser.h ) -set(PARSER_PLUGIN_FILES - parser/parser.c - parser/parser.h - ) - set(REGISTRY_PLUGIN_FILES registry/registry.c registry/registry.h @@ -1077,7 +1074,6 @@ set(NETDATA_FILES ${WEB_PLUGIN_FILES} ${CLAIM_PLUGIN_FILES} ${SPAWN_PLUGIN_FILES} - ${PARSER_PLUGIN_FILES} ) set(NETDATACLI_FILES diff --git a/libnetdata/parser/README.md b/libnetdata/parser/README.md index cf59bfd767..7fcc176aed 100644 --- a/libnetdata/parser/README.md +++ b/libnetdata/parser/README.md @@ -7,150 +7,20 @@ learn_topic_type: "References" learn_rel_path: "Developers/Database" --> - #### Introduction -The parser will be used to process streaming and plugins input as well as metadata - -Usage - -1. Define a structure that will be used to share user state across calls -1. Initialize the parser using `parser_init` -2. Register keywords and associated callback function using `parser_add_keyword` -3. Register actions on the keywords -4. Start a loop until EOF - 1. Fetch the next line using `parser_next` - 2. Process the line using `parser_action` - 1. The registered callbacks are executed to parse the input - 2. The registered action for the callback is called for processing -4. Release the parser using `parser_destroy` -5. Release the user structure - -#### Functions - -TODO: - -##### parse_init(RRDHOST *host, void *user, void *input, int flags) - -Initialize an internal parser with the specified user defined data structure that will be shared across calls. - -Input -- Host - - The host this parser will be dealing with. For streaming with SSL enabled for this host -- user - - User defined structure that is passed in all the calls -- input - - Where the parser will get the input from -- flags - - flags to define processing on the input - -Output -- A parser structure - - - -##### parse_push(PARSER *parser, char *line) - -Push a new line for processing - -Input - -- parser - - The parser object as returned by the `parser_init` -- line - - The new line to process - - -Output -- The line will be injected into the stream and will be the next one to be processed - -Returns -- 0 line added -- 1 error detected - - -##### parse_add_keyword(PARSER *parser, char *keyword, keyword_function callback_function) - -The function will add callbacks for keywords. The callback function is defined as - -`typedef PARSER_RC (*keyword_function)(char **, void *);` - -Input - -- parser - - The parser object as returned by the `parser_init` -- keyword - - The keyword to register -- keyword_function - - The callback that will handle the keyword processing - * The callback function should return one of the following - * PARSER_RC_OK - Callback was successful (continue with other callbacks) - * PARSER_RC_STOP - Stop processing callbacks (return OK) - * PARSER_RC_ERROR - Callback failed, exit - -Output -- The corresponding keyword and callback will be registered - -Returns -- 0 maximum callbacks already registered for this keyword -- > 0 which is the number of callbacks associated with this keyword. - - -##### parser_next(PARSER *parser) -Return the next item to parse - -Input -- parser - - The parser object as returned by the `parser_init` - -Output -- The parser will store internally the next item to parse - -Returns -- 0 Next item fetched successfully -- 1 No more items to parse - - -##### parser_action(PARSER *parser, char *input) -Return the next item to parse - -Input -- parser - - The parser object as returned by the `parser_init` -- input - - Process the input specified instead of using the internal buffer - -Output -- The current keyword will be processed by calling all the registered callbacks - -Returns -- 0 Callbacks called successfully -- 1 Failed - - -##### parser_destroy(PARSER *parser) -Cleanup a previously allocated parser - -Input -- parser - - The parser object as returned by the `parser_init` - -Output -- The parser is deallocated - -Returns -- none - +Generic parser that is used to register keywords and a corresponding function that will be executed when that +keyword is encountered in the command stream (either from plugins or via streaming) -##### parser_recover_input(PARSER *parser) -Cleanup a previously allocated parser +To use a parser do the following: -Input -- parser - - The parser object as returned by the `parser_init` - -Output -- The parser is deallocated +1. Define a structure that will be used to share user state across calls (user defined `void *user`) +2. Initialize the parser using `parser_init` +3. Register keywords with their associated callback function using `parser_add_keyword` +4. Start a loop for as long there is input (or parser_action returns error) + 1. Fetch the next line using `parser_next` (if needed) + 2. Process the line using `parser_action` +5. Release the parser using `parser_destroy` +6. Release the user structure -Returns -- none +See examples in receiver.c / pluginsd_parser.c |