MXS-1220: Make nested resources links

If a resource can be accessed from more than one place, it should be a
link. The previous change that duplicated the content for nested resources
wasn't a very clean solution. With links, the content is easier to browse
using a normal browser.
This commit is contained in:
Markus Mäkelä
2017-04-18 22:20:21 +03:00
committed by Markus Mäkelä
parent ec6f3d566b
commit 8c77e62872
4 changed files with 46 additions and 25 deletions

View File

@ -20,6 +20,7 @@
#include <maxscale/protocol.h> #include <maxscale/protocol.h>
#include <maxscale/ssl.h> #include <maxscale/ssl.h>
#include <maxscale/hashtable.h> #include <maxscale/hashtable.h>
#include <maxscale/jansson.h>
MXS_BEGIN_DECLS MXS_BEGIN_DECLS
@ -61,6 +62,15 @@ typedef struct servlistener
*/ */
bool listener_serialize(const SERV_LISTENER *listener); bool listener_serialize(const SERV_LISTENER *listener);
/**
* @brief Convert listener to JSON
*
* @param listener Listener to convert
*
* @return Converted listener
*/
json_t* listener_to_json(const SERV_LISTENER* listener);
SERV_LISTENER* listener_alloc(struct service* service, const char* name, const char *protocol, SERV_LISTENER* listener_alloc(struct service* service, const char* name, const char *protocol,
const char *address, unsigned short port, const char *authenticator, const char *address, unsigned short port, const char *authenticator,
const char* auth_options, SSL_LISTENER *ssl); const char* auth_options, SSL_LISTENER *ssl);

View File

@ -511,3 +511,29 @@ bool listener_serialize(const SERV_LISTENER *listener)
return rval; return rval;
} }
json_t* listener_to_json(const SERV_LISTENER* listener)
{
json_t* rval = json_object();
json_object_set_new(rval, "name", json_string(listener->name));
json_object_set_new(rval, "address", json_string(listener->address));
json_object_set_new(rval, "port", json_integer(listener->port));
json_object_set_new(rval, "protocol", json_string(listener->protocol));
json_object_set_new(rval, "authenticator", json_string(listener->authenticator));
json_object_set_new(rval, "auth_options", json_string(listener->auth_options));
if (listener->ssl)
{
json_t* ssl = json_object();
const char* ssl_method = ssl_method_type_to_string(listener->ssl->ssl_method_type);
json_object_set_new(ssl, "ssl_version", json_string(ssl_method));
json_object_set_new(ssl, "ssl_cert", json_string(listener->ssl->ssl_cert));
json_object_set_new(ssl, "ssl_ca_cert", json_string(listener->ssl->ssl_ca_cert));
json_object_set_new(ssl, "ssl_key", json_string(listener->ssl->ssl_key));
json_object_set_new(rval, "ssl", ssl);
}
return rval;
}

View File

@ -1559,7 +1559,9 @@ json_t* monitor_to_json(const MXS_MONITOR* monitor)
for (MXS_MONITOR_SERVERS *db = monitor->databases; db; db = db->next) for (MXS_MONITOR_SERVERS *db = monitor->databases; db; db = db->next)
{ {
json_array_append_new(arr, server_to_json(db->server)); string s = "/servers/";
s += db->server->unique_name;
json_array_append_new(arr, json_string(s.c_str()));
} }
json_object_set_new(rval, "servers", arr); json_object_set_new(rval, "servers", arr);

View File

@ -2415,7 +2415,9 @@ json_t* service_to_json(const SERVICE* service)
for (int i = 0; i < service->n_filters; i++) for (int i = 0; i < service->n_filters; i++)
{ {
json_array_append_new(arr, filter_to_json(service->filters[i])); string filter = "/filters/";
filter += service->filters[i]->name;
json_array_append_new(arr, json_string(filter.c_str()));
} }
json_object_set_new(rval, "filters", arr); json_object_set_new(rval, "filters", arr);
@ -2427,28 +2429,7 @@ json_t* service_to_json(const SERVICE* service)
for (SERV_LISTENER* p = service->ports; p; p = p->next) for (SERV_LISTENER* p = service->ports; p; p = p->next)
{ {
json_t* listener = json_object(); json_array_append_new(arr, listener_to_json(p));
json_object_set_new(listener, "name", json_string(p->name));
json_object_set_new(listener, "address", json_string(p->address));
json_object_set_new(listener, "port", json_integer(p->port));
json_object_set_new(listener, "protocol", json_string(p->protocol));
json_object_set_new(listener, "authenticator", json_string(p->authenticator));
json_object_set_new(listener, "auth_options", json_string(p->auth_options));
if (p->ssl)
{
json_t* ssl = json_object();
const char* ssl_method = ssl_method_type_to_string(p->ssl->ssl_method_type);
json_object_set_new(ssl, "ssl_version", json_string(ssl_method));
json_object_set_new(ssl, "ssl_cert", json_string(p->ssl->ssl_cert));
json_object_set_new(ssl, "ssl_ca_cert", json_string(p->ssl->ssl_ca_cert));
json_object_set_new(ssl, "ssl_key", json_string(p->ssl->ssl_key));
json_object_set_new(listener, "ssl", ssl);
}
json_array_append_new(arr, listener);
} }
json_object_set_new(rval, "listeners", arr); json_object_set_new(rval, "listeners", arr);
@ -2473,7 +2454,9 @@ json_t* service_to_json(const SERVICE* service)
{ {
if (SERVER_REF_IS_ACTIVE(ref)) if (SERVER_REF_IS_ACTIVE(ref))
{ {
json_array_append_new(arr, server_to_json(ref->server)); string s = "/servers/";
s += ref->server->unique_name;
json_array_append_new(arr, json_string(s.c_str()));
} }
} }