#include <string.h>
#include <errno.h>
+#include "action_list_graphs.h"
+#include "graph.h"
+#include "graph_ident.h"
+#include "graph_list.h"
+#include "utils_params.h"
+
#include <fcgiapp.h>
#include <fcgi_stdio.h>
-#include "graph_list.h"
-
-static int print_graph (const graph_list_t *gl, void *user_data) /* {{{ */
+static int print_graph_inst_json (__attribute__((unused)) graph_config_t *cfg, /* {{{ */
+ graph_instance_t *inst,
+ void *user_data)
{
_Bool *first;
+ graph_ident_t *ident;
+ char *json;
- if ((gl == NULL) || (user_data == NULL))
- return (EINVAL);
+ first = user_data;
- first = (_Bool *) user_data;
- if (!*first)
- printf (",\n");
- *first = 0;
+ ident = inst_get_selector (inst);
+ if (ident == NULL)
+ return (-1);
- printf (" {");
+ json = ident_to_json (ident);
+ if (json == NULL)
+ {
+ ident_destroy (ident);
+ return (ENOMEM);
+ }
- printf ("\"host\":\"%s\"", gl->host);
-
- printf (",\"plugin\":\"%s\"", gl->plugin);
- if (gl->plugin_instance != NULL)
- printf (",\"plugin_instance\":\"%s\"", gl->plugin_instance);
+ if (*first)
+ printf ("%s", json);
else
- printf (",\"plugin_instance\":null");
+ printf (",\n%s", json);
+
+ *first = 0;
+
+ ident_destroy (ident);
+ return (0);
+} /* }}} int print_graph_inst_json */
+
+static int print_graph_json (graph_config_t *cfg, /* {{{ */
+ void *user_data)
+{
+ return (gl_graph_instance_get_all (cfg, print_graph_inst_json, user_data));
+} /* }}} int print_graph_json */
+
+static int list_graphs_json (void) /* {{{ */
+{
+ _Bool first = 1;
+
+ printf ("Content-Type: application/json\n\n");
+
+ printf ("[\n");
+ gl_graph_get_all (print_graph_json, /* user_data = */ &first);
+ printf ("\n]");
+
+ return (0);
+} /* }}} int list_graphs_json */
+
+struct callback_data_s
+{
+ graph_config_t *cfg;
+};
+typedef struct callback_data_s callback_data_t;
+
+static int print_graph_inst_html (graph_config_t *cfg, /* {{{ */
+ graph_instance_t *inst,
+ void *user_data)
+{
+ callback_data_t *data = user_data;
+ char params[1024];
+ char desc[1024];
+
+ if (data->cfg != cfg)
+ {
+ if (data->cfg != NULL)
+ printf (" </ul></li>\n");
+
+ memset (desc, 0, sizeof (desc));
+ graph_get_title (cfg, desc, sizeof (desc));
+
+ printf (" <li>%s\n <ul>\n", desc);
- printf (",\"type\":\"%s\"", gl->type);
- if (gl->type_instance != NULL)
- printf (",\"type_instance\":\"%s\"", gl->type_instance);
+ data->cfg = cfg;
+ }
+
+ memset (params, 0, sizeof (params));
+ inst_get_params (cfg, inst, params, sizeof (params));
+
+ memset (desc, 0, sizeof (desc));
+ inst_describe (cfg, inst, desc, sizeof (desc));
+
+ printf (" <li><a href=\"test.fcgi?action=graph;%s\">%s</a></li>\n",
+ params, desc);
+
+ return (0);
+} /* }}} int print_graph_inst_html */
+
+static int list_graphs_html (const char *term) /* {{{ */
+{
+ callback_data_t data = { NULL };
+ printf ("Content-Type: text/html\n\n");
+
+ printf ("<ul>\n");
+ if (term == NULL)
+ gl_instance_get_all (print_graph_inst_html, /* user_data = */ &data);
else
- printf (",\"type_instance\":null");
+ gl_search (term, print_graph_inst_html, /* user_data = */ &data);
- printf ("}");
+ if (data.cfg != NULL)
+ printf (" </ul></li>\n");
+
+ printf ("</ul>\n");
return (0);
-} /* }}} int print_graph */
+} /* }}} int list_graphs_html */
int action_list_graphs (void) /* {{{ */
{
- _Bool first = 1;
-
- printf ("Content-Type: text/plain\n\n");
+ const char *format;
gl_update ();
- printf ("[\n");
- gl_foreach (print_graph, /* user_data = */ &first);
- printf ("\n]");
+ format = param ("format");
+ if (format == NULL)
+ format = "html";
+
+ if (strcmp ("json", format) == 0)
+ return (list_graphs_json ());
+ else
+ return (list_graphs_html (param ("search")));
} /* }}} int action_list_graphs */
/* vim: set sw=2 sts=2 et fdm=marker : */