summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 1f6c7a6)
raw | patch | inline | side by side (parent: 1f6c7a6)
author | Florian Forster <octo@huhu.verplant.org> | |
Mon, 6 Jul 2009 16:57:54 +0000 (18:57 +0200) | ||
committer | Florian Forster <octo@huhu.verplant.org> | |
Mon, 6 Jul 2009 16:57:54 +0000 (18:57 +0200) |
The percentage code used to *always* check the first data source. With this
patch, the code honors the `DataSource' option again, checking only the
configured data sources if applicable.
patch, the code honors the `DataSource' option again, checking only the
configured data sources if applicable.
src/utils_threshold.c | patch | blob | history |
diff --git a/src/utils_threshold.c b/src/utils_threshold.c
index d51789db22ace6273d7eaf5b47d59c44aa59fed1..fa8c8f9fde2522c2114a41206311254bcd01c529 100644 (file)
--- a/src/utils_threshold.c
+++ b/src/utils_threshold.c
int ret = -1;
int ds_index = -1;
int i;
+ gauge_t values_copy[ds->ds_num];
- if ((th->flags & UT_FLAG_PERCENTAGE) == UT_FLAG_PERCENTAGE)
- {
+ memcpy (values_copy, values, sizeof (values_copy));
+ if ((th->flags & UT_FLAG_PERCENTAGE) != 0)
+ {
+ int num = 0;
gauge_t sum=0.0;
- gauge_t percentage;
+ if (ds->ds_num == 1)
+ {
+ WARNING ("ut_check_one_threshold: The %s type has only one data "
+ "source, but you have configured to check this as a percentage. "
+ "That doesn't make much sense, because the percentage will always "
+ "be 100%%!", ds->type);
+ }
+
+ /* Prepare `sum' and `num'. */
for (i = 0; i < ds->ds_num; i++)
if (!isnan (values[i]))
+ {
+ num++;
sum += values[i];
+ }
- if (sum == 0.0)
+ if ((num == 0) /* All data sources are undefined. */
+ || (sum == 0.0)) /* Sum is zero, cannot calculate percentage. */
{
- WARNING ("Values sum for percentage sums up to zero");
- return(STATE_WARNING);
+ for (i = 0; i < ds->ds_num; i++)
+ values_copy[i] = NAN;
}
-
- percentage = 100.0 * values[0] / sum;
-
- if (ret_ds_index != NULL)
- *ret_ds_index = 0;
-
- return ut_check_one_data_source (NULL, vl, th, &percentage, 0);
- }
+ else /* We can actually calculate the percentage. */
+ {
+ for (i = 0; i < ds->ds_num; i++)
+ values_copy[i] = 100.0 * values[i] / sum;
+ }
+ } /* if (UT_FLAG_PERCENTAGE) */
for (i = 0; i < ds->ds_num; i++)
{
int status;
- status = ut_check_one_data_source (ds, vl, th, values, i);
+ status = ut_check_one_data_source (ds, vl, th, values_copy, i);
if (ret < status)
{
ret = status;