MXS-1782: Add listener state to REST API

The state of each individual listener is now displayed in the REST
API. Created common functions for printing the listener state and took
them into use. Added the new state into MaxCtrl output.
This commit is contained in:
Markus Mäkelä 2018-04-15 09:20:43 +03:00
parent f8a91fb272
commit 32fdc3d454
No known key found for this signature in database
GPG Key ID: 72D48FCE664F7B19
4 changed files with 40 additions and 10 deletions

View File

@ -121,4 +121,13 @@ SERV_LISTENER* listener_iterator_init(const struct service* service, LISTENER_IT
*/
SERV_LISTENER* listener_iterator_next(LISTENER_ITERATOR* iter);
/**
* Get listener state as a string
*
* @param listener Listener to inspect
*
* @return State of the listener as a string
*/
const char* listener_state_to_string(const SERV_LISTENER* listener);
MXS_END_DECLS

View File

@ -104,7 +104,8 @@ exports.builder = function(yargs) {
return getSubCollection(host, 'services/' + argv.service, 'attributes.listeners', [
{'Name': 'id'},
{'Port': 'attributes.parameters.port'},
{'Host': 'attributes.parameters.host'}
{'Host': 'attributes.parameters.host'},
{'State': 'attributes.state'}
])
})
})

View File

@ -527,6 +527,7 @@ json_t* listener_to_json(const SERV_LISTENER* listener)
}
json_t* attr = json_object();
json_object_set_new(attr, CN_STATE, json_string(listener_state_to_string(listener)));
json_object_set_new(attr, CN_PARAMETERS, param);
if (listener->listener->authfunc.diagnostic_json)
@ -540,9 +541,9 @@ json_t* listener_to_json(const SERV_LISTENER* listener)
}
json_t* rval = json_object();
json_object_set_new(rval, CN_ATTRIBUTES, attr);
json_object_set_new(rval, CN_ID, json_string(listener->name));
json_object_set_new(rval, CN_TYPE, json_string(CN_LISTENERS));
json_object_set_new(rval, CN_ATTRIBUTES, attr);
return rval;
}
@ -580,3 +581,28 @@ SERV_LISTENER* listener_iterator_next(LISTENER_ITERATOR* iter)
return iter->current;
}
const char* listener_state_to_string(const SERV_LISTENER* listener)
{
ss_dassert(listener);
if (listener->listener && listener->listener->session)
{
switch (listener->listener->session->state)
{
case SESSION_STATE_LISTENER_STOPPED:
return "Stopped";
case SESSION_STATE_LISTENER:
return "Running";
default:
ss_dassert(!true);
return "Unknown";
}
}
else
{
return "Failed";
}
}

View File

@ -1626,10 +1626,7 @@ dListListeners(DCB *dcb)
listener->name, service->name, listener->protocol,
(listener && listener->address) ? listener->address : "*",
listener->port,
(!listener->listener ||
!listener->listener->session ||
listener->listener->session->state == SESSION_STATE_LISTENER_STOPPED) ?
"Stopped" : "Running");
listener_state_to_string(listener));
}
}
service = service->next;
@ -2099,10 +2096,7 @@ serviceListenerRowCallback(RESULTSET *set, void *data)
resultset_row_set(row, 2, (lptr && lptr->address) ? lptr->address : "*");
sprintf(buf, "%d", lptr->port);
resultset_row_set(row, 3, buf);
resultset_row_set(row, 4,
(!lptr->listener || !lptr->listener->session ||
lptr->listener->session->state == SESSION_STATE_LISTENER_STOPPED) ?
"Stopped" : "Running");
resultset_row_set(row, 4, listener_state_to_string(lptr));
spinlock_release(&service_spin);
return row;
}