+/**
+ * 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 <ff at octo.it>
+ **/
+
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
return (0); \
} while (0)
+#define MAX_SHOW_GRAPHS 10
+
struct show_graph_data_s
{
graph_config_t *cfg;
- graph_instance_t *inst;
+ const char *search_term;
};
typedef struct show_graph_data_s show_graph_data_t;
-static void show_breadcrump_field (const char *str, /* {{{ */
- const char *field_name)
-{
- if ((str == NULL) || (str[0] == 0))
- printf ("<em>none</em>");
- else if (IS_ANY (str))
- printf ("<em>any</em>");
- else if (IS_ALL (str))
- printf ("<em>all</em>");
- else
- {
- char *str_html = html_escape (str);
-
- if (field_name != NULL)
- printf ("<a href=\"%s?action=list_graphs;q=%s:%s\">%s</a>",
- script_name (), field_name, str_html, str_html);
- else
- printf ("<a href=\"%s?action=list_graphs;q=%s\">%s</a>",
- script_name (), str_html, str_html);
-
- free (str_html);
- }
-} /* }}} void show_breadcrump_field */
-
-static int show_breadcrump (show_graph_data_t *data) /* {{{ */
-{
- graph_ident_t *ident;
- char *prefix;
-
- if (data->inst != NULL)
- {
- prefix = "Instance";
- ident = inst_get_selector (data->inst);
- }
- else
- {
- prefix = "Graph";
- ident = graph_get_selector (data->cfg);
- }
-
- printf ("<div class=\"breadcrump\">%s: "", prefix);
- show_breadcrump_field (ident_get_host (ident), "host");
- printf (" / ");
- show_breadcrump_field (ident_get_plugin (ident), "plugin");
- printf (" – ");
- show_breadcrump_field (ident_get_plugin_instance (ident), "plugin_instance");
- printf (" / ");
- show_breadcrump_field (ident_get_type (ident), "type");
- printf (" – ");
- show_breadcrump_field (ident_get_type_instance (ident), "type_instance");
- printf (""</div>\n");
-
- return (0);
-} /* }}} int show_breadcrump */
-
static int show_time_selector (__attribute__((unused)) void *user_data) /* {{{ */
{
param_list_t *pl;
return (0);
} /* }}} int show_time_selector */
-static int show_instance_list_cb (graph_instance_t *inst, /* {{{ */
- void *user_data)
+static int left_menu (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));
+ printf ("\n<ul class=\"menu left\">\n");
- if (inst == data->inst)
+ if ((data->search_term != NULL) && (data->search_term[0] != 0))
{
- printf (" <li class=\"instance\"><strong>%s</strong></li>\n", descr);
- return (0);
- }
+ char params[1024];
- memset (params, 0, sizeof (params));
- inst_get_params (data->cfg, inst, params, sizeof (params));
- html_escape_buffer (params, sizeof (params));
+ memset (params, 0, sizeof (params));
+ graph_get_params (data->cfg, params, sizeof (params));
+ html_escape_buffer (params, sizeof (params));
- printf (" <li class=\"instance\">"
- "<a href=\"%s?action=show_graph;%s\">%s</a></li>\n",
- script_name (), params, descr);
+ printf (" <li><a href=\"%s?action=show_graph;%s\">"
+ "All instances</a></li>\n",
+ script_name (), params);
+ }
+
+ printf (" <li><a href=\"%s?action=list_graphs\">All graphs</a></li>\n"
+ "</ul>\n",
+ script_name ());
return (0);
-} /* }}} int show_instance_list_cb */
+} /* }}} int left_menu */
-static int show_instance_list (void *user_data) /* {{{ */
+static int show_instance_cb (graph_instance_t *inst, /* {{{ */
+ 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));
+ if ((data->search_term != NULL) && (data->search_term[0] != 0))
+ {
+ _Bool matches = 0;
+ char *term_lc = strtolower_copy (data->search_term);
+
+ if (strncmp ("host:", term_lc, strlen ("host:")) == 0)
+ {
+ if (inst_matches_field (inst, GIF_HOST, term_lc + strlen ("host:")))
+ matches = 1;
+ }
+ else if (strncmp ("plugin:", term_lc, strlen ("plugin:")) == 0)
+ {
+ if (inst_matches_field (inst, GIF_PLUGIN, term_lc + strlen ("plugin:")))
+ matches = 1;
+ }
+ else if (strncmp ("plugin_instance:", term_lc,
+ strlen ("plugin_instance:")) == 0)
+ {
+ if (inst_matches_field (inst, GIF_PLUGIN_INSTANCE,
+ term_lc + strlen ("plugin_instance:")))
+ matches = 1;
+ }
+ else if (strncmp ("type:", term_lc, strlen ("type:")) == 0)
+ {
+ if (inst_matches_field (inst, GIF_TYPE, term_lc + strlen ("type:")))
+ matches = 1;
+ }
+ else if (strncmp ("type_instance:", term_lc,
+ strlen ("type_instance:")) == 0)
+ {
+ if (inst_matches_field (inst, GIF_TYPE_INSTANCE,
+ term_lc + strlen ("type_instance:")))
+ matches = 1;
+ }
+ else if (inst_matches_string (data->cfg, inst, term_lc))
+ {
+ matches = 1;
+ }
+
+ free (term_lc);
+
+ if (!matches)
+ return (0);
+ } /* if (data->search_term) */
+
+ memset (descr, 0, sizeof (descr));
+ inst_describe (data->cfg, inst, descr, sizeof (descr));
+ html_escape_buffer (descr, sizeof (descr));
memset (params, 0, sizeof (params));
- graph_get_params (data->cfg, params, sizeof (params));
+ inst_get_params (data->cfg, inst, params, sizeof (params));
html_escape_buffer (params, sizeof (params));
- printf ("<ul class=\"graph_list\">\n"
- " <li class=\"graph\"><a href=\"%s?action=show_graph;%s\">%s</a>\n"
- " <ul class=\"instance_list\">\n",
- script_name (), params, title);
-
- graph_inst_foreach (data->cfg, show_instance_list_cb, user_data);
-
- printf (" </ul>\n"
- "</ul>\n");
+ printf (" <li class=\"instance\"><a href=\"%s?action=show_instance;%s\">"
+ "%s</a></li>\n",
+ script_name (), params, descr);
return (0);
-} /* }}} int show_instance_list */
+} /* }}} int show_instance_cb */
-static int show_instance (void *user_data) /* {{{ */
+static int show_graph (void *user_data) /* {{{ */
{
show_graph_data_t *data = user_data;
- char title[128];
- char descr[128];
- param_list_t *pl;
- char *params;
- char params_html[1024];
-
- show_breadcrump (data);
-
- 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));
- pl = param_create (/* query string = */ NULL);
- param_set (pl, "action", "graph");
- param_set (pl, "button", NULL);
-
- params = param_as_string (pl);
- if (params == NULL)
+ if ((data->search_term == NULL) || (data->search_term[0] == 0))
+ printf ("<h2>All instances</h2>\n");
+ else
{
- printf ("<div class=\"error\">param_as_string failed.</div>\n");
- param_destroy (pl);
- return (-1);
+ char *search_term_html = html_escape (data->search_term);
+ printf ("<h2>Instances matching "%s"</h2>\n",
+ search_term_html);
+ free (search_term_html);
}
- memset (params_html, 0, sizeof (params_html));
- html_escape_copy (params_html, params, sizeof (params_html));
-
- printf ("<div class=\"graph-img\"><img src=\"%s?%s\" "
- "title=\"%s / %s\" /></div>\n",
- script_name (), params, title, descr);
+ printf ("<ul class=\"instance_list\">\n");
+ graph_inst_foreach (data->cfg, show_instance_cb, data);
+ printf ("</ul>\n");
- param_destroy (pl);
- free (params);
return (0);
-} /* }}} int show_instance */
-
-static int show_graph (void *user_data)
-{
- show_graph_data_t *data = user_data;
-
- show_breadcrump (data);
- return (show_instance_list (user_data));
} /* }}} 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 (title, 0, sizeof (title));
- graph_get_title (pg_data.cfg, title, sizeof (title));
-
- pg_data.inst = inst_get_selected (pg_data.cfg);
- if (pg_data.inst != NULL)
- {
- char descr[128];
- char html_title[128];
-
- memset (descr, 0, sizeof (descr));
- inst_describe (pg_data.cfg, pg_data.inst, descr, sizeof (descr));
+ pg_data.search_term = param ("q");
- snprintf (html_title, sizeof (html_title), "Graph \"%s / %s\"",
- title, descr);
- html_title[sizeof (html_title) - 1] = 0;
+ 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_instance;
- pg_callbacks.middle_left = show_instance_list;
- pg_callbacks.middle_right = show_time_selector;
+ pg_callbacks.top_right = html_print_search_box;
+ pg_callbacks.middle_left = left_menu;
+ pg_callbacks.middle_center = show_graph;
+ pg_callbacks.middle_right = show_time_selector;
- html_print_page (html_title, &pg_callbacks, &pg_data);
- }
- else /* if (pg_data.inst == NULL) */
- {
- pg_callbacks.top_right = html_print_search_box;
- pg_callbacks.middle_center = show_graph;
-
- html_print_page (title, &pg_callbacks, &pg_data);
- }
+ html_print_page (title, &pg_callbacks, &pg_data);
return (0);
-} /* }}} int action_graph */
+} /* }}} int action_show_graph */
/* vim: set sw=2 sts=2 et fdm=marker : */