X-Git-Url: https://git.octo.it/?p=collection4.git;a=blobdiff_plain;f=src%2Faction_show_graph.c;h=47d22c928c1e057b253f4f6d2a32db1a664736a2;hp=8cde5c2f9e11fdf750e42217f08df84afa7c7aab;hb=e3fb09073a64cc051c11c4a1bdcec493f937b764;hpb=b7203b849d84ce9ca2b063dd768e7d0033472ace diff --git a/src/action_show_graph.c b/src/action_show_graph.c index 8cde5c2..47d22c9 100644 --- a/src/action_show_graph.c +++ b/src/action_show_graph.c @@ -1,3 +1,26 @@ +/** + * 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 @@ -23,68 +46,15 @@ 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 ("none"); - else if (IS_ANY (str)) - printf ("any"); - else if (IS_ALL (str)) - printf ("all"); - else - { - char *str_html = html_escape (str); - - if (field_name != NULL) - printf ("%s", - script_name (), field_name, str_html, str_html); - else - printf ("%s", - 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 ("
%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 (""
\n"); - - return (0); -} /* }}} int show_breadcrump */ - static int show_time_selector (__attribute__((unused)) void *user_data) /* {{{ */ { param_list_t *pl; @@ -114,110 +84,118 @@ static int show_time_selector (__attribute__((unused)) void *user_data) /* {{{ * 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
    \n"); - if (inst == data->inst) + if ((data->search_term != NULL) && (data->search_term[0] != 0)) { - 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)); + char params[1024]; - printf ("
  • " - "%s
  • \n", - script_name (), params, descr); + memset (params, 0, sizeof (params)); + graph_get_params (data->cfg, params, sizeof (params)); + html_escape_buffer (params, sizeof (params)); - return (0); -} /* }}} int show_instance_list_cb */ - -static int show_instance_list (void *user_data) /* {{{ */ -{ - show_graph_data_t *data = user_data; - char title[128]; - char params[1024]; - - memset (title, 0, sizeof (title)); - graph_get_title (data->cfg, title, sizeof (title)); - html_escape_buffer (title, sizeof (title)); - - memset (params, 0, sizeof (params)); - graph_get_params (data->cfg, params, sizeof (params)); - html_escape_buffer (params, sizeof (params)); - - printf ("
      \n" - "
    • %s\n" - "
        \n", - script_name (), params, title); - - graph_inst_foreach (data->cfg, show_instance_list_cb, user_data); + printf ("
      • " + "All instances
      • \n", + script_name (), params); + } - printf ("
      \n" - "
    \n"); + printf ("
  • All graphs
  • \n" + "
\n", + script_name ()); return (0); -} /* }}} int show_instance_list */ +} /* }}} int left_menu */ -static int show_instance_cb (graph_config_t *cfg, /* {{{ */ - graph_instance_t *inst, - __attribute__((unused)) void *user_data) +static int show_instance_cb (graph_instance_t *inst, /* {{{ */ + void *user_data) { - char title[128]; + show_graph_data_t *data = user_data; char descr[128]; char params[1024]; - memset (title, 0, sizeof (title)); - graph_get_title (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 (cfg, inst, descr, sizeof (descr)); + inst_describe (data->cfg, inst, descr, sizeof (descr)); html_escape_buffer (descr, sizeof (descr)); memset (params, 0, sizeof (params)); - inst_get_params (cfg, inst, params, sizeof (params)); + inst_get_params (data->cfg, inst, params, sizeof (params)); html_escape_buffer (params, sizeof (params)); - printf ("

Instance "%s"

\n", descr); - printf ("
\n", - script_name (), params, title, descr); + printf ("
  • " + "%s
  • \n", + script_name (), params, descr); return (0); } /* }}} 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; - int status; - - fprintf (stderr, "show_instance: Calling inst_get_all_selected()\n"); - status = inst_get_all_selected (data->cfg, - /* callback = */ show_instance_cb, /* user data = */ NULL); - if (status != 0) - fprintf (stderr, "show_instance: inst_get_all_selected failed " - "with status %i\n", status); - return (0); -} /* }}} int show_instance */ + if ((data->search_term == NULL) || (data->search_term[0] == 0)) + printf ("

    All instances

    \n"); + else + { + char *search_term_html = html_escape (data->search_term); + printf ("

    Instances matching "%s"

    \n", + search_term_html); + free (search_term_html); + } -static int show_graph (void *user_data) /* {{{ */ -{ - show_graph_data_t *data = user_data; + printf ("
      \n"); + graph_inst_foreach (data->cfg, show_instance_cb, data); + printf ("
    \n"); - show_breadcrump (data); - return (show_instance_list (user_data)); + return (0); } /* }}} int show_graph */ int action_show_graph (void) /* {{{ */ @@ -228,23 +206,26 @@ int action_show_graph (void) /* {{{ */ 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"); + pg_data.search_term = param ("q"); + 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_left = left_menu; + 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_graph */ +} /* }}} int action_show_graph */ /* vim: set sw=2 sts=2 et fdm=marker : */