|
@@ -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
|