X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=graph_def.c;h=71ba1bdfe84c2ef3fd352f3132a8731a892ec423;hb=a27a2222a526bfc8fde95d4f59e9e93bce322bfd;hp=24e66d4ef71621ed130f9060d3c0b83f5f931b7c;hpb=2cd28ec52f145546677f6d679aacd08c0fdf1792;p=collection4.git diff --git a/graph_def.c b/graph_def.c index 24e66d4..71ba1bd 100644 --- a/graph_def.c +++ b/graph_def.c @@ -20,6 +20,8 @@ struct graph_def_s char *ds_name; char *legend; uint32_t color; + _Bool stack; + _Bool area; graph_def_t *next; }; @@ -69,6 +71,57 @@ static int def_config_color (const oconfig_item_t *ci, uint32_t *ret_color) /* { return (0); } /* }}} int def_config_color */ +static graph_def_t *def_config_get_obj (graph_config_t *cfg, /* {{{ */ + const oconfig_item_t *ci) +{ + graph_ident_t *ident; + char *ds_name = NULL; + graph_def_t *def; + int i; + + ident = gl_graph_get_selector (cfg); + if (ident == NULL) + { + fprintf (stderr, "def_config_get_obj: gl_graph_get_selector failed"); + return (NULL); + } + + for (i = 0; i < ci->children_num; i++) + { + oconfig_item_t *child; + +#define HANDLE_FIELD(name,field) \ + else if (strcasecmp (name, child->key) == 0) \ + def_config_##field (child, ident) + + child = ci->children + i; + if (strcasecmp ("DSName", child->key) == 0) + graph_config_get_string (child, &ds_name); + + HANDLE_FIELD ("Host", host); + HANDLE_FIELD ("Plugin", plugin); + HANDLE_FIELD ("PluginInstance", plugin_instance); + HANDLE_FIELD ("Type", type); + HANDLE_FIELD ("TypeInstance", type_instance); + +#undef HANDLE_FIELD + } + + def = def_create (cfg, ident, ds_name); + if (def == NULL) + { + fprintf (stderr, "def_config_get_obj: def_create failed\n"); + ident_destroy (ident); + free (ds_name); + return (NULL); + } + + ident_destroy (ident); + free (ds_name); + + return (def); +} /* }}} graph_def_t *def_config_get_obj */ + /* * Public functions */ @@ -139,58 +192,31 @@ void def_destroy (graph_def_t *def) /* {{{ */ int def_config (graph_config_t *cfg, const oconfig_item_t *ci) /* {{{ */ { - graph_ident_t *ident; - char *ds_name = NULL; - char *legend = NULL; - uint32_t color = 0x01000000; graph_def_t *def; int i; - ident = gl_graph_get_selector (cfg); - if (ident == NULL) - return (ENOMEM); + def = def_config_get_obj (cfg, ci); + if (def == NULL) + return (EINVAL); for (i = 0; i < ci->children_num; i++) { oconfig_item_t *child; -#define HANDLE_FIELD(name,field) \ - else if (strcasecmp (name, child->key) == 0) \ - def_config_##field (child, ident) - child = ci->children + i; - if (strcasecmp ("DSName", child->key) == 0) - graph_config_get_string (child, &ds_name); - else if (strcasecmp ("Legend", child->key) == 0) - graph_config_get_string (child, &legend); + if (strcasecmp ("Legend", child->key) == 0) + graph_config_get_string (child, &def->legend); else if (strcasecmp ("Color", child->key) == 0) - def_config_color (child, &color); - - HANDLE_FIELD ("Host", host); - HANDLE_FIELD ("Plugin", plugin); - HANDLE_FIELD ("PluginInstance", plugin_instance); - HANDLE_FIELD ("Type", type); - HANDLE_FIELD ("TypeInstance", type_instance); - -#undef HANDLE_FIELD - } - - def = def_create (cfg, ident, ds_name); - if (def == NULL) - { - fprintf (stderr, "def_config: def_create failed (ds_name = %s)\n", - (ds_name != NULL) ? ds_name : "(null)"); - ident_destroy (ident); - return (EINVAL); + def_config_color (child, &def->color); + else if (strcasecmp ("Stack", child->key) == 0) + graph_config_get_bool (child, &def->stack); + else if (strcasecmp ("Area", child->key) == 0) + graph_config_get_bool (child, &def->area); + else + fprintf (stderr, "def_config: Ignoring unknown config option \"%s\"", + child->key); } - def->legend = legend; - if (color < 0x01000000) - def->color = color; - - ident_destroy (ident); - free (ds_name); - return (gl_graph_add_def (cfg, def)); } /* }}} int def_config */ @@ -293,9 +319,11 @@ int def_get_rrdargs (graph_def_t *def, graph_ident_t *ident, /* {{{ */ index, index); /* Graph part */ - array_append_format (args, "LINE1:def_%04i_avg#%06"PRIx32":%s", + array_append_format (args, "%s:def_%04i_avg#%06"PRIx32":%s%s", + def->area ? "AREA" : "LINE1", index, def->color, - (def->legend != NULL) ? def->legend : def->ds_name); + (def->legend != NULL) ? def->legend : def->ds_name, + def->stack ? ":STACK" : ""); array_append_format (args, "GPRINT:vdef_%04i_min:%%lg min,", index); array_append_format (args, "GPRINT:vdef_%04i_avg:%%lg avg,", index); array_append_format (args, "GPRINT:vdef_%04i_max:%%lg max,", index);