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
4 changed files with 40 additions and 10 deletions

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;
}