X-Git-Url: https://git.octo.it/?p=collection4.git;a=blobdiff_plain;f=src%2Fgraph_def.c;h=d01db8ea8b4e06e581705a74668273e89491887f;hp=bcef8cfda810320569b2e4e959cf55632535eac2;hb=e3fb09073a64cc051c11c4a1bdcec493f937b764;hpb=b988bcc13c655299bc3796cccaa583f62704e759 diff --git a/src/graph_def.c b/src/graph_def.c index bcef8cf..d01db8e 100644 --- a/src/graph_def.c +++ b/src/graph_def.c @@ -148,6 +148,55 @@ static graph_def_t *def_config_get_obj (graph_config_t *cfg, /* {{{ */ return (def); } /* }}} graph_def_t *def_config_get_obj */ +static int def_to_json_recursive (const graph_def_t *def, /* {{{ */ + yajl_gen handler) +{ + char color[16]; + + if (def == NULL) + return (0); + + if (def->color < 0x00ffffff) + snprintf (color, sizeof (color), "#%06"PRIx32, def->color); + else + strncpy (color, "random", sizeof (color)); + color[sizeof (color) - 1] = 0; + + yajl_gen_map_open (handler); + +#define yajl_gen_string_cast(h,p,l) \ + yajl_gen_string (h, (unsigned char *) p, (unsigned int) l) + + yajl_gen_string_cast (handler, "select", strlen ("select")); + ident_to_json (def->select, handler); + if (def->ds_name != NULL) + { + yajl_gen_string_cast (handler, "ds_name", strlen ("ds_name")); + yajl_gen_string_cast (handler, def->ds_name, strlen (def->ds_name)); + } + if (def->legend != NULL) + { + yajl_gen_string_cast (handler, "legend", strlen ("legend")); + yajl_gen_string_cast (handler, def->legend, strlen (def->legend)); + } + yajl_gen_string_cast (handler, "color", strlen ("color")); + yajl_gen_string_cast (handler, color, strlen (color)); + yajl_gen_string_cast (handler, "stack", strlen ("stack")); + yajl_gen_bool (handler, def->stack); + yajl_gen_string_cast (handler, "area", strlen ("area")); + yajl_gen_bool (handler, def->area); + if (def->format != NULL) + { + yajl_gen_string_cast (handler, "format", strlen ("format")); + yajl_gen_string_cast (handler, def->format, strlen (def->format)); + } + + yajl_gen_map_close (handler); + + return (def_to_json_recursive (def->next, handler)); +#undef yajl_gen_string_cast +} /* }}} int def_to_json_recursive */ + /* * Public functions */ @@ -158,15 +207,22 @@ graph_def_t *def_create (graph_config_t *cfg, graph_ident_t *ident, /* {{{ */ graph_def_t *ret; if ((cfg == NULL) || (ident == NULL) || (ds_name == NULL)) + { + fprintf (stderr, "def_create: An argument is NULL\n"); return (NULL); + } selector = graph_get_selector (cfg); if (selector == NULL) + { + fprintf (stderr, "def_create: graph_get_selector failed\n"); return (NULL); + } ret = malloc (sizeof (*ret)); if (ret == NULL) { + fprintf (stderr, "def_create: malloc failed\n"); ident_destroy (selector); return (NULL); } @@ -177,18 +233,20 @@ graph_def_t *def_create (graph_config_t *cfg, graph_ident_t *ident, /* {{{ */ ret->ds_name = strdup (ds_name); if (ret->ds_name == NULL) { + fprintf (stderr, "def_create: Unable to copy DS name\n"); ident_destroy (selector); free (ret); return (NULL); } - ret->color = get_random_color (); + ret->color = UINT32_MAX; ret->next = NULL; ret->select = ident_copy_with_selector (selector, ident, IDENT_FLAG_REPLACE_ALL); if (ret->select == NULL) { + fprintf (stderr, "def_create: ident_copy_with_selector failed\n"); ident_destroy (selector); free (ret->ds_name); free (ret); @@ -315,6 +373,8 @@ int def_get_rrdargs (graph_def_t *def, graph_ident_t *ident, /* {{{ */ char *file; int index; char draw_def[64]; + char legend[256]; + uint32_t color; if ((def == NULL) || (ident == NULL) || (args == NULL)) return (EINVAL); @@ -328,6 +388,27 @@ int def_get_rrdargs (graph_def_t *def, graph_ident_t *ident, /* {{{ */ DEBUG ("gl_ident_get_rrdargs: file = %s;\n", file); + if (def->legend != NULL) + { + strncpy (legend, def->legend, sizeof (legend)); + legend[sizeof (legend) - 1] = 0; + } + else + { + ident_describe (ident, def->select, + legend, sizeof (legend)); + + if ((legend[0] == 0) || (strcmp ("default", legend) == 0)) + { + strncpy (legend, def->ds_name, sizeof (legend)); + legend[sizeof (legend) - 1] = 0; + } + } + + color = def->color; + if (color > 0x00ffffff) + color = get_random_color (); + index = args->index; args->index++; @@ -368,7 +449,7 @@ int def_get_rrdargs (graph_def_t *def, graph_ident_t *ident, /* {{{ */ if (def->area) array_prepend_format (args->areas, "AREA:%s#%06"PRIx32, - draw_def, fade_color (def->color)); + draw_def, fade_color (color)); /* Graph part */ array_prepend_format (args->lines, "GPRINT:vdef_%04i_lst:%s last\\l", @@ -380,8 +461,7 @@ int def_get_rrdargs (graph_def_t *def, graph_ident_t *ident, /* {{{ */ array_prepend_format (args->lines, "GPRINT:vdef_%04i_min:%s min,", index, (def->format != NULL) ? def->format : "%6.2lf"); array_prepend_format (args->lines, "LINE1:%s#%06"PRIx32":%s", - draw_def, def->color, - (def->legend != NULL) ? def->legend : def->ds_name); + draw_def, color, legend); free (file); @@ -390,4 +470,17 @@ int def_get_rrdargs (graph_def_t *def, graph_ident_t *ident, /* {{{ */ return (0); } /* }}} int def_get_rrdargs */ +int def_to_json (const graph_def_t *def, /* {{{ */ + yajl_gen handler) +{ + if (handler == NULL) + return (EINVAL); + + yajl_gen_array_open (handler); + def_to_json_recursive (def, handler); + yajl_gen_array_close (handler); + + return (0); +} /* }}} int def_to_json */ + /* vim: set sw=2 sts=2 et fdm=marker : */