1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
#### 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
----
##### 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
----
##### parser_recover_input(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
|