/*- * Copyright (c) 2003 Andrey Simonenko * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * @(#)$Id: ipa_thresholds.h,v 1.1.4.2 2007/02/17 09:21:54 simon Exp $ */ #ifndef IPA_THRESHOLD_H #define IPA_THRESHOLD_H #ifdef WITH_THRESHOLDS #ifndef THRESHOLD_NSIZE # define THRESHOLD_NSIZE 30 #endif #ifndef THRESHOLD_NALLOC # define THRESHOLD_NALLOC 20 #endif #define THRESHOLD_JUMP_OVER_INACTIVE 0x1 #define THRESHOLD_JUMP_OVER_STOPPED 0x2 #define THRESHOLD_JUMP_OVER_ALLBITS (THRESHOLD_JUMP_OVER_INACTIVE|THRESHOLD_JUMP_OVER_STOPPED) struct rule; /* * rule { threshold {}} section. */ struct threshold { STAILQ_ENTRY(threshold) link; /* Link for list of thresholds. */ char *threshold_name;/* Name of this threshold. */ char *threshold_info;/* threshold { info } */ u_int thresholdno; /* Order number of this threshold in its rule. */ uint64_t thr; /* threshold { threshold } */ uint64_t thr_dev; /* threshold { threshold_deviation } */ u_int thr_dev_per_cent;/* threshold { threshold_deviation } if it is xx%. */ uint64_t thr_max; /* thr + thr_dev */ uint64_t thr_min; /* thr - thr_dev */ uint64_t cnt; /* Counter. */ uint64_t cnt_neg; /* Negative counter. */ u_int cnt_type; /* Type of the "threshold" parameter's argument. */ uint64_t *cnt_slice; /* Counters for time slices. */ BITMAP_TYPE *cnt_slice_sign;/* Signs for cnt_slice. */ u_int cnt_slice_n; /* Number of time slices. */ u_int cnt_slice_i; /* Current index in cnt_slice. */ int threshold_type; /* threshold { threshold_type } */ int load_threshold; /* threshold { load_threshold } */ u_int time_width; /* threshold { threshold_time_width } */ const struct tevent *time_slice;/* threshold { threshold_time_slice } */ const struct worktime *worktime;/* threshold { worktime } */ int is_active; /* [IN]ACTIVE_FLAG */ const struct db_list *db_list; /* threshold { db_list } */ u_int below_lim; /* X:-:- threshold { threshold_balance } */ u_int equal_lim; /* -:X:- threshold { threshold_balance } */ u_int above_lim; /* -:-:X threshold { threshold_balance } */ u_int below_cnt; /* Rest from below_lim. */ u_int equal_cnt; /* Rest from equal_lim. */ u_int above_cnt; /* Rest from above_lim. */ struct cmd_list below_threshold;/* threshold { below_threshold {}} */ struct cmd_list equal_threshold;/* threshold { equal_threshold {}} */ struct cmd_list above_threshold;/* threshold { above_threshold {}} */ struct cmd_list rc[2]; /* threshold { startup|shutdown {}} */ struct wpid wpid; /* Threshold's wpid structure. */ int update_tm_from; /* If non-zero, then update tm_from. */ ipa_tm tm_from; /* Time when threshold started (dynamically changed). */ ipa_tm tm_updated; /* Time when threshold was updated (dynamically changed). */ u_int check_sec; /* Time when to check threshold. */ const struct rule *rule; /* Pointer to threshold's rule. */ }; /* * List of all thresholds in one rule. */ STAILQ_HEAD(thresholds_list, threshold); extern const char *const threshold_event_msg[]; extern int global_debug_threshold; extern int global_debug_threshold_init; extern int global_threshold_type; extern int global_load_threshold; extern u_int global_threshold_time_width; extern const struct tevent *global_threshold_time_slice; extern u_int global_threshold_below_lim; extern u_int global_threshold_equal_lim; extern u_int global_threshold_above_lim; extern ipa_mzone *threshold_mzone; extern void set_thr_min_max(struct threshold *); extern int init_thresholds(const struct rule *); extern int check_thresholds_events(const struct rule *, u_int *); extern int thresholds_newday(struct rule *); extern int add_chunk_to_threshold(const struct rule *, struct threshold *, const uint64_t *); extern int add_chunk_to_thresholds(const struct rule *, const uint64_t *); extern int sub_chunk_from_threshold(const struct rule *, struct threshold *, const uint64_t *); extern int sub_chunk_from_thresholds(const struct rule *, const uint64_t *); #define set_threshold_inactive(r, t) mod_set_threshold_active((r), (t), INACTIVE_FLAG) extern int mod_set_threshold_active(const struct rule *, struct threshold *, int); extern int copy_thresholds(struct rule *, const struct thresholds_list *, int); extern void free_thresholds(u_int, struct thresholds_list *, int); extern void init_cmds_in_threshold(struct threshold *); extern void set_sync_exec_in_threshold(struct threshold *); extern struct threshold *threshold_by_name(const struct rule *, const char *); #endif /* WITH_THRESHOLDS */ extern u_int nstatthresholds; extern u_int ndynthresholds; #endif /* !IPA_THRESHOLD_H */