summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 04aafd7)
raw | patch | inline | side by side (parent: 04aafd7)
author | Andrés J. Díaz <ajdiaz@connectical.com> | |
Mon, 31 Aug 2009 16:06:15 +0000 (18:06 +0200) | ||
committer | Florian Forster <octo@leeloo.lan.home.verplant.org> | |
Mon, 31 Aug 2009 19:38:43 +0000 (21:38 +0200) |
Hi
I've attached a patch to add hit counter to thresholds, that is, each
time when threhsold raised, then an internal hit counter is incremented,
when the value of the counter raise a specific value setted in
configuration, then the notification is generated and counter is reset.
Here are an example of threshold configuration with hit conter:
<Threshold>
<Plugin load>
<Type load>
WarninMax 1
Hits 3
</Type>
</Plugin>
</Threshold>
In this example the notification will be generated when load value is
greater than 1 for 3 intervals.
Here are two patches, the first one adds hit feature to the collectd
cached and the second one use hits in thresholds,
Of course comments and suggestions are welcome :)
Enjoy!
Regards,
Andres
Signed-off-by: Florian Forster <octo@leeloo.lan.home.verplant.org>
I've attached a patch to add hit counter to thresholds, that is, each
time when threhsold raised, then an internal hit counter is incremented,
when the value of the counter raise a specific value setted in
configuration, then the notification is generated and counter is reset.
Here are an example of threshold configuration with hit conter:
<Threshold>
<Plugin load>
<Type load>
WarninMax 1
Hits 3
</Type>
</Plugin>
</Threshold>
In this example the notification will be generated when load value is
greater than 1 for 3 intervals.
Here are two patches, the first one adds hit feature to the collectd
cached and the second one use hits in thresholds,
Of course comments and suggestions are welcome :)
Enjoy!
Regards,
Andres
Signed-off-by: Florian Forster <octo@leeloo.lan.home.verplant.org>
src/utils_cache.c | patch | blob | history | |
src/utils_cache.h | patch | blob | history |
diff --git a/src/utils_cache.c b/src/utils_cache.c
index 956f8269c786a04614b089a088d5640be0b3ce83..9e7bc067dc8198605de7a4fd8fdac5798b9dbe41 100644 (file)
--- a/src/utils_cache.c
+++ b/src/utils_cache.c
* (for purding old entries) */
int interval;
int state;
+ int hits;
/*
* +-----+-----+-----+-----+-----+-----+-----+-----+-----+----
return (uc_get_history_by_name (name, ret_history, num_steps, num_ds));
} /* int uc_get_history */
+int uc_get_hits (const data_set_t *ds, const value_list_t *vl)
+{
+ char name[6 * DATA_MAX_NAME_LEN];
+ cache_entry_t *ce = NULL;
+ int ret = STATE_ERROR;
+
+ if (FORMAT_VL (name, sizeof (name), vl) != 0)
+ {
+ ERROR ("uc_get_state: FORMAT_VL failed.");
+ return (STATE_ERROR);
+ }
+
+ pthread_mutex_lock (&cache_lock);
+
+ if (c_avl_get (cache_tree, name, (void *) &ce) == 0)
+ {
+ assert (ce != NULL);
+ ret = ce->hits;
+ }
+
+ pthread_mutex_unlock (&cache_lock);
+
+ return (ret);
+} /* int uc_get_hits */
+
+int uc_set_hits (const data_set_t *ds, const value_list_t *vl, int hits)
+{
+ char name[6 * DATA_MAX_NAME_LEN];
+ cache_entry_t *ce = NULL;
+ int ret = -1;
+
+ if (FORMAT_VL (name, sizeof (name), vl) != 0)
+ {
+ ERROR ("uc_get_state: FORMAT_VL failed.");
+ return (STATE_ERROR);
+ }
+
+ pthread_mutex_lock (&cache_lock);
+
+ if (c_avl_get (cache_tree, name, (void *) &ce) == 0)
+ {
+ assert (ce != NULL);
+ ret = ce->hits;
+ ce->hits = hits;
+ }
+
+ pthread_mutex_unlock (&cache_lock);
+
+ return (ret);
+} /* int uc_set_hits */
+
+int uc_inc_hits (const data_set_t *ds, const value_list_t *vl, int step)
+{
+ char name[6 * DATA_MAX_NAME_LEN];
+ cache_entry_t *ce = NULL;
+ int ret = -1;
+
+ if (FORMAT_VL (name, sizeof (name), vl) != 0)
+ {
+ ERROR ("uc_get_state: FORMAT_VL failed.");
+ return (STATE_ERROR);
+ }
+
+ pthread_mutex_lock (&cache_lock);
+
+ if (c_avl_get (cache_tree, name, (void *) &ce) == 0)
+ {
+ assert (ce != NULL);
+ ret = ce->hits;
+ ce->hits = ret + step;
+ }
+
+ pthread_mutex_unlock (&cache_lock);
+
+ return (ret);
+} /* int uc_inc_hits */
+
/*
* Meta data interface
*/
diff --git a/src/utils_cache.h b/src/utils_cache.h
index 91a6a6d80913dbd3258974c703760050c4995d4f..f8059ecaf077dda6924122e3dc6452b4babfb282 100644 (file)
--- a/src/utils_cache.h
+++ b/src/utils_cache.h
int uc_get_state (const data_set_t *ds, const value_list_t *vl);
int uc_set_state (const data_set_t *ds, const value_list_t *vl, int state);
+int uc_get_hits (const data_set_t *ds, const value_list_t *vl);
+int uc_set_hits (const data_set_t *ds, const value_list_t *vl, int hits);
+int uc_inc_hits (const data_set_t *ds, const value_list_t *vl, int step);
int uc_get_history (const data_set_t *ds, const value_list_t *vl,
gauge_t *ret_history, size_t num_steps, size_t num_ds);