MXS-1220: Add GET support for service listeners

The service listeners can now be queried as a separate resource. This is
the first step towards the creation and destruction of listeners.
This commit is contained in:
Markus Mäkelä 2017-05-02 10:33:22 +03:00
parent 844ba6edd3
commit 60526f15b8
2 changed files with 21 additions and 4 deletions

View File

@ -279,6 +279,20 @@ HttpResponse cb_get_service(const HttpRequest& request)
return HttpResponse(MHD_HTTP_INTERNAL_SERVER_ERROR);
}
HttpResponse cb_get_service_listeners(const HttpRequest& request)
{
SERVICE* service = service_find(request.uri_part(1).c_str());
json_t* json = service_to_json(service, request.host());
// The 'listeners' key is always defined
json_t* listeners = json_incref(json_object_get(json, CN_LISTENERS));
ss_dassert(listeners);
json_decref(json);
return HttpResponse(MHD_HTTP_OK, listeners);
}
HttpResponse cb_all_filters(const HttpRequest& request)
{
return HttpResponse(MHD_HTTP_OK, filter_list_to_json(request.host()));
@ -398,6 +412,8 @@ public:
m_get.push_back(SResource(new Resource(cb_all_services, 1, "services")));
m_get.push_back(SResource(new Resource(cb_get_service, 2, "services", ":service")));
m_get.push_back(SResource(new Resource(cb_get_service_listeners, 3,
"services", ":service", "listeners")));
m_get.push_back(SResource(new Resource(cb_all_filters, 1, "filters")));
m_get.push_back(SResource(new Resource(cb_get_filter, 2, "filters", ":filter")));

View File

@ -2473,18 +2473,19 @@ json_t* service_to_json(const SERVICE* service, const char* host)
/** Add service parameters */
json_object_set_new(rval, CN_PARAMETERS, service_parameters_to_json(service));
/** Add listeners */
json_t* arr = json_array();
if (service->ports)
{
json_t* arr = json_array();
for (SERV_LISTENER* p = service->ports; p; p = p->next)
{
json_array_append_new(arr, listener_to_json(p));
}
json_object_set_new(rval, CN_LISTENERS, arr);
}
json_object_set_new(rval, CN_LISTENERS, arr);
/** Store relationships to other objects */
json_t* rel = json_object();