From 6261a817494a678f8bc5dca6718c54c51e6421e0 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Tue, 6 Jul 2010 11:08:22 +0200 Subject: [PATCH] "show graph" action: Implement a page showing all instances of a graph. --- src/Makefile.am | 1 + src/action_show_graph.c | 147 +++++++++++++++++++++++++++++++++++++ src/action_show_graph.h | 30 ++++++++ src/action_show_instance.h | 6 +- src/main.c | 2 + 5 files changed, 183 insertions(+), 3 deletions(-) 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 0f86311..d513262 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 \ action_show_instance.c action_show_instance.h \ common.c common.h \ filesystem.c filesystem.h \ diff --git a/src/action_show_graph.c b/src/action_show_graph.c new file mode 100644 index 0000000..5304a25 --- /dev/null +++ b/src/action_show_graph.c @@ -0,0 +1,147 @@ +/** + * collection4 - action_show_graph.c + * Copyright (C) 2010 Florian octo Forster + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + * + * Authors: + * Florian octo Forster + **/ + +#include +#include +#include +#include +#include +#include +#include + +#include "action_show_graph.h" +#include "common.h" +#include "graph.h" +#include "graph_ident.h" +#include "graph_instance.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) + +#define MAX_SHOW_GRAPHS 10 + +struct show_graph_data_s +{ + graph_config_t *cfg; +}; +typedef struct show_graph_data_s show_graph_data_t; + +static int show_time_selector (__attribute__((unused)) void *user_data) /* {{{ */ +{ + param_list_t *pl; + + pl = param_create (/* query string = */ NULL); + param_set (pl, "begin", NULL); + param_set (pl, "end", NULL); + param_set (pl, "button", NULL); + + printf ("
\n", script_name ()); + + param_print_hidden (pl); + + printf (" \n" + " \n"); + + printf ("
\n"); + + param_destroy (pl); + + return (0); +} /* }}} int show_time_selector */ + +static int show_instance_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)); + + 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_cb */ + +static int show_graph (void *user_data) /* {{{ */ +{ + show_graph_data_t *data = user_data; + + printf ("

    Available instances

    \n"); + printf ("
      \n"); + graph_inst_foreach (data->cfg, show_instance_cb, data); + printf ("
    \n"); + + 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 tmp[128]; + char title[128]; + + memset (&pg_data, 0, sizeof (pg_data)); + pg_data.cfg = gl_graph_get_selected (); + if (pg_data.cfg == NULL) + OUTPUT_ERROR ("gl_graph_get_selected () failed.\n"); + + memset (tmp, 0, sizeof (tmp)); + graph_get_title (pg_data.cfg, tmp, sizeof (tmp)); + snprintf (title, sizeof (title), "Graph \"%s\"", tmp); + title[sizeof (title) - 1] = 0; + + pg_callbacks.top_right = html_print_search_box; + pg_callbacks.middle_center = show_graph; + pg_callbacks.middle_right = show_time_selector; + + html_print_page (title, &pg_callbacks, &pg_data); + + return (0); +} /* }}} int action_show_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..9e3690d --- /dev/null +++ b/src/action_show_graph.h @@ -0,0 +1,30 @@ +/** + * collection4 - action_show_graph.h + * Copyright (C) 2010 Florian octo Forster + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + * + * Authors: + * Florian octo Forster + **/ + +#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/action_show_instance.h b/src/action_show_instance.h index f872c60..b6ea34e 100644 --- a/src/action_show_instance.h +++ b/src/action_show_instance.h @@ -21,10 +21,10 @@ * Florian octo Forster **/ -#ifndef ACTION_SHOW_GRAPH_H -#define ACTION_SHOW_GRAPH_H 1 +#ifndef ACTION_SHOW_INSTANCE_H +#define ACTION_SHOW_INSTANCE_H 1 int action_show_instance (void); -#endif /* ACTION_SHOW_GRAPH_H */ +#endif /* ACTION_SHOW_INSTANCE_H */ /* vim: set sw=2 sts=2 et fdm=marker : */ diff --git a/src/main.c b/src/main.c index de252eb..5dc5264 100644 --- a/src/main.c +++ b/src/main.c @@ -39,6 +39,7 @@ #include "action_graph.h" #include "action_list_graphs.h" #include "action_search_json.h" +#include "action_show_graph.h" #include "action_show_instance.h" /* Include this last, so the macro magic of doesn't interfere @@ -60,6 +61,7 @@ static const action_t actions[] = { "graph", action_graph }, { "list_graphs", action_list_graphs }, { "search_json", action_search_json }, + { "show_graph", action_show_graph }, { "show_instance", action_show_instance }, { "usage", action_usage } }; -- 2.30.2