 40cbf37d64
			
		
	
	40cbf37d64
	
	
	
		
			
			Added an example that demonstrates how to call a module command with parameters via the REST API.
		
			
				
	
	
		
			543 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			543 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # MaxScale Resource
 | |
| 
 | |
| The MaxScale resource represents a MaxScale instance and it is the core on top
 | |
| of which the modules build upon.
 | |
| 
 | |
| ## Resource Operations
 | |
| 
 | |
| ## Get global information
 | |
| 
 | |
| Retrieve global information about a MaxScale instance. This includes various
 | |
| file locations, configuration options and version information.
 | |
| 
 | |
| ```
 | |
| GET /v1/maxscale
 | |
| ```
 | |
| 
 | |
| #### Response
 | |
| 
 | |
| `Status: 200 OK`
 | |
| 
 | |
| ```javascript
 | |
| {
 | |
|     "links": {
 | |
|         "self": "http://localhost:8989/v1/maxscale/"
 | |
|     },
 | |
|     "data": {
 | |
|         "attributes": {
 | |
|             "parameters": {
 | |
|                 "libdir": "/usr/lib64/maxscale",
 | |
|                 "datadir": "/var/lib/maxscale",
 | |
|                 "process_datadir": "/var/lib/maxscale/data16218",
 | |
|                 "cachedir": "/var/cache/maxscale",
 | |
|                 "configdir": "/etc",
 | |
|                 "config_persistdir": "/var/lib/maxscale/maxscale.cnf.d",
 | |
|                 "module_configdir": "/etc/maxscale.modules.d",
 | |
|                 "piddir": "/var/run/maxscale",
 | |
|                 "logdir": "/var/log/maxscale",
 | |
|                 "langdir": "/var/lib/maxscale",
 | |
|                 "execdir": "/usr/bin",
 | |
|                 "connector_plugindir": "/var/lib/plugin",
 | |
|                 "threads": 4,
 | |
|                 "thread_stack_size": 8388608,
 | |
|                 "auth_connect_timeout": 3,
 | |
|                 "auth_read_timeout": 1,
 | |
|                 "auth_write_timeout": 2,
 | |
|                 "skip_permission_checks": false,
 | |
|                 "admin_auth": false,
 | |
|                 "admin_enabled": true,
 | |
|                 "admin_log_auth_failures": true,
 | |
|                 "admin_host": "::",
 | |
|                 "admin_port": 8989,
 | |
|                 "admin_ssl_key": "",
 | |
|                 "admin_ssl_cert": "",
 | |
|                 "admin_ssl_ca_cert": "",
 | |
|                 "query_classifier": ""
 | |
|             },
 | |
|             "version": "2.2.0",
 | |
|             "commit": "aa1a413cd961d467083d1974c2a027f612201845",
 | |
|             "started_at": "Wed, 06 Sep 2017 06:51:54 GMT",
 | |
|             "uptime": 1227
 | |
|         },
 | |
|         "id": "maxscale",
 | |
|         "type": "maxscale"
 | |
|     }
 | |
| }
 | |
| ```
 | |
| 
 | |
| ## Update MaxScale parameters
 | |
| 
 | |
| Update MaxScale parameters. The request body must define updated values for the
 | |
| `data.attributes.parameters` object. The following parameters can be altered:
 | |
| 
 | |
| - [admin_auth](../Getting-Started/Configuration-Guide.md#admin_auth)
 | |
| - [auth_connect_timeout](../Getting-Started/Configuration-Guide.md#auth_connect_timeout)
 | |
| - [auth_read_timeout](../Getting-Started/Configuration-Guide.md#auth_read_timeout)
 | |
| - [auth_write_timeout](../Getting-Started/Configuration-Guide.md#auth_write_timeout)
 | |
| - [admin_log_auth_failures](../Getting-Started/Configuration-Guide.md#admin_log_auth_failures)
 | |
| - [passive](../Getting-Started/Configuration-Guide.md#passive)
 | |
| 
 | |
| ```
 | |
| PATCH /v1/maxscale
 | |
| ```
 | |
| 
 | |
| #### Response
 | |
| 
 | |
| Parameters modified:
 | |
| 
 | |
| `Status: 204 No Content`
 | |
| 
 | |
| Invalid JSON body:
 | |
| 
 | |
| `Status: 403 Forbidden`
 | |
| 
 | |
| ## Get thread information
 | |
| 
 | |
| Get the information and statistics of a particular thread. The _:id_ in
 | |
| the URI must map to a valid thread number between 0 and the configured
 | |
| value of `threads`.
 | |
| 
 | |
| ```
 | |
| GET /v1/maxscale/threads/:id
 | |
| ```
 | |
| 
 | |
| #### Response
 | |
| 
 | |
| `Status: 200 OK`
 | |
| 
 | |
| ```javascript
 | |
| {
 | |
|     "links": {
 | |
|         "self": "http://localhost:8989/v1/maxscale/threads/0"
 | |
|     },
 | |
|     "data": {
 | |
|         "id": "0",
 | |
|         "type": "threads",
 | |
|         "attributes": {
 | |
|             "stats": {
 | |
|                 "reads": 2,
 | |
|                 "writes": 0,
 | |
|                 "errors": 0,
 | |
|                 "hangups": 0,
 | |
|                 "accepts": 0,
 | |
|                 "blocking_polls": 180,
 | |
|                 "event_queue_length": 1,
 | |
|                 "max_event_queue_length": 1,
 | |
|                 "max_exec_time": 0,
 | |
|                 "max_queue_time": 0
 | |
|             }
 | |
|         },
 | |
|         "links": {
 | |
|             "self": "http://localhost:8989/v1/threads/0"
 | |
|         }
 | |
|     }
 | |
| }
 | |
| ```
 | |
| 
 | |
| ## Get information for all threads
 | |
| 
 | |
| Get the informatino for all threads. Returns a collection of threads resources.
 | |
| 
 | |
| ```
 | |
| GET /v1/maxscale/threads
 | |
| ```
 | |
| 
 | |
| #### Response
 | |
| 
 | |
| `Status: 200 OK`
 | |
| 
 | |
| ```javascript
 | |
| {
 | |
|     "links": {
 | |
|         "self": "http://localhost:8989/v1/maxscale/threads/"
 | |
|     },
 | |
|     "data": [
 | |
|         {
 | |
|             "id": "0",
 | |
|             "type": "threads",
 | |
|             "attributes": {
 | |
|                 "stats": {
 | |
|                     "reads": 1,
 | |
|                     "writes": 0,
 | |
|                     "errors": 0,
 | |
|                     "hangups": 0,
 | |
|                     "accepts": 0,
 | |
|                     "blocking_polls": 116,
 | |
|                     "event_queue_length": 1,
 | |
|                     "max_event_queue_length": 1,
 | |
|                     "max_exec_time": 0,
 | |
|                     "max_queue_time": 0
 | |
|                 }
 | |
|             },
 | |
|             "links": {
 | |
|                 "self": "http://localhost:8989/v1/threads/0"
 | |
|             }
 | |
|         },
 | |
|         {
 | |
|             "id": "1",
 | |
|             "type": "threads",
 | |
|             "attributes": {
 | |
|                 "stats": {
 | |
|                     "reads": 1,
 | |
|                     "writes": 0,
 | |
|                     "errors": 0,
 | |
|                     "hangups": 0,
 | |
|                     "accepts": 0,
 | |
|                     "blocking_polls": 116,
 | |
|                     "event_queue_length": 1,
 | |
|                     "max_event_queue_length": 1,
 | |
|                     "max_exec_time": 0,
 | |
|                     "max_queue_time": 0
 | |
|                 }
 | |
|             },
 | |
|             "links": {
 | |
|                 "self": "http://localhost:8989/v1/threads/1"
 | |
|             }
 | |
|         },
 | |
|         {
 | |
|             "id": "2",
 | |
|             "type": "threads",
 | |
|             "attributes": {
 | |
|                 "stats": {
 | |
|                     "reads": 1,
 | |
|                     "writes": 0,
 | |
|                     "errors": 0,
 | |
|                     "hangups": 0,
 | |
|                     "accepts": 0,
 | |
|                     "blocking_polls": 116,
 | |
|                     "event_queue_length": 1,
 | |
|                     "max_event_queue_length": 1,
 | |
|                     "max_exec_time": 0,
 | |
|                     "max_queue_time": 0
 | |
|                 }
 | |
|             },
 | |
|             "links": {
 | |
|                 "self": "http://localhost:8989/v1/threads/2"
 | |
|             }
 | |
|         },
 | |
|         {
 | |
|             "id": "3",
 | |
|             "type": "threads",
 | |
|             "attributes": {
 | |
|                 "stats": {
 | |
|                     "reads": 1,
 | |
|                     "writes": 0,
 | |
|                     "errors": 0,
 | |
|                     "hangups": 0,
 | |
|                     "accepts": 0,
 | |
|                     "blocking_polls": 116,
 | |
|                     "event_queue_length": 1,
 | |
|                     "max_event_queue_length": 1,
 | |
|                     "max_exec_time": 0,
 | |
|                     "max_queue_time": 0
 | |
|                 }
 | |
|             },
 | |
|             "links": {
 | |
|                 "self": "http://localhost:8989/v1/threads/3"
 | |
|             }
 | |
|         }
 | |
|     ]
 | |
| }
 | |
| ```
 | |
| 
 | |
| ## Get logging information
 | |
| 
 | |
| Get information about the current state of logging, enabled log files and the
 | |
| location where the log files are stored.
 | |
| 
 | |
| ```
 | |
| GET /v1/maxscale/logs
 | |
| ```
 | |
| 
 | |
| #### Response
 | |
| 
 | |
| `Status: 200 OK`
 | |
| 
 | |
| ```javascript
 | |
| {
 | |
|     "links": {
 | |
|         "self": "http://localhost:8989/v1/maxscale/logs/"
 | |
|     },
 | |
|     "data": {
 | |
|         "attributes": {
 | |
|             "parameters": {
 | |
|                 "highprecision": false,
 | |
|                 "maxlog": true,
 | |
|                 "syslog": true,
 | |
|                 "throttling": {
 | |
|                     "count": 10,
 | |
|                     "suppress_ms": 10000,
 | |
|                     "window_ms": 1000
 | |
|                 },
 | |
|                 "log_warning": true,
 | |
|                 "log_notice": true,
 | |
|                 "log_info": true,
 | |
|                 "log_debug": false,
 | |
|                 "log_to_shm": false
 | |
|             },
 | |
|             "log_file": "/home/markusjm/build/log/maxscale/maxscale.log",
 | |
|             "log_priorities": [
 | |
|                 "error",
 | |
|                 "warning",
 | |
|                 "notice",
 | |
|                 "info"
 | |
|             ]
 | |
|         },
 | |
|         "id": "logs",
 | |
|         "type": "logs"
 | |
|     }
 | |
| }
 | |
| ```
 | |
| 
 | |
| ## Update logging parameters
 | |
| 
 | |
| Update logging parameters. The request body must define updated values for the
 | |
| `data.attributes.parameters` object. All logging parameters apart from
 | |
| `log_to_shm` can be altered at runtime.
 | |
| 
 | |
| ```
 | |
| PATCH /v1/maxscale/logs
 | |
| ```
 | |
| 
 | |
| #### Response
 | |
| 
 | |
| Parameters modified:
 | |
| 
 | |
| `Status: 204 No Content`
 | |
| 
 | |
| Invalid JSON body:
 | |
| 
 | |
| `Status: 403 Forbidden`
 | |
| 
 | |
| ## Flush and rotate log files
 | |
| 
 | |
| Flushes any pending messages to disk and reopens the log files. The body of the
 | |
| message is ignored.
 | |
| 
 | |
| ```
 | |
| POST /v1/maxscale/logs/flush
 | |
| ```
 | |
| 
 | |
| #### Response
 | |
| 
 | |
| `Status: 204 No Content`
 | |
| 
 | |
| ## Get task schedule
 | |
| 
 | |
| Retrieve all pending tasks that are queued for execution.
 | |
| 
 | |
| ```
 | |
| GET /v1/maxscale/tasks
 | |
| ```
 | |
| 
 | |
| #### Response
 | |
| 
 | |
| `Status: 200 OK`
 | |
| 
 | |
| ```javascript
 | |
| {
 | |
|     "links": {
 | |
|         "self": "http://localhost:8989/v1/maxscale/tasks/"
 | |
|     },
 | |
|     "data": [] // No tasks active
 | |
| }
 | |
| ```
 | |
| 
 | |
| ## Get loaded modules
 | |
| 
 | |
| Retrieve information about a loaded module. This includes version, API and
 | |
| maturity information as well as all the parameters that the module defines.
 | |
| 
 | |
| ```
 | |
| GET /v1/maxscale/modules
 | |
| ```
 | |
| 
 | |
| #### Response
 | |
| 
 | |
| `Status: 200 OK`
 | |
| 
 | |
| ```javascript
 | |
| {
 | |
|     "links": {
 | |
|         "self": "http://localhost:8989/v1/maxscale/modules/"
 | |
|     },
 | |
|     "data": {
 | |
|         "id": "dbfwfilter",
 | |
|         "type": "module",
 | |
|         "attributes": {
 | |
|             "module_type": "Filter",
 | |
|             "version": "V1.2.0",
 | |
|             "description": "Firewall Filter",
 | |
|             "api": "filter",
 | |
|             "status": "GA",
 | |
|             "commands": [
 | |
|                 {
 | |
|                     "id": "rules/reload",
 | |
|                     "type": "module_command",
 | |
|                     "links": {
 | |
|                         "self": "http://localhost:8989/v1/modules/dbfwfilter/rules/reload"
 | |
|                     },
 | |
|                     "attributes": {
 | |
|                         "method": "POST",
 | |
|                         "arg_min": 1,
 | |
|                         "arg_max": 2,
 | |
|                         "parameters": [
 | |
|                             {
 | |
|                                 "description": "Filter to reload",
 | |
|                                 "type": "FILTER",
 | |
|                                 "required": true
 | |
|                             },
 | |
|                             {
 | |
|                                 "description": "Path to rule file",
 | |
|                                 "type": "[STRING]",
 | |
|                                 "required": false
 | |
|                             }
 | |
|                         ]
 | |
|                     }
 | |
|                 }
 | |
|             ],
 | |
|             "parameters": [
 | |
|                 {
 | |
|                     "name": "rules",
 | |
|                     "type": "path"
 | |
|                 },
 | |
|                 {
 | |
|                     "name": "log_match",
 | |
|                     "type": "bool",
 | |
|                     "default_value": "false"
 | |
|                 },
 | |
|                 {
 | |
|                     "name": "log_no_match",
 | |
|                     "type": "bool",
 | |
|                     "default_value": "false"
 | |
|                 },
 | |
|                 {
 | |
|                     "name": "action",
 | |
|                     "type": "enum",
 | |
|                     "default_value": "block",
 | |
|                     "enum_values": [
 | |
|                         "allow",
 | |
|                         "block",
 | |
|                         "ignore"
 | |
|                     ]
 | |
|                 }
 | |
|             ]
 | |
|         },
 | |
|         "links": {
 | |
|             "self": "http://localhost:8989/v1/modules/dbfwfilter"
 | |
|         }
 | |
|     }
 | |
| }
 | |
| ```
 | |
| 
 | |
| ## Get all loaded modules
 | |
| 
 | |
| Retrieve information about all loaded modules.
 | |
| 
 | |
| ```
 | |
| GET /v1/maxscale/modules
 | |
| ```
 | |
| 
 | |
| #### Response
 | |
| 
 | |
| `Status: 200 OK`
 | |
| 
 | |
| ```javascript
 | |
| {
 | |
|     "links": {
 | |
|         "self": "http://localhost:8989/v1/maxscale/modules/"
 | |
|     },
 | |
|     "data": [
 | |
|         {
 | |
|             "id": "qc_sqlite",
 | |
|             "type": "module",
 | |
|             "attributes": {
 | |
|                 "module_type": "QueryClassifier",
 | |
|                 "version": "V1.0.0",
 | |
|                 "description": "Query classifier using sqlite.",
 | |
|                 "api": "query_classifier",
 | |
|                 "status": "Beta",
 | |
|                 "parameters": []
 | |
|             },
 | |
|             "links": {
 | |
|                 "self": "http://localhost:8989/v1/modules/qc_sqlite"
 | |
|             }
 | |
|         },
 | |
|         {
 | |
|             "id": "MySQLAuth",
 | |
|             "type": "module",
 | |
|             "attributes": {
 | |
|                 "module_type": "Authenticator",
 | |
|                 "version": "V1.1.0",
 | |
|                 "description": "The MySQL client to MaxScale authenticator implementation",
 | |
|                 "api": "authenticator",
 | |
|                 "status": "GA",
 | |
|                 "parameters": []
 | |
|             },
 | |
|             "links": {
 | |
|                 "self": "http://localhost:8989/v1/modules/MySQLAuth"
 | |
|             }
 | |
|         },
 | |
|     ]
 | |
| }
 | |
| ```
 | |
| 
 | |
| ## Call a module command
 | |
| 
 | |
| Modules can expose commands that can be called via the REST API. The module
 | |
| resource lists all commands in the `data.attributes.commands` list. Each value
 | |
| is a command sub-resource identified by its `id` field and the HTTP method the
 | |
| command uses is defined by the `attributes.method` field.
 | |
| 
 | |
| The _:module_ in the URI must be a valid name of a loaded module and _:command_
 | |
| must be a valid command identifier that is exposed by that module. All
 | |
| parameters to the module commands are passed as HTTP request parameters.
 | |
| 
 | |
| For read-only commands:
 | |
| 
 | |
| ```
 | |
| GET /v1/maxscale/modules/:module/:command
 | |
| ```
 | |
| 
 | |
| For commands that can modify data:
 | |
| 
 | |
| ```
 | |
| POST /v1/maxscale/modules/:module/:command
 | |
| ```
 | |
| 
 | |
| Here is an example POST requests to the dbfwfilter module command _reload_ with
 | |
| two parameters, the name of the filter instance and the path to a file:
 | |
| 
 | |
| ```
 | |
| POST /v1/maxscale/modules/dbfwfilter/reload?my-dbfwfilter-instance&/path/to/file.txt
 | |
| ```
 | |
| 
 | |
| #### Response
 | |
| 
 | |
| Command with output:
 | |
| 
 | |
| `Status: 200 OK`
 | |
| 
 | |
| ```javascript
 | |
| {
 | |
|     "links": {
 | |
|         "self": "http://localhost:8989/v1/maxscale/modules/dbfwfilter/rules/json"
 | |
|     },
 | |
|     "meta": [
 | |
|         {
 | |
|             "name": "test3",
 | |
|             "type": "COLUMN",
 | |
|             "times_matched": 0
 | |
|         }
 | |
|     ]
 | |
| }
 | |
| ```
 | |
| 
 | |
| The contents of the `meta` field will contain the output of the module
 | |
| command. This output depends on the command that is being executed. It can
 | |
| contain any valid JSON value.
 | |
| 
 | |
| Command with no output:
 | |
| 
 | |
| `Status: 204 No Content`
 |