MXS-1220: Unify resource member naming
All resoures now use the `state` member to describe their internal state. This includes servers, services and monitors. This means that the `status` keyword can be reserved for something else and it can be removed until it is needed again. Changed the module maturity field to `maturity` to better describe its purpose.
This commit is contained in:
@ -64,7 +64,7 @@ Status: 200 OK
|
||||
"port": 3000,
|
||||
"protocol": "MySQLBackend"
|
||||
},
|
||||
"status": "Master, Running", // Server status string
|
||||
"state": "Master, Running", // Server state string
|
||||
"version_string": "10.1.22-MariaDB", // Server version
|
||||
"node_id": 3000, // Server node ID i.e. value of @@server_id
|
||||
"master_id": -1,
|
||||
@ -148,7 +148,7 @@ Status: 200 OK
|
||||
"port": 3000,
|
||||
"protocol": "MySQLBackend"
|
||||
},
|
||||
"status": "Master, Running",
|
||||
"state": "Master, Running",
|
||||
"version_string": "10.1.22-MariaDB",
|
||||
"node_id": 3000,
|
||||
"master_id": -1,
|
||||
@ -199,7 +199,7 @@ Status: 200 OK
|
||||
"port": 3001,
|
||||
"protocol": "MySQLBackend"
|
||||
},
|
||||
"status": "Slave, Running",
|
||||
"state": "Slave, Running",
|
||||
"version_string": "10.1.22-MariaDB",
|
||||
"node_id": 3001,
|
||||
"master_id": 3000,
|
||||
@ -392,7 +392,7 @@ Response to `GET /v1/server/server1`:
|
||||
"port": 3000,
|
||||
"protocol": "MySQLBackend"
|
||||
},
|
||||
"status": "Master, Running",
|
||||
"state": "Master, Running",
|
||||
"version_string": "10.1.22-MariaDB",
|
||||
"node_id": 3000,
|
||||
"master_id": -1,
|
||||
@ -501,17 +501,17 @@ Server is in use:
|
||||
Status: 403 Forbidden
|
||||
```
|
||||
|
||||
### Set server status
|
||||
### Set server state
|
||||
|
||||
```
|
||||
PUT /v1/servers/:name/set
|
||||
```
|
||||
|
||||
The _:name_ in the URI must map to a server name with all whitespace replaced
|
||||
with hyphens. This endpoint requires that the `status` parameter is passed with
|
||||
the request. The value of `status` must be one of the following values.
|
||||
with hyphens. This endpoint requires that the `state` parameter is passed with
|
||||
the request. The value of `state` must be one of the following values.
|
||||
|
||||
|Value | Status Description |
|
||||
|Value | State Description |
|
||||
|-----------|--------------------------------|
|
||||
|master | Server is a Master |
|
||||
|slave | Server is a Slave |
|
||||
@ -525,7 +525,7 @@ For example, to set the server _db-server-1_ into maintenance mode, a request to
|
||||
the following URL must be made:
|
||||
|
||||
```
|
||||
PUT /v1/servers/db-server-1/set?status=maintenance
|
||||
PUT /v1/servers/db-server-1/set?state=maintenance
|
||||
```
|
||||
|
||||
#### Response
|
||||
@ -548,15 +548,15 @@ Missing or invalid parameter:
|
||||
Status: 403 Forbidden
|
||||
```
|
||||
|
||||
### Clear server status
|
||||
### Clear server state
|
||||
|
||||
```
|
||||
POST /v1/servers/:name/clear
|
||||
```
|
||||
|
||||
The _:name_ in the URI must map to a server name with all whitespace replaced
|
||||
with hyphens. This endpoint requires that the `status` parameter is passed with
|
||||
the request. The value of `status` must be one of the values defined in the
|
||||
with hyphens. This endpoint requires that the `state` parameter is passed with
|
||||
the request. The value of `state` must be one of the values defined in the
|
||||
_set_ endpoint documentation.
|
||||
|
||||
#### Response
|
||||
|
@ -13,12 +13,12 @@
|
||||
require('../common.js')()
|
||||
|
||||
exports.command = 'clear <command>'
|
||||
exports.desc = 'Clear object status'
|
||||
exports.desc = 'Clear object state'
|
||||
exports.handler = function() {}
|
||||
exports.builder = function(yargs) {
|
||||
yargs
|
||||
.command('server <server> <status>', 'Clear server status', {}, function(argv) {
|
||||
var target = 'servers/' + argv.server + '/clear?status=' + argv.status
|
||||
.command('server <server> <state>', 'Clear server state', {}, function(argv) {
|
||||
var target = 'servers/' + argv.server + '/clear?state=' + argv.state
|
||||
doRequest(target, null, {method: 'POST'})
|
||||
})
|
||||
.usage('Usage: clear <command>')
|
||||
|
@ -24,7 +24,7 @@ exports.builder = function(yargs) {
|
||||
{'Address': 'attributes.parameters.address'},
|
||||
{'Port': 'attributes.parameters.port'},
|
||||
{'Connections': 'attributes.statistics.connections'},
|
||||
{'Status': 'attributes.status'}
|
||||
{'State': 'attributes.state'}
|
||||
])
|
||||
})
|
||||
.command('services', 'List services', {}, function() {
|
||||
@ -39,7 +39,7 @@ exports.builder = function(yargs) {
|
||||
.command('monitors', 'List monitors', {}, function() {
|
||||
getCollection('monitors', [
|
||||
{'Monitor': 'id'},
|
||||
{'Status': 'attributes.state'},
|
||||
{'State': 'attributes.state'},
|
||||
{'Servers': 'relationships.servers.data[].id'}
|
||||
])
|
||||
})
|
||||
|
@ -13,12 +13,12 @@
|
||||
require('../common.js')()
|
||||
|
||||
exports.command = 'set <command>'
|
||||
exports.desc = 'Set object status'
|
||||
exports.desc = 'Set object state'
|
||||
exports.handler = function() {}
|
||||
exports.builder = function(yargs) {
|
||||
yargs
|
||||
.command('server <server> <status>', 'Set server status', {}, function(argv) {
|
||||
var target = 'servers/' + argv.server + '/set?status=' + argv.status
|
||||
.command('server <server> <state>', 'Set server state', {}, function(argv) {
|
||||
var target = 'servers/' + argv.server + '/set?state=' + argv.state
|
||||
doRequest(target, null, {method: 'POST'})
|
||||
})
|
||||
.usage('Usage: set <command>')
|
||||
|
@ -23,7 +23,7 @@ exports.builder = function(yargs) {
|
||||
{'Server': 'id'},
|
||||
{'Address': 'attributes.parameters.address'},
|
||||
{'Port': 'attributes.parameters.port'},
|
||||
{'Status': 'attributes.status'},
|
||||
{'State': 'attributes.state'},
|
||||
{'Services': 'relationships.services.data[].id'},
|
||||
{'Monitors': 'relationships.monitors.data[].id'},
|
||||
{'Master ID': 'attributes.master_id'},
|
||||
@ -36,6 +36,7 @@ exports.builder = function(yargs) {
|
||||
getResource('services/' + argv.service, [
|
||||
{'Service': 'id'},
|
||||
{'Router': 'attributes.router'},
|
||||
{'State': 'attributes.state'},
|
||||
{'Started At': 'attributes.started'},
|
||||
{'Current Connections': 'attributes.connections'},
|
||||
{'Total Connections': 'attributes.total_connections'},
|
||||
@ -47,7 +48,7 @@ exports.builder = function(yargs) {
|
||||
.command('monitor <monitor>', 'Show monitor', {}, function(argv) {
|
||||
getResource('monitors/' + argv.monitor, [
|
||||
{'Monitor': 'id'},
|
||||
{'Status': 'attributes.state'},
|
||||
{'State': 'attributes.state'},
|
||||
{'Servers': 'relationships.servers.data[].id'},
|
||||
{'Parameters': 'attributes.parameters'},
|
||||
{'Monitor Diagnostics': 'attributes.monitor_diagnostics'}
|
||||
@ -57,7 +58,7 @@ exports.builder = function(yargs) {
|
||||
getResource('sessions/' + argv.session, [
|
||||
{'Id': 'id'},
|
||||
{'Service': 'relationships.services.data[].id'},
|
||||
{'Status': 'attributes.state'},
|
||||
{'State': 'attributes.state'},
|
||||
{'User': 'attributes.user'},
|
||||
{'Host': 'attributes.remote'},
|
||||
{'Connected': 'attributes.connected'},
|
||||
@ -77,7 +78,7 @@ exports.builder = function(yargs) {
|
||||
{'Module': 'id'},
|
||||
{'Type': 'attributes.module_type'},
|
||||
{'Version': 'attributes.version'},
|
||||
{'Maturity': 'attributes.status'},
|
||||
{'Maturity': 'attributes.maturity'},
|
||||
{'Description': 'attributes.description'},
|
||||
{'Parameters': 'attributes.parameters'},
|
||||
{'Commands': 'attributes.commands'}
|
||||
|
@ -142,7 +142,6 @@ extern const char CN_SESSIONS[];
|
||||
extern const char CN_SKIP_PERMISSION_CHECKS[];
|
||||
extern const char CN_SOCKET[];
|
||||
extern const char CN_STATE[];
|
||||
extern const char CN_STATUS[];
|
||||
extern const char CN_SSL[];
|
||||
extern const char CN_SSL_CA_CERT[];
|
||||
extern const char CN_SSL_CERT[];
|
||||
|
@ -95,10 +95,11 @@ json_t* mxs_json_pointer(json_t* json, const char* json_ptr);
|
||||
/**
|
||||
* @brief Return a JSON formatted error
|
||||
*
|
||||
* @param err Error description
|
||||
* @param format Format string
|
||||
* @param ... Variable argument list
|
||||
*
|
||||
* @return The error as JSON
|
||||
*/
|
||||
json_t* mxs_json_error(const char* err);
|
||||
json_t* mxs_json_error(const char* format, ...);
|
||||
|
||||
MXS_END_DECLS
|
||||
|
@ -124,7 +124,6 @@ const char CN_SKIP_PERMISSION_CHECKS[] = "skip_permission_checks";
|
||||
const char CN_SOCKET[] = "socket";
|
||||
const char CN_SQL_MODE[] = "sql_mode";
|
||||
const char CN_STATE[] = "state";
|
||||
const char CN_STATUS[] = "status";
|
||||
const char CN_SSL[] = "ssl";
|
||||
const char CN_SSL_CA_CERT[] = "ssl_ca_cert";
|
||||
const char CN_SSL_CERT[] = "ssl_cert";
|
||||
|
@ -156,8 +156,19 @@ json_t* mxs_json_self_link(const char* host, const char* path, const char* id)
|
||||
return links;
|
||||
}
|
||||
|
||||
json_t* mxs_json_error(const char* message)
|
||||
json_t* mxs_json_error(const char* format, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
va_start(args, format);
|
||||
int len = vsnprintf(NULL, 0, format, args);
|
||||
va_end(args);
|
||||
|
||||
char message[len + 1];
|
||||
va_start(args, format);
|
||||
vsnprintf(message, sizeof(message), format, args);
|
||||
va_end(args);
|
||||
|
||||
json_t* err = json_object();
|
||||
json_object_set_new(err, "detail", json_string(message));
|
||||
|
||||
|
@ -416,7 +416,7 @@ static json_t* module_json_data(const LOADED_MODULE *mod, const char* host)
|
||||
json_object_set_new(attr, "version", json_string(mod->info->version));
|
||||
json_object_set_new(attr, CN_DESCRIPTION, json_string(mod->info->description));
|
||||
json_object_set_new(attr, "api", json_string(mxs_module_api_to_string(mod->info->modapi)));
|
||||
json_object_set_new(attr, CN_STATUS, json_string(mxs_module_status_to_string(mod->info->status)));
|
||||
json_object_set_new(attr, "maturity", json_string(mxs_module_status_to_string(mod->info->status)));
|
||||
|
||||
json_t* commands = json_array();
|
||||
cb_param p = {commands, mod->module, host};
|
||||
|
@ -565,7 +565,7 @@ HttpResponse cb_delete_user(const HttpRequest& request)
|
||||
HttpResponse cb_set_server(const HttpRequest& request)
|
||||
{
|
||||
SERVER* server = server_find_by_unique_name(request.uri_part(1).c_str());
|
||||
int opt = server_map_status(request.get_option("status").c_str());
|
||||
int opt = server_map_status(request.get_option(CN_STATE).c_str());
|
||||
|
||||
if (opt)
|
||||
{
|
||||
@ -573,13 +573,15 @@ HttpResponse cb_set_server(const HttpRequest& request)
|
||||
return HttpResponse(MHD_HTTP_NO_CONTENT);
|
||||
}
|
||||
|
||||
return HttpResponse(MHD_HTTP_FORBIDDEN, mxs_json_error("Invalid or missing value for the `status` parameter"));
|
||||
return HttpResponse(MHD_HTTP_FORBIDDEN,
|
||||
mxs_json_error("Invalid or missing value for the `%s` "
|
||||
"parameter", CN_STATE));
|
||||
}
|
||||
|
||||
HttpResponse cb_clear_server(const HttpRequest& request)
|
||||
{
|
||||
SERVER* server = server_find_by_unique_name(request.uri_part(1).c_str());
|
||||
int opt = server_map_status(request.get_option("status").c_str());
|
||||
int opt = server_map_status(request.get_option(CN_STATE).c_str());
|
||||
|
||||
if (opt)
|
||||
{
|
||||
@ -587,7 +589,9 @@ HttpResponse cb_clear_server(const HttpRequest& request)
|
||||
return HttpResponse(MHD_HTTP_NO_CONTENT);
|
||||
}
|
||||
|
||||
return HttpResponse(MHD_HTTP_FORBIDDEN, mxs_json_error("Invalid or missing value for the `status` parameter"));
|
||||
return HttpResponse(MHD_HTTP_FORBIDDEN,
|
||||
mxs_json_error( "Invalid or missing value for the `%s` "
|
||||
"parameter", CN_STATE));
|
||||
}
|
||||
|
||||
HttpResponse cb_modulecmd(const HttpRequest& request)
|
||||
|
@ -1412,10 +1412,9 @@ static json_t* server_json_attributes(const SERVER* server)
|
||||
|
||||
json_object_set_new(attr, CN_PARAMETERS, params);
|
||||
|
||||
|
||||
/** Store general information about the server state */
|
||||
char* stat = server_status(server);
|
||||
json_object_set_new(attr, CN_STATUS, json_string(stat));
|
||||
json_object_set_new(attr, CN_STATE, json_string(stat));
|
||||
MXS_FREE(stat);
|
||||
|
||||
json_object_set_new(attr, CN_VERSION_STRING, json_string(server->version_string));
|
||||
|
@ -81,7 +81,7 @@ describe("Server Relationships", function() {
|
||||
after(stopMaxScale)
|
||||
});
|
||||
|
||||
describe("Server Status", function() {
|
||||
describe("Server State", function() {
|
||||
before(startMaxScale)
|
||||
|
||||
it("create new server", function() {
|
||||
@ -90,34 +90,34 @@ describe("Server Status", function() {
|
||||
});
|
||||
|
||||
it("set server into maintenance", function() {
|
||||
return request.put(base_url + "/servers/" + server.data.id + "/set?status=maintenance")
|
||||
return request.put(base_url + "/servers/" + server.data.id + "/set?state=maintenance")
|
||||
.then(function(resp) {
|
||||
return request.get(base_url + "/servers/" + server.data.id)
|
||||
})
|
||||
.then(function(resp) {
|
||||
var srv = JSON.parse(resp)
|
||||
srv.data.attributes.status.should.match(/Maintenance/)
|
||||
srv.data.attributes.state.should.match(/Maintenance/)
|
||||
})
|
||||
});
|
||||
|
||||
it("clear maintenance", function() {
|
||||
return request.put(base_url + "/servers/" + server.data.id + "/clear?status=maintenance")
|
||||
return request.put(base_url + "/servers/" + server.data.id + "/clear?state=maintenance")
|
||||
.then(function(resp) {
|
||||
return request.get(base_url + "/servers/" + server.data.id)
|
||||
})
|
||||
.then(function(resp) {
|
||||
var srv = JSON.parse(resp)
|
||||
srv.data.attributes.status.should.not.match(/Maintenance/)
|
||||
srv.data.attributes.state.should.not.match(/Maintenance/)
|
||||
})
|
||||
});
|
||||
|
||||
it("set invalid status value", function() {
|
||||
return request.put(base_url + "/servers/" + server.data.id + "/set?status=somethingstrange")
|
||||
it("set invalid state value", function() {
|
||||
return request.put(base_url + "/servers/" + server.data.id + "/set?state=somethingstrange")
|
||||
.should.be.rejected
|
||||
});
|
||||
|
||||
it("clear invalid status value", function() {
|
||||
return request.put(base_url + "/servers/" + server.data.id + "/clear?status=somethingstrange")
|
||||
it("clear invalid state value", function() {
|
||||
return request.put(base_url + "/servers/" + server.data.id + "/clear?state=somethingstrange")
|
||||
.should.be.rejected
|
||||
});
|
||||
|
||||
|
Reference in New Issue
Block a user