Mostly just reflow text (=linebreaks) for better diffs. Some small changes. Remove Debug-And-Diagnostic-Support.md.
		
			
				
	
	
		
			66 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Module commands
 | 
						|
 | 
						|
Introduced in MaxScale 2.1, the module commands are special, module-specific
 | 
						|
commands. They allow the modules to expand beyond the capabilities of the module
 | 
						|
API. Currently, only MaxAdmin implements an interface to the module commands.
 | 
						|
 | 
						|
All registered module commands can be shown with `maxadmin list commands` and
 | 
						|
they can be executed with `maxadmin call command <module> <name> ARGS...` where
 | 
						|
_<module>_ is the name of the module and _<name>_ is the name of the command.
 | 
						|
_ARGS_ is a command specific list of arguments.
 | 
						|
 | 
						|
## Developer reference
 | 
						|
 | 
						|
The module command API is defined in the _modulecmd.h_ header. It consists of
 | 
						|
various functions to register and call module commands. Read the function
 | 
						|
documentation in the header for more details.
 | 
						|
 | 
						|
The following example registers the module command _my_command_ for module
 | 
						|
_my_module_.
 | 
						|
 | 
						|
```
 | 
						|
#include <maxscale/modulecmd.h>
 | 
						|
 | 
						|
bool my_simple_cmd(const MODULECMD_ARG *argv)
 | 
						|
{
 | 
						|
    printf("%d arguments given\n", argv->argc);
 | 
						|
}
 | 
						|
 | 
						|
int main(int argc, char **argv)
 | 
						|
{
 | 
						|
    modulecmd_arg_type_t my_args[] =
 | 
						|
    {
 | 
						|
        {MODULECMD_ARG_BOOLEAN, "This is a boolean parameter"},
 | 
						|
        {MODULECMD_ARG_STRING | MODULECMD_ARG_OPTIONAL, "This is an optional string parameter"}
 | 
						|
    };
 | 
						|
 | 
						|
    // Register the command
 | 
						|
    modulecmd_register_command("my_module", "my_command", my_simple_cmd, 2, my_args);
 | 
						|
 | 
						|
    // Find the registered command
 | 
						|
    const MODULECMD *cmd = modulecmd_find_command("my_module", "my_command");
 | 
						|
 | 
						|
    // Parse the arguments for the command
 | 
						|
    const void *arglist[] = {"true", "optional string"};
 | 
						|
    MODULECMD_ARG *arg = modulecmd_arg_parse(cmd, arglist, 2);
 | 
						|
 | 
						|
    // Call the module command
 | 
						|
    modulecmd_call_command(cmd, arg);
 | 
						|
 | 
						|
    // Free the parsed arguments
 | 
						|
    modulecmd_arg_free(arg);
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
The array _my_args_ of type _modulecmd_arg_type_t_ is used to tell what kinds of
 | 
						|
arguments the command expects. The first argument is a boolean and the second
 | 
						|
argument is an optional string.
 | 
						|
 | 
						|
Arguments are passed to the parsing function as an array of void pointers. They
 | 
						|
are interpreted as the types the command expects.
 | 
						|
 | 
						|
When the module command is executed, the _argv_ parameter for the
 | 
						|
_my_simple_cmd_ contains the parsed arguments received from the caller of the
 | 
						|
command.
 |