X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Futils_threshold.c;h=99309b93b58b46ec84512cad69b087deba146a19;hb=8eb9e6285f394569d7fe6ad43a0f4e5f9bca454f;hp=5e98e699120eab3987a4b2bd411e333182bc8e86;hpb=43dbb24a3f311271da590ddf0c76f4d50681e388;p=collectd.git diff --git a/src/utils_threshold.c b/src/utils_threshold.c index 5e98e699..99309b93 100644 --- a/src/utils_threshold.c +++ b/src/utils_threshold.c @@ -1,6 +1,9 @@ /** * collectd - src/utils_threshold.c - * Copyright (C) 2007,2008 Florian octo Forster + * Copyright (C) 2007-2009 Florian octo Forster + * Copyright (C) 2008-2009 Sebastian Harl + * Copyright (C) 2009 Andrés J. Díaz + * * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -17,6 +20,8 @@ * * Author: * Florian octo Forster + * Sebastian Harl + * Andrés J. Díaz **/ #include "collectd.h" @@ -24,6 +29,7 @@ #include "plugin.h" #include "utils_avltree.h" #include "utils_cache.h" +#include "utils_threshold.h" #include #include @@ -34,24 +40,7 @@ #define UT_FLAG_INVERT 0x01 #define UT_FLAG_PERSIST 0x02 #define UT_FLAG_PERCENTAGE 0x04 - -typedef struct threshold_s -{ - char host[DATA_MAX_NAME_LEN]; - char plugin[DATA_MAX_NAME_LEN]; - char plugin_instance[DATA_MAX_NAME_LEN]; - char type[DATA_MAX_NAME_LEN]; - char type_instance[DATA_MAX_NAME_LEN]; - char data_source[DATA_MAX_NAME_LEN]; - gauge_t warning_min; - gauge_t warning_max; - gauge_t failure_min; - gauge_t failure_max; - gauge_t hysteresis; - int flags; - int hits; - struct threshold_s *next; -} threshold_t; +#define UT_FLAG_INTERESTING 0x08 /* }}} */ /* @@ -229,60 +218,6 @@ static int ut_config_type_min (threshold_t *th, oconfig_item_t *ci) return (0); } /* int ut_config_type_min */ -static int ut_config_type_invert (threshold_t *th, oconfig_item_t *ci) -{ - if ((ci->values_num != 1) - || (ci->values[0].type != OCONFIG_TYPE_BOOLEAN)) - { - WARNING ("threshold values: The `Invert' option needs exactly one " - "boolean argument."); - return (-1); - } - - if (ci->values[0].value.boolean) - th->flags |= UT_FLAG_INVERT; - else - th->flags &= ~UT_FLAG_INVERT; - - return (0); -} /* int ut_config_type_invert */ - -static int ut_config_type_persist (threshold_t *th, oconfig_item_t *ci) -{ - if ((ci->values_num != 1) - || (ci->values[0].type != OCONFIG_TYPE_BOOLEAN)) - { - WARNING ("threshold values: The `Persist' option needs exactly one " - "boolean argument."); - return (-1); - } - - if (ci->values[0].value.boolean) - th->flags |= UT_FLAG_PERSIST; - else - th->flags &= ~UT_FLAG_PERSIST; - - return (0); -} /* int ut_config_type_persist */ - -static int ut_config_type_percentage(threshold_t *th, oconfig_item_t *ci) -{ - if ((ci->values_num != 1) - || (ci->values[0].type != OCONFIG_TYPE_BOOLEAN)) - { - WARNING ("threshold values: The `Percentage' option needs exactly one " - "boolean argument."); - return (-1); - } - - if (ci->values[0].value.boolean) - th->flags |= UT_FLAG_PERCENTAGE; - else - th->flags &= ~UT_FLAG_PERCENTAGE; - - return (0); -} /* int ut_config_type_percentage */ - static int ut_config_type_hits (threshold_t *th, oconfig_item_t *ci) { if ((ci->values_num != 1) @@ -342,6 +277,7 @@ static int ut_config_type (const threshold_t *th_orig, oconfig_item_t *ci) th.failure_max = NAN; th.hits = 0; th.hysteresis = 0; + th.flags = UT_FLAG_INTERESTING; /* interesting by default */ for (i = 0; i < ci->children_num; i++) { @@ -358,12 +294,14 @@ static int ut_config_type (const threshold_t *th_orig, oconfig_item_t *ci) else if ((strcasecmp ("WarningMin", option->key) == 0) || (strcasecmp ("FailureMin", option->key) == 0)) status = ut_config_type_min (&th, option); + else if (strcasecmp ("Interesting", option->key) == 0) + status = cf_util_get_flag (option, &th.flags, UT_FLAG_INTERESTING); else if (strcasecmp ("Invert", option->key) == 0) - status = ut_config_type_invert (&th, option); + status = cf_util_get_flag (option, &th.flags, UT_FLAG_INVERT); else if (strcasecmp ("Persist", option->key) == 0) - status = ut_config_type_persist (&th, option); + status = cf_util_get_flag (option, &th.flags, UT_FLAG_PERSIST); else if (strcasecmp ("Percentage", option->key) == 0) - status = ut_config_type_percentage (&th, option); + status = cf_util_get_flag (option, &th.flags, UT_FLAG_PERCENTAGE); else if (strcasecmp ("Hits", option->key) == 0) status = ut_config_type_hits (&th, option); else if (strcasecmp ("Hysteresis", option->key) == 0) @@ -529,6 +467,7 @@ int ut_config (const oconfig_item_t *ci) th.hits = 0; th.hysteresis = 0; + th.flags = UT_FLAG_INTERESTING; /* interesting by default */ for (i = 0; i < ci->children_num; i++) { @@ -1040,9 +979,31 @@ int ut_check_interesting (const char *name) th = threshold_search (&vl); if (th == NULL) return (0); + + if ((th->flags & UT_FLAG_INTERESTING) == 0) + return (0); + if ((th->flags & UT_FLAG_PERSIST) == 0) return (1); return (2); } /* }}} int ut_check_interesting */ +int ut_search_threshold (const value_list_t *vl, /* {{{ */ + threshold_t *ret_threshold) +{ + threshold_t *t; + + if (vl == NULL) + return (EINVAL); + + t = threshold_search (vl); + if (t == NULL) + return (ENOENT); + + memcpy (ret_threshold, t, sizeof (*ret_threshold)); + ret_threshold->next = NULL; + + return (0); +} /* }}} int ut_search_threshold */ + /* vim: set sw=2 ts=8 sts=2 tw=78 et fdm=marker : */