Browse Source

Simplify parser README.md and add parser files to CMakeLists.txt (#14523)

Add parser in CMakeLists.txt
Keep minimal documentation (overview) and refer to the actual code
Stelios Fragkakis 2 years ago
parent
commit
8479be80c9
2 changed files with 14 additions and 148 deletions
  1. 2 6
      CMakeLists.txt
  2. 12 142
      libnetdata/parser/README.md

+ 2 - 6
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

+ 12 - 142
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