Merge branch '2.3' into 2.4
This commit is contained in:
@ -13,24 +13,252 @@
|
||||
|
||||
require('./common.js')()
|
||||
|
||||
const list_servers_fields = [
|
||||
{
|
||||
name: 'Server',
|
||||
path: 'id',
|
||||
description: 'Server name'
|
||||
},
|
||||
{
|
||||
name: 'Address',
|
||||
path: 'attributes.parameters.address',
|
||||
description: 'Address where the server listens'
|
||||
},
|
||||
{
|
||||
name: 'Port',
|
||||
path: 'attributes.parameters.port',
|
||||
description: 'The port on which the server listens'
|
||||
},
|
||||
{
|
||||
name: 'Connections',
|
||||
path: 'attributes.statistics.connections',
|
||||
description: 'Current connection count'
|
||||
},
|
||||
{
|
||||
name: 'State',
|
||||
path: 'attributes.state',
|
||||
description: 'Server state'
|
||||
},
|
||||
{
|
||||
name: 'GTID',
|
||||
path: 'attributes.gtid_current_pos',
|
||||
description: 'Current value of @@gtid_current_pos'
|
||||
}
|
||||
]
|
||||
|
||||
const list_services_fields = [
|
||||
{
|
||||
name: 'Service',
|
||||
path: 'id',
|
||||
description: 'Service name'
|
||||
},
|
||||
{
|
||||
name: 'Router',
|
||||
path: 'attributes.router',
|
||||
description: 'Router used by the service'
|
||||
},
|
||||
{
|
||||
name: 'Connections',
|
||||
path: 'attributes.connections',
|
||||
description: 'Current connection count'
|
||||
},
|
||||
{
|
||||
name: 'Total Connections',
|
||||
path: 'attributes.total_connections',
|
||||
description: 'Total connection count'
|
||||
},
|
||||
{
|
||||
name: 'Servers',
|
||||
path: 'relationships.servers.data[].id',
|
||||
description: 'Servers that the service uses'
|
||||
}
|
||||
]
|
||||
|
||||
const list_listeners_fields = [
|
||||
{
|
||||
name: 'Name',
|
||||
path: 'id',
|
||||
description: 'Listener name'
|
||||
},
|
||||
{
|
||||
name: 'Port',
|
||||
path: 'attributes.parameters.port',
|
||||
description: 'The port where the listener listens'
|
||||
},
|
||||
{
|
||||
name: 'Host',
|
||||
path: 'attributes.parameters.host',
|
||||
description: 'The address or socket where the listener listens'
|
||||
},
|
||||
{
|
||||
name: 'State',
|
||||
path: 'attributes.state',
|
||||
description: 'Listener state'
|
||||
}
|
||||
]
|
||||
|
||||
const list_monitors_fields = [
|
||||
{
|
||||
name: 'Monitor',
|
||||
path: 'id',
|
||||
description: 'Monitor name'
|
||||
},
|
||||
{
|
||||
name: 'State',
|
||||
path: 'attributes.state',
|
||||
description: 'Monitor state'
|
||||
},
|
||||
{
|
||||
name: 'Servers',
|
||||
path: 'relationships.servers.data[].id',
|
||||
description: 'The servers that this monitor monitors'
|
||||
}
|
||||
]
|
||||
|
||||
const list_sessions_fields = [
|
||||
{
|
||||
name: 'Id',
|
||||
path: 'id',
|
||||
description: 'Session ID'
|
||||
},
|
||||
{
|
||||
name: 'User',
|
||||
path: 'attributes.user',
|
||||
description: 'Username'
|
||||
},
|
||||
{
|
||||
name: 'Host',
|
||||
path: 'attributes.remote',
|
||||
description: 'Client host address'
|
||||
},
|
||||
{
|
||||
name: 'Connected',
|
||||
path: 'attributes.connected',
|
||||
description: 'Time when the session started'
|
||||
},
|
||||
{
|
||||
name: 'Idle',
|
||||
path: 'attributes.idle',
|
||||
description: 'How long the session has been idle, in seconds'
|
||||
},
|
||||
{
|
||||
name: 'Service',
|
||||
path: 'relationships.services.data[].id',
|
||||
description: 'The service where the session connected'
|
||||
}
|
||||
]
|
||||
|
||||
const list_filters_fields = [
|
||||
{
|
||||
name: 'Filter',
|
||||
path: 'id',
|
||||
description: 'Filter name'
|
||||
},
|
||||
{
|
||||
name: 'Service',
|
||||
path: 'relationships.services.data[].id',
|
||||
description: 'Services that use the filter'
|
||||
},
|
||||
{
|
||||
name: 'Module',
|
||||
path: 'attributes.module',
|
||||
description: 'The module that the filter uses'
|
||||
}
|
||||
]
|
||||
|
||||
const list_modules_fields = [
|
||||
{
|
||||
name: 'Module',
|
||||
path: 'id',
|
||||
description: 'Module name'
|
||||
},
|
||||
{
|
||||
name: 'Type',
|
||||
path: 'attributes.module_type',
|
||||
description: 'Module type'
|
||||
},
|
||||
{
|
||||
name: 'Version',
|
||||
path: 'attributes.version',
|
||||
description: 'Module version'
|
||||
}
|
||||
]
|
||||
|
||||
const list_threads_fields = [
|
||||
{
|
||||
name: 'Id',
|
||||
path: 'id',
|
||||
description: 'Thread ID'
|
||||
},
|
||||
{
|
||||
name: 'Current FDs',
|
||||
path: 'attributes.stats.current_descriptors',
|
||||
description: 'Current number of managed file descriptors'
|
||||
},
|
||||
{
|
||||
name: 'Total FDs',
|
||||
path: 'attributes.stats.total_descriptors',
|
||||
description: 'Total number of managed file descriptors'
|
||||
},
|
||||
{
|
||||
name: 'Load (1s)',
|
||||
path: 'attributes.stats.load.last_second',
|
||||
description: 'Load percentage over the last second'
|
||||
},
|
||||
{
|
||||
name: 'Load (1m)',
|
||||
path: 'attributes.stats.load.last_minute',
|
||||
description: 'Load percentage over the last minute'
|
||||
},
|
||||
{
|
||||
name: 'Load (1h)',
|
||||
path: 'attributes.stats.load.last_hour',
|
||||
description: 'Load percentage over the last hour'
|
||||
}
|
||||
]
|
||||
|
||||
const list_users_fields = [
|
||||
{
|
||||
name: 'Name',
|
||||
path: 'id',
|
||||
description: 'User name'
|
||||
},
|
||||
{
|
||||
name: 'Type',
|
||||
path: 'type',
|
||||
description: 'User type'
|
||||
},
|
||||
{
|
||||
name: 'Privileges',
|
||||
path: 'attributes.account',
|
||||
description: 'User privileges'
|
||||
},
|
||||
]
|
||||
|
||||
const list_commands_fields = [
|
||||
{
|
||||
name: 'Module',
|
||||
path: 'id',
|
||||
description: 'Module name'
|
||||
},
|
||||
{
|
||||
name: 'Commands',
|
||||
path: 'attributes.commands[].id',
|
||||
description: 'Available commands'
|
||||
}
|
||||
]
|
||||
|
||||
exports.command = 'list <command>'
|
||||
exports.desc = 'List objects'
|
||||
exports.handler = function() {}
|
||||
exports.builder = function(yargs) {
|
||||
yargs
|
||||
.command('servers', 'List servers', function(yargs) {
|
||||
return yargs.epilog('List all servers in MaxScale.')
|
||||
return yargs.epilog('List all servers in MaxScale.' +
|
||||
fieldDescriptions(list_servers_fields))
|
||||
.usage('Usage: list servers')
|
||||
}, function(argv) {
|
||||
maxctrl(argv, function(host) {
|
||||
fields = [
|
||||
{'Server': 'id'},
|
||||
{'Address': 'attributes.parameters.address'},
|
||||
{'Port': 'attributes.parameters.port'},
|
||||
{'Connections': 'attributes.statistics.connections'},
|
||||
{'State': 'attributes.state'},
|
||||
{'GTID': 'attributes.gtid_current_pos'}
|
||||
]
|
||||
|
||||
// First, get the list of all servers
|
||||
return getJson(host, 'servers')
|
||||
@ -76,52 +304,41 @@ exports.builder = function(yargs) {
|
||||
}
|
||||
})
|
||||
})
|
||||
.then(() => filterResource(res, fields))
|
||||
.then((res) => rawCollectionAsTable(res, fields))
|
||||
.then(() => filterResource(res, list_servers_fields))
|
||||
.then((res) => rawCollectionAsTable(res, list_servers_fields))
|
||||
})
|
||||
})
|
||||
})
|
||||
.command('services', 'List services', function(yargs) {
|
||||
return yargs.epilog('List all services and the servers they use.')
|
||||
return yargs.epilog('List all services and the servers they use.' +
|
||||
fieldDescriptions(list_services_fields))
|
||||
.usage('Usage: list services')
|
||||
}, function(argv) {
|
||||
maxctrl(argv, function(host) {
|
||||
return getCollection(host, 'services',[
|
||||
{'Service': 'id'},
|
||||
{'Router': 'attributes.router'},
|
||||
{'Connections': 'attributes.connections'},
|
||||
{'Total Connections': 'attributes.total_connections'},
|
||||
{'Servers': 'relationships.servers.data[].id'}
|
||||
])
|
||||
return getCollection(host, 'services', list_services_fields)
|
||||
})
|
||||
})
|
||||
.command('listeners <service>', 'List listeners of a service', function(yargs) {
|
||||
return yargs.epilog('List listeners for a service.')
|
||||
return yargs.epilog('List listeners for a service.' +
|
||||
fieldDescriptions(list_listeners_fields))
|
||||
.usage('Usage: list listeners <service>')
|
||||
}, function(argv) {
|
||||
maxctrl(argv, function(host) {
|
||||
return getSubCollection(host, 'services/' + argv.service, 'attributes.listeners', [
|
||||
{'Name': 'id'},
|
||||
{'Port': 'attributes.parameters.port'},
|
||||
{'Host': 'attributes.parameters.host'},
|
||||
{'State': 'attributes.state'}
|
||||
])
|
||||
return getSubCollection(host, 'services/' + argv.service, 'attributes.listeners', list_listeners_fields)
|
||||
})
|
||||
})
|
||||
.command('monitors', 'List monitors', function(yargs) {
|
||||
return yargs.epilog('List all monitors in MaxScale.')
|
||||
return yargs.epilog('List all monitors in MaxScale.' +
|
||||
fieldDescriptions(list_monitors_fields))
|
||||
.usage('Usage: list monitors')
|
||||
}, function(argv) {
|
||||
maxctrl(argv, function(host) {
|
||||
return getCollection(host, 'monitors', [
|
||||
{'Monitor': 'id'},
|
||||
{'State': 'attributes.state'},
|
||||
{'Servers': 'relationships.servers.data[].id'}
|
||||
])
|
||||
return getCollection(host, 'monitors', list_monitors_fields)
|
||||
})
|
||||
})
|
||||
.command('sessions', 'List sessions', function(yargs) {
|
||||
return yargs.epilog('List all client sessions.')
|
||||
return yargs.epilog('List all client sessions.' +
|
||||
fieldDescriptions(list_sessions_fields))
|
||||
.usage('Usage: list sessions')
|
||||
.group([rDnsOption.shortname], 'Options:')
|
||||
.option(rDnsOption.shortname, rDnsOption.definition)
|
||||
@ -131,76 +348,53 @@ exports.builder = function(yargs) {
|
||||
if (argv[this.rDnsOption.shortname]) {
|
||||
resource += '?' + this.rDnsOption.optionOn
|
||||
}
|
||||
return getCollection(host, resource,[
|
||||
{'Id': 'id'},
|
||||
{'User': 'attributes.user'},
|
||||
{'Host': 'attributes.remote'},
|
||||
{'Connected': 'attributes.connected'},
|
||||
{'Idle': 'attributes.idle'},
|
||||
{'Service': 'relationships.services.data[].id'}
|
||||
])
|
||||
return getCollection(host, 'sessions', list_sessions_fields)
|
||||
})
|
||||
})
|
||||
.command('filters', 'List filters', function(yargs) {
|
||||
return yargs.epilog('List all filters in MaxScale.')
|
||||
return yargs.epilog('List all filters in MaxScale.' +
|
||||
fieldDescriptions(list_filters_fields))
|
||||
.usage('Usage: list filters')
|
||||
}, function(argv) {
|
||||
maxctrl(argv, function(host) {
|
||||
return getCollection(host, 'filters', [
|
||||
{'Filter': 'id'},
|
||||
{'Service': 'relationships.services.data[].id'},
|
||||
{'Module': 'attributes.module'}
|
||||
])
|
||||
return getCollection(host, 'filters', list_filters_fields)
|
||||
})
|
||||
})
|
||||
.command('modules', 'List loaded modules', function(yargs) {
|
||||
return yargs.epilog('List all currently loaded modules.')
|
||||
return yargs.epilog('List all currently loaded modules.' +
|
||||
fieldDescriptions(list_modules_fields))
|
||||
.usage('Usage: list modules')
|
||||
}, function(argv) {
|
||||
maxctrl(argv, function(host) {
|
||||
return getCollection(host, 'maxscale/modules',[
|
||||
{'Module':'id'},
|
||||
{'Type':'attributes.module_type'},
|
||||
{'Version': 'attributes.version'}
|
||||
])
|
||||
return getCollection(host, 'maxscale/modules', list_modules_fields)
|
||||
})
|
||||
})
|
||||
.command('threads', 'List threads', function(yargs) {
|
||||
return yargs.epilog('List all worker threads.')
|
||||
return yargs.epilog('List all worker threads.' +
|
||||
fieldDescriptions(list_threads_fields))
|
||||
.usage('Usage: list threads')
|
||||
}, function(argv) {
|
||||
maxctrl(argv, function(host) {
|
||||
return getCollection(host, 'maxscale/threads', [
|
||||
{'Id': 'id'},
|
||||
{'Current FDs': 'attributes.stats.current_descriptors'},
|
||||
{'Total FDs': 'attributes.stats.total_descriptors'},
|
||||
{'Load (1s)': 'attributes.stats.load.last_second'},
|
||||
{'Load (1m)': 'attributes.stats.load.last_minute'},
|
||||
{'Load (1h)': 'attributes.stats.load.last_hour'}
|
||||
])
|
||||
return getCollection(host, 'maxscale/threads', list_threads_fields)
|
||||
})
|
||||
})
|
||||
.command('users', 'List created users', function(yargs) {
|
||||
return yargs.epilog('List network the users that can be used to connect to the MaxScale REST API as well as enabled local accounts.')
|
||||
return yargs.epilog('List network the users that can be used to connect to the MaxScale REST API' +
|
||||
' as well as enabled local accounts.' +
|
||||
fieldDescriptions(list_users_fields))
|
||||
.usage('Usage: list users')
|
||||
}, function(argv) {
|
||||
maxctrl(argv, function(host) {
|
||||
return getCollection(host, 'users',[
|
||||
{'Name':'id'},
|
||||
{'Type':'type'},
|
||||
{'Privileges':'attributes.account'},
|
||||
])
|
||||
return getCollection(host, 'users', list_users_fields)
|
||||
})
|
||||
})
|
||||
.command('commands', 'List module commands', function(yargs) {
|
||||
return yargs.epilog('List all available module commands.')
|
||||
return yargs.epilog('List all available module commands.' +
|
||||
fieldDescriptions(list_commands_fields))
|
||||
.usage('Usage: list commands')
|
||||
}, function(argv) {
|
||||
maxctrl(argv, function(host) {
|
||||
return getCollection(host, 'maxscale/modules',[
|
||||
{'Module':'id'},
|
||||
{'Commands': 'attributes.commands[].id'}
|
||||
])
|
||||
return getCollection(host, 'maxscale/modules', list_commands_fields)
|
||||
})
|
||||
})
|
||||
.usage('Usage: list <command>')
|
||||
|
||||
Reference in New Issue
Block a user