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:
@ -121,4 +121,13 @@ SERV_LISTENER* listener_iterator_init(const struct service* service, LISTENER_IT
|
|||||||
*/
|
*/
|
||||||
SERV_LISTENER* listener_iterator_next(LISTENER_ITERATOR* iter);
|
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
|
MXS_END_DECLS
|
||||||
|
|||||||
@ -104,7 +104,8 @@ exports.builder = function(yargs) {
|
|||||||
return getSubCollection(host, 'services/' + argv.service, 'attributes.listeners', [
|
return getSubCollection(host, 'services/' + argv.service, 'attributes.listeners', [
|
||||||
{'Name': 'id'},
|
{'Name': 'id'},
|
||||||
{'Port': 'attributes.parameters.port'},
|
{'Port': 'attributes.parameters.port'},
|
||||||
{'Host': 'attributes.parameters.host'}
|
{'Host': 'attributes.parameters.host'},
|
||||||
|
{'State': 'attributes.state'}
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@ -527,6 +527,7 @@ json_t* listener_to_json(const SERV_LISTENER* listener)
|
|||||||
}
|
}
|
||||||
|
|
||||||
json_t* attr = json_object();
|
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);
|
json_object_set_new(attr, CN_PARAMETERS, param);
|
||||||
|
|
||||||
if (listener->listener->authfunc.diagnostic_json)
|
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_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_ID, json_string(listener->name));
|
||||||
json_object_set_new(rval, CN_TYPE, json_string(CN_LISTENERS));
|
json_object_set_new(rval, CN_TYPE, json_string(CN_LISTENERS));
|
||||||
|
json_object_set_new(rval, CN_ATTRIBUTES, attr);
|
||||||
|
|
||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
@ -580,3 +581,28 @@ SERV_LISTENER* listener_iterator_next(LISTENER_ITERATOR* iter)
|
|||||||
|
|
||||||
return iter->current;
|
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";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -1626,10 +1626,7 @@ dListListeners(DCB *dcb)
|
|||||||
listener->name, service->name, listener->protocol,
|
listener->name, service->name, listener->protocol,
|
||||||
(listener && listener->address) ? listener->address : "*",
|
(listener && listener->address) ? listener->address : "*",
|
||||||
listener->port,
|
listener->port,
|
||||||
(!listener->listener ||
|
listener_state_to_string(listener));
|
||||||
!listener->listener->session ||
|
|
||||||
listener->listener->session->state == SESSION_STATE_LISTENER_STOPPED) ?
|
|
||||||
"Stopped" : "Running");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
service = service->next;
|
service = service->next;
|
||||||
@ -2099,10 +2096,7 @@ serviceListenerRowCallback(RESULTSET *set, void *data)
|
|||||||
resultset_row_set(row, 2, (lptr && lptr->address) ? lptr->address : "*");
|
resultset_row_set(row, 2, (lptr && lptr->address) ? lptr->address : "*");
|
||||||
sprintf(buf, "%d", lptr->port);
|
sprintf(buf, "%d", lptr->port);
|
||||||
resultset_row_set(row, 3, buf);
|
resultset_row_set(row, 3, buf);
|
||||||
resultset_row_set(row, 4,
|
resultset_row_set(row, 4, listener_state_to_string(lptr));
|
||||||
(!lptr->listener || !lptr->listener->session ||
|
|
||||||
lptr->listener->session->state == SESSION_STATE_LISTENER_STOPPED) ?
|
|
||||||
"Stopped" : "Running");
|
|
||||||
spinlock_release(&service_spin);
|
spinlock_release(&service_spin);
|
||||||
return row;
|
return row;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user