From 25849a1143a916b31fb9782a6cf10399849f88ef Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Mon, 21 Jun 2010 11:38:37 +0200 Subject: [PATCH] "show graph" action: Add page showing one instance of a graph. --- src/Makefile.am | 1 + src/action_list_graphs.c | 2 +- src/action_show_graph.c | 142 +++++++++++++++++++++++++++++++++++++++++++++++ src/action_show_graph.h | 7 +++ src/main.c | 2 + 5 files changed, 153 insertions(+), 1 deletion(-) create mode 100644 src/action_show_graph.c create mode 100644 src/action_show_graph.h diff --git a/src/Makefile.am b/src/Makefile.am index a77f669..ea4e837 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -18,6 +18,7 @@ collection_fcgi_SOURCES = main.c \ action_graph.c action_graph.h \ action_list_graphs.c action_list_graphs.h \ action_search_json.c action_search_json.h \ + action_show_graph.c action_show_graph.h \ common.c common.h \ filesystem.c filesystem.h \ graph_types.h \ diff --git a/src/action_list_graphs.c b/src/action_list_graphs.c index 922308b..7c8768a 100644 --- a/src/action_list_graphs.c +++ b/src/action_list_graphs.c @@ -54,7 +54,7 @@ static int print_graph_inst_html (graph_config_t *cfg, /* {{{ */ inst_describe (cfg, inst, desc, sizeof (desc)); html_escape_buffer (desc, sizeof (desc)); - printf ("
  • %s
  • \n", + printf ("
  • %s
  • \n", script_name (), params, desc); if (data->limit > 0) diff --git a/src/action_show_graph.c b/src/action_show_graph.c new file mode 100644 index 0000000..40ebcd3 --- /dev/null +++ b/src/action_show_graph.c @@ -0,0 +1,142 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "action_show_graph.h" +#include "common.h" +#include "graph_list.h" +#include "utils_cgi.h" + +#include +#include + +#define OUTPUT_ERROR(...) do { \ + printf ("Content-Type: text/plain\n\n"); \ + printf (__VA_ARGS__); \ + return (0); \ +} while (0) + +struct show_graph_data_s +{ + graph_config_t *cfg; + graph_instance_t *inst; +}; +typedef struct show_graph_data_s show_graph_data_t; + +static int show_instance_list_cb (graph_instance_t *inst, /* {{{ */ + void *user_data) +{ + show_graph_data_t *data = user_data; + char descr[128]; + char params[1024]; + + memset (descr, 0, sizeof (descr)); + inst_describe (data->cfg, inst, descr, sizeof (descr)); + html_escape_buffer (descr, sizeof (descr)); + + if (inst == data->inst) + { + printf ("
  • %s
  • \n", descr); + return (0); + } + + memset (params, 0, sizeof (params)); + inst_get_params (data->cfg, inst, params, sizeof (params)); + html_escape_buffer (params, sizeof (params)); + + printf ("
  • %s
  • \n", + script_name (), params, descr); + + return (0); +} /* }}} int show_instance_list_cb */ + +static int show_instance_list (void *user_data) /* {{{ */ +{ + show_graph_data_t *data = user_data; + graph_instance_t *inst; + char title[128]; + + memset (title, 0, sizeof (title)); + graph_get_title (data->cfg, title, sizeof (title)); + html_escape_buffer (title, sizeof (title)); + + printf ("
      \n" + "
    • %s\n" + "
        \n", title); + + inst = graph_get_instances (data->cfg); + inst_foreach (inst, show_instance_list_cb, user_data); + + printf ("
      \n" + "
    \n"); + + return (0); +} /* }}} int show_instance_list */ + +static int show_graph (void *user_data) /* {{{ */ +{ + show_graph_data_t *data = user_data; + char title[128]; + char descr[128]; + char params[1024]; + + memset (title, 0, sizeof (title)); + graph_get_title (data->cfg, title, sizeof (title)); + html_escape_buffer (title, sizeof (title)); + + memset (descr, 0, sizeof (descr)); + inst_describe (data->cfg, data->inst, descr, sizeof (descr)); + html_escape_buffer (descr, sizeof (descr)); + + memset (params, 0, sizeof (params)); + inst_get_params (data->cfg, data->inst, params, sizeof (params)); + html_escape_buffer (params, sizeof (params)); + + printf ("
    \n", + script_name (), params, title, descr); + + return (0); +} /* }}} int show_graph */ + +int action_show_graph (void) /* {{{ */ +{ + page_callbacks_t pg_callbacks = PAGE_CALLBACKS_INIT; + show_graph_data_t pg_data; + + char title[128]; + char descr[128]; + char html_title[128]; + + pg_data.cfg = gl_graph_get_selected (); + if (pg_data.cfg == NULL) + OUTPUT_ERROR ("gl_graph_get_selected () failed.\n"); + + pg_data.inst = inst_get_selected (pg_data.cfg); + if (pg_data.inst == NULL) + OUTPUT_ERROR ("inst_get_selected (%p) failed.\n", (void *) pg_data.cfg); + + memset (title, 0, sizeof (title)); + graph_get_title (pg_data.cfg, title, sizeof (title)); + + memset (descr, 0, sizeof (descr)); + inst_describe (pg_data.cfg, pg_data.inst, descr, sizeof (descr)); + + snprintf (html_title, sizeof (html_title), "Graph \"%s / %s\"", + title, descr); + html_title[sizeof (html_title) - 1] = 0; + + pg_callbacks.top_right = html_print_search_box; + pg_callbacks.middle_center = show_graph; + pg_callbacks.middle_left = show_instance_list; + + html_print_page (html_title, &pg_callbacks, &pg_data); + + return (0); +} /* }}} int action_graph */ + +/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/action_show_graph.h b/src/action_show_graph.h new file mode 100644 index 0000000..5b5e78a --- /dev/null +++ b/src/action_show_graph.h @@ -0,0 +1,7 @@ +#ifndef ACTION_SHOW_GRAPH_H +#define ACTION_SHOW_GRAPH_H 1 + +int action_show_graph (void); + +#endif /* ACTION_SHOW_GRAPH_H */ +/* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/main.c b/src/main.c index 13add00..5fd34d1 100644 --- a/src/main.c +++ b/src/main.c @@ -16,6 +16,7 @@ #include "action_graph.h" #include "action_list_graphs.h" #include "action_search_json.h" +#include "action_show_graph.h" /* Include this last, so the macro magic of doesn't interfere * with our own header files. */ @@ -36,6 +37,7 @@ static const action_t actions[] = { "graph", action_graph }, { "list_graphs", action_list_graphs }, { "search_json", action_search_json }, + { "show_graph", action_show_graph }, { "usage", action_usage } }; static const size_t actions_num = sizeof (actions) / sizeof (actions[0]); -- 2.11.0