X-Git-Url: https://git.octo.it/?p=collection4.git;a=blobdiff_plain;f=src%2Faction_show_instance.c;h=c7de237d2f03993ebdb4a396cc43120adbf50435;hp=08d1bc06c94ecf2f1b8aa594a4020ec88bf325b9;hb=48c757c9633d61cf158d08f57f592f1c3169e8ac;hpb=b64e6b6983c49fa5924fa8558fe1d65f7ea5aea0 diff --git a/src/action_show_instance.c b/src/action_show_instance.c index 08d1bc0..c7de237 100644 --- a/src/action_show_instance.c +++ b/src/action_show_instance.c @@ -48,11 +48,15 @@ #define MAX_SHOW_GRAPHS 10 +#define SGD_FORMAT_JSON 0 +#define SGD_FORMAT_RRD 1 + struct show_graph_data_s { graph_config_t *cfg; graph_instance_t *inst; int graph_count; + int format; }; typedef struct show_graph_data_s show_graph_data_t; @@ -70,10 +74,10 @@ static void show_breadcrump_field (const char *str, /* {{{ */ char *str_html = html_escape (str); if (field_name != NULL) - printf ("%s", + printf ("%s", script_name (), field_name, str_html, str_html); else - printf ("%s", + printf ("%s", script_name (), str_html, str_html); free (str_html); @@ -132,8 +136,12 @@ static int show_time_selector (__attribute__((unused)) void *user_data) /* {{{ * " \n" " \n" " \n" - " \n" - " \n"); + "
\n"); + printf (" " + "
\n" + " " + "\n
"); + printf (" \n"); printf ("\n"); @@ -142,111 +150,203 @@ 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]; + graph_instance_t *inst; + graph_ident_t *ident; + const char *host; - 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)); + html_escape_buffer (params, sizeof (params)); - if (inst == data->inst) + inst = inst_get_selected (data->cfg); + ident = inst_get_selector (inst); + host = ident_get_host (ident); + if (IS_ANY (host)) + host = NULL; + + printf ("\n\n"); - memset (params, 0, sizeof (params)); - inst_get_params (data->cfg, inst, params, sizeof (params)); - html_escape_buffer (params, sizeof (params)); + host = NULL; + ident_destroy (ident); + + return (0); +} /* }}} int left_menu */ + +static int show_instance_json (graph_config_t *cfg, /* {{{ */ + graph_instance_t *inst, + long begin, long end, int index) +{ + yajl_gen_config handler_config; + yajl_gen handler; + const unsigned char *json_buffer; + unsigned int json_buffer_length; + + graph_ident_t *graph_selector; + graph_ident_t *inst_selector; - printf ("
  • " - "%s
  • \n", - script_name (), params, descr); + graph_selector = graph_get_selector (cfg); + if (graph_selector == NULL) + return (ENOMEM); + inst_selector = inst_get_selector (inst); + if (inst_selector == NULL) + { + ident_destroy (inst_selector); + return (ENOMEM); + } + + memset (&handler_config, 0, sizeof (handler_config)); + handler_config.beautify = 1; + handler_config.indentString = " "; + + handler = yajl_gen_alloc2 (/* callback = */ NULL, + &handler_config, + /* alloc functions = */ NULL, + /* context = */ NULL); + if (handler == NULL) + { + ident_destroy (inst_selector); + ident_destroy (graph_selector); + return (-1); + } + + yajl_gen_map_open (handler); + + yajl_gen_string (handler, + (unsigned char *) "graph_selector", + (unsigned int) strlen ("graph_selector")); + ident_to_json (graph_selector, handler); + ident_destroy (graph_selector); + + yajl_gen_string (handler, + (unsigned char *) "instance_selector", + (unsigned int) strlen ("instance_selector")); + ident_to_json (inst_selector, handler); + ident_destroy (inst_selector); + + yajl_gen_string (handler, + (unsigned char *) "begin", + (unsigned int) strlen ("begin")); + yajl_gen_integer (handler, begin); + + yajl_gen_string (handler, + (unsigned char *) "end", + (unsigned int) strlen ("end")); + yajl_gen_integer (handler, end); + + yajl_gen_map_close (handler); + + json_buffer = NULL; + json_buffer_length = 0; + yajl_gen_get_buf (handler, &json_buffer, &json_buffer_length); + + if (json_buffer == NULL) + { + yajl_gen_free (handler); + return (EINVAL); + } + + printf ("
    \n", index); + printf ("\n", + index, (const char *) json_buffer); + + yajl_gen_free (handler); return (0); -} /* }}} int show_instance_list_cb */ +} /* }}} int show_instance_json */ -static int show_instance_list (void *user_data) /* {{{ */ +static int show_instance_rrdtool (graph_config_t *cfg, /* {{{ */ + graph_instance_t *inst, + long begin, long end, int index) { - show_graph_data_t *data = user_data; char title[128]; + char descr[128]; char params[1024]; + char time_params[128]; memset (title, 0, sizeof (title)); - graph_get_title (data->cfg, title, sizeof (title)); + graph_get_title (cfg, title, sizeof (title)); html_escape_buffer (title, sizeof (title)); + memset (descr, 0, sizeof (descr)); + inst_describe (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 (cfg, inst, params, sizeof (params)); html_escape_buffer (params, sizeof (params)); - printf ("\n"); +#if 0 + printf ("
    " + "Get graph data as JSON
    \n", + script_name (), params, time_params); +#endif return (0); -} /* }}} int show_instance_list */ +} /* }}} int show_instance_rrdtool */ static int show_instance_cb (graph_config_t *cfg, /* {{{ */ graph_instance_t *inst, void *user_data) { show_graph_data_t *data = user_data; - char title[128]; char descr[128]; - char params[1024]; long begin; long end; - char time_params[128]; int status; - memset (title, 0, sizeof (title)); - graph_get_title (cfg, title, sizeof (title)); - html_escape_buffer (title, sizeof (title)); - memset (descr, 0, sizeof (descr)); inst_describe (cfg, inst, descr, sizeof (descr)); html_escape_buffer (descr, sizeof (descr)); - memset (params, 0, sizeof (params)); - inst_get_params (cfg, inst, params, sizeof (params)); - html_escape_buffer (params, sizeof (params)); - - time_params[0] = 0; begin = 0; end = 0; status = get_time_args (&begin, &end, /* now = */ NULL); - if (status == 0) - { - snprintf (time_params, sizeof (time_params), ";begin=%li;end=%li", - begin, end); - time_params[sizeof (time_params) - 1] = 0; - } + if (status != 0) + return (status); - printf ("

    Instance "%s"

    \n", descr); + printf ("

    Instance "%s"

    \n", descr); show_breadcrump (cfg, inst); - if (data->graph_count < MAX_SHOW_GRAPHS) - printf ("
    \n", - script_name (), params, time_params, title, descr); + if (data->format == SGD_FORMAT_RRD) + show_instance_rrdtool (cfg, inst, begin, end, data->graph_count); else - printf ("Show graph " - ""%s / %s"\n", - script_name (), params, title, descr); + show_instance_json (cfg, inst, begin, end, data->graph_count); data->graph_count++; @@ -256,15 +356,25 @@ static int show_instance_cb (graph_config_t *cfg, /* {{{ */ static int show_instance (void *user_data) /* {{{ */ { show_graph_data_t *data = user_data; + /* char params[1024]; */ 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 = */ data); if (status != 0) fprintf (stderr, "show_instance: inst_get_all_selected failed " "with status %i\n", status); +#if 0 + memset (params, 0, sizeof (params)); + graph_get_params (data->cfg, params, sizeof (params)); + html_escape_buffer (params, sizeof (params)); + + printf ("
    " + "Get graph definition as JSON
    \n", + script_name (), params); +#endif + return (0); } /* }}} int show_instance */ @@ -275,6 +385,7 @@ int action_show_instance (void) /* {{{ */ char tmp[128]; char title[128]; + const char *format; memset (&pg_data, 0, sizeof (pg_data)); pg_data.cfg = gl_graph_get_selected (); @@ -286,9 +397,15 @@ int action_show_instance (void) /* {{{ */ snprintf (title, sizeof (title), "Graph \"%s\"", tmp); title[sizeof (title) - 1] = 0; + format = param ("format"); + if ((format != NULL) && (strcasecmp ("RRD", format) == 0)) + pg_data.format = SGD_FORMAT_RRD; + else + pg_data.format = SGD_FORMAT_JSON; + 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_right = show_time_selector; html_print_page (title, &pg_callbacks, &pg_data);