[collectd] Making monitoring of heterogeneous environments easier with percentage based metrics
Yves Mettier
ymettier at free.fr
Mon Jan 13 13:22:29 CET 2014
Hello,
I like better the function with variable arguments, with NULL as the
last arg.
Yes, it makes it a bit error prone. But what do you think of this ?
printf("Error %d");
Here is an error someone can easily do :
Step 1 : write the code
char const *names[] = { "free", "cached", "buffered" };
gauge_t values[] = { NAN, NAN, NAN };
[...]
Step 2 : repair your mistake (add the missing "used" item)
char const *names[] = { "free", "cached", "buffered" };
gauge_t values[] = { NAN, NAN, NAN };
[...]
Ooops, I forgot to add an item to values[]
Another one, with the variable argument function, with a given number of
args (3rd argument of plugin_dispatch_list() ):
Step 1 : write the code
plugin_dispatch_list (vl, 1, 3, "free", 100.0, "cached", 200.0,
"buffered", 300.0);
Step 2 : repair your mistake (add the missing "used" item)
plugin_dispatch_list (vl, 1, 3, "free", 100.0, "cached", 200.0,
"buffered", 300.0, "used", 1000.0);
Ooops, I forgot to set 4 as the 3rd argument
As you see, anyone can make errors...
So I prefer your version with variable arguments and NULL at the end :
it's easier to write and update.
It's only my opinion.
Happy new year !
Yves
---
- Homepage - http://ymettier.free.fr -
- GPG key - http://ymettier.free.fr/gpg.txt -
- C en action - http://ymettier.free.fr/livres/C_en_action_ed2.html -
- Guide Survie C - http://www.pearson.fr/livre/?GCOI=27440100673730 -
Le 2014-01-13 10:50, Florian Forster a écrit :
> Hi Jeremy,
>
> On Tue, Jan 07, 2014 at 07:47:25PM -0500, Jeremy Katz wrote:
>> In larger environments which have heterogeneous resources it's
>> frequently
>> useful to look at utilization of various resources as percentages.
>> […]
>> But all of these end up having a ton of repetition.
>
> I agree that the amount of repetition is bad and some infrastructure to
> simplify these calculations would be nice. I would, however, prefer not
> to make this a truly global option.
>
> What do you think about an interface like this:
>
> /* Takes a list of type instances and values and dispatches that in a
> * batch, making sure that all values have the same time stamp. If
> * "percentage" is set to true, "type" is set to "percent" and a
> * percentage is calculated and dispatched, rather than the absolute
> * values. Values that are NaN are dispatched as NaN and will not
> * influence the total. Returns the number of values it failed to
> * dispatch.
> */
> int plugin_dispatch_set (value_list_t const *vl,
> size_t argc,
> char const **type_instances,
> gauge_t const *values,
> _Bool percentage);
>
> It would then still be up to the plugin to use this new interface, but
> the changes required to each plugin would be much simpler, for example:
>
> char const *names[] = { "free", "cached", "buffered", "used" };
> gauge_t values[] = { NAN, NAN, NAN, NAN };
> value_list_t vl = VALUE_LIST_INIT;
> /* Init "values" and "vl". */
> plugin_dispatch_set (vl, STATIC_ARRAY_SIZE (names), names, values,
> 1);
>
> Alternatively, I could picture a function with variable arguments,
> that's used like this:
>
> __attribute__((sentinel))
> int plugin_dispatch_list (value_list_t const *vl,
> _Bool percentage, ...);
> plugin_dispatch_list (vl, 1, "free", 100.0, "cached", 200.0,
> "buffered", 300.0, "used", 1000.0, NULL);
>
> This might be a bit easier to write, but makes it a bit error prone,
> e.g. when someone forgets to add the NULL pointer (the "sentinel"
> attribute should catch this on GCC). An alternative would be to pass in
> the number of values, but that can't be checked during compile time
> either.
>
> Best regards,
> —octo
> _______________________________________________
> collectd mailing list
> collectd at verplant.org
> http://mailman.verplant.org/listinfo/collectd
More information about the collectd
mailing list