X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=blobdiff_plain;f=src%2Frrd_format.h;h=75441ac9f1dfe09ab510256caeb987a26a65d29c;hp=794a12924557f2d4726c4811cebc6f0f33b11b92;hb=35354e059a77479a7a135c1e4fc71c76523fd7c4;hpb=96db36a7a6ff75d2fc1353e45434a7f6b1db801b diff --git a/src/rrd_format.h b/src/rrd_format.h index 794a129..75441ac 100644 --- a/src/rrd_format.h +++ b/src/rrd_format.h @@ -1,5 +1,5 @@ /***************************************************************************** - * RRDtool 1.2.7 Copyright by Tobi Oetiker, 1997-2005 + * RRDtool 1.3.0 Copyright by Tobi Oetiker, 1997-2008 ***************************************************************************** * rrd_format.h RRD Database Format header *****************************************************************************/ @@ -7,6 +7,18 @@ #ifndef _RRD_FORMAT_H #define _RRD_FORMAT_H +/* + * _RRD_TOOL_H + * We're building RRDTool itself. + * + * RRD_EXPORT_DEPRECATED + * User is requesting internal function which need this struct. They have + * been told that this will change and have agreed to adapt their programs. + */ +#if !defined(_RRD_TOOL_H) && !defined(RRD_EXPORT_DEPRECATED) +# error "Do not include rrd_format.h directly. Include rrd.h instead!" +#endif + #include "rrd.h" /***************************************************************************** @@ -21,14 +33,13 @@ #define RRD_COOKIE "RRD" /* #define RRD_VERSION "0002" */ /* changed because microsecond precision requires another field */ -#define RRD_VERSION "0003" +#define RRD_VERSION "0004" +#define RRD_VERSION3 "0003" #define FLOAT_COOKIE 8.642135E130 -#include "rrd_nan_inf.h" - -typedef union unival { - unsigned long u_cnt; - rrd_value_t u_val; +typedef union unival { + unsigned long u_cnt; + rrd_value_t u_val; } unival; @@ -101,21 +112,21 @@ typedef union unival { typedef struct stat_head_t { - /* Data Base Identification Section ***/ - char cookie[4]; /* RRD */ - char version[5]; /* version of the format */ - double float_cookie; /* is it the correct double - * representation ? */ - - /* Data Base Structure Definition *****/ - unsigned long ds_cnt; /* how many different ds provide - * input to the rrd */ - unsigned long rra_cnt; /* how many rras will be maintained - * in the rrd */ - unsigned long pdp_step; /* pdp interval in seconds */ - - unival par[10]; /* global parameters ... unused - at the moment */ + /* Data Base Identification Section ** */ + char cookie[4]; /* RRD */ + char version[5]; /* version of the format */ + double float_cookie; /* is it the correct double + * representation ? */ + + /* Data Base Structure Definition **** */ + unsigned long ds_cnt; /* how many different ds provide + * input to the rrd */ + unsigned long rra_cnt; /* how many rras will be maintained + * in the rrd */ + unsigned long pdp_step; /* pdp interval in seconds */ + + unival par[10]; /* global parameters ... unused + at the moment */ } stat_head_t; @@ -123,24 +134,26 @@ typedef struct stat_head_t { * POS 2: ds_def_t (* ds_cnt) Data Source definitions ****************************************************************************/ -enum dst_en { DST_COUNTER=0, /* data source types available */ - DST_ABSOLUTE, - DST_GAUGE, - DST_DERIVE, - DST_CDEF}; - -enum ds_param_en { DS_mrhb_cnt=0, /* minimum required heartbeat. A - * data source must provide input at - * least every ds_mrhb seconds, - * otherwise it is regarded dead and - * will be set to UNKNOWN */ - DS_min_val, /* the processed input of a ds must */ - DS_max_val, /* be between max_val and min_val - * both can be set to UNKNOWN if you - * do not care. Data outside the limits - * set to UNKNOWN */ - DS_cdef = DS_mrhb_cnt}; /* pointer to encoded rpn - * expression only applies to DST_CDEF */ +enum dst_en { DST_COUNTER = 0, /* data source types available */ + DST_ABSOLUTE, + DST_GAUGE, + DST_DERIVE, + DST_CDEF +}; + +enum ds_param_en { DS_mrhb_cnt = 0, /* minimum required heartbeat. A + * data source must provide input at + * least every ds_mrhb seconds, + * otherwise it is regarded dead and + * will be set to UNKNOWN */ + DS_min_val, /* the processed input of a ds must */ + DS_max_val, /* be between max_val and min_val + * both can be set to UNKNOWN if you + * do not care. Data outside the limits + * set to UNKNOWN */ + DS_cdef = DS_mrhb_cnt +}; /* pointer to encoded rpn + * expression only applies to DST_CDEF */ /* The magic number here is one less than DS_NAM_SIZE */ #define DS_NAM_FMT "%19[a-zA-Z0-9_-]" @@ -150,89 +163,106 @@ enum ds_param_en { DS_mrhb_cnt=0, /* minimum required heartbeat. A #define DST_SIZE 20 typedef struct ds_def_t { - char ds_nam[DS_NAM_SIZE]; /* Name of the data source (null terminated)*/ - char dst[DST_SIZE]; /* Type of data source (null terminated)*/ - unival par[10]; /* index of this array see ds_param_en */ + char ds_nam[DS_NAM_SIZE]; /* Name of the data source (null terminated) */ + char dst[DST_SIZE]; /* Type of data source (null terminated) */ + unival par[10]; /* index of this array see ds_param_en */ } ds_def_t; /**************************************************************************** * POS 3: rra_def_t ( * rra_cnt) one for each store to be maintained ****************************************************************************/ -enum cf_en { CF_AVERAGE=0, /* data consolidation functions */ - CF_MINIMUM, - CF_MAXIMUM, - CF_LAST, - CF_HWPREDICT, - /* An array of predictions using the seasonal - * Holt-Winters algorithm. Requires an RRA of type - * CF_SEASONAL for this data source. */ - CF_SEASONAL, - /* An array of seasonal effects. Requires an RRA of - * type CF_HWPREDICT for this data source. */ - CF_DEVPREDICT, - /* An array of deviation predictions based upon - * smoothed seasonal deviations. Requires an RRA of - * type CF_DEVSEASONAL for this data source. */ - CF_DEVSEASONAL, - /* An array of smoothed seasonal deviations. Requires - * an RRA of type CF_HWPREDICT for this data source. - * */ - CF_FAILURES}; - /* A binary array of failure indicators: 1 indicates - * that the number of violations in the prescribed - * window exceeded the prescribed threshold. */ +enum cf_en { CF_AVERAGE = 0, /* data consolidation functions */ + CF_MINIMUM, + CF_MAXIMUM, + CF_LAST, + CF_HWPREDICT, + /* An array of predictions using the seasonal + * Holt-Winters algorithm. Requires an RRA of type + * CF_SEASONAL for this data source. */ + CF_SEASONAL, + /* An array of seasonal effects. Requires an RRA of + * type CF_HWPREDICT for this data source. */ + CF_DEVPREDICT, + /* An array of deviation predictions based upon + * smoothed seasonal deviations. Requires an RRA of + * type CF_DEVSEASONAL for this data source. */ + CF_DEVSEASONAL, + /* An array of smoothed seasonal deviations. Requires + * an RRA of type CF_HWPREDICT for this data source. + * */ + CF_FAILURES, + /* HWPREDICT that follows a moving baseline */ + CF_MHWPREDICT + /* new entries must come last !!! */ +}; + + /* A binary array of failure indicators: 1 indicates + * that the number of violations in the prescribed + * window exceeded the prescribed threshold. */ #define MAX_RRA_PAR_EN 10 -enum rra_par_en { RRA_cdp_xff_val=0, /* what part of the consolidated - * datapoint must be known, to produce a - * valid entry in the rra */ - RRA_hw_alpha, - /* exponential smoothing parameter for the intercept in - * the Holt-Winters prediction algorithm. */ - RRA_hw_beta, - /* exponential smoothing parameter for the slope in - * the Holt-Winters prediction algorithm. */ - RRA_dependent_rra_idx, - /* For CF_HWPREDICT: index of the RRA with the seasonal - * effects of the Holt-Winters algorithm (of type - * CF_SEASONAL). - * For CF_DEVPREDICT: index of the RRA with the seasonal - * deviation predictions (of type CF_DEVSEASONAL). - * For CF_SEASONAL: index of the RRA with the Holt-Winters - * intercept and slope coefficient (of type CF_HWPREDICT). - * For CF_DEVSEASONAL: index of the RRA with the - * Holt-Winters prediction (of type CF_HWPREDICT). - * For CF_FAILURES: index of the CF_DEVSEASONAL array. - * */ - RRA_seasonal_smooth_idx, - /* For CF_SEASONAL and CF_DEVSEASONAL: - * an integer between 0 and row_count - 1 which - * is index in the seasonal cycle for applying - * the period smoother. */ - RRA_failure_threshold, - /* For CF_FAILURES, number of violations within the last - * window required to mark a failure. */ - RRA_seasonal_gamma = RRA_hw_alpha, - /* exponential smoothing parameter for seasonal effects. - * */ - RRA_delta_pos = RRA_hw_alpha, - RRA_delta_neg = RRA_hw_beta, - /* confidence bound scaling parameters for the - * the FAILURES RRA. */ - RRA_window_len = RRA_seasonal_smooth_idx}; - /* For CF_FAILURES, the length of the window for measuring - * failures. */ - +enum rra_par_en { RRA_cdp_xff_val = 0, /* what part of the consolidated + * datapoint must be known, to produce a + * valid entry in the rra */ + /* CF_HWPREDICT: */ + RRA_hw_alpha = 1, + /* exponential smoothing parameter for the intercept in + * the Holt-Winters prediction algorithm. */ + RRA_hw_beta = 2, + /* exponential smoothing parameter for the slope in + * the Holt-Winters prediction algorithm. */ + + RRA_dependent_rra_idx = 3, + /* For CF_HWPREDICT: index of the RRA with the seasonal + * effects of the Holt-Winters algorithm (of type + * CF_SEASONAL). + * For CF_DEVPREDICT: index of the RRA with the seasonal + * deviation predictions (of type CF_DEVSEASONAL). + * For CF_SEASONAL: index of the RRA with the Holt-Winters + * intercept and slope coefficient (of type CF_HWPREDICT). + * For CF_DEVSEASONAL: index of the RRA with the + * Holt-Winters prediction (of type CF_HWPREDICT). + * For CF_FAILURES: index of the CF_DEVSEASONAL array. + * */ + + /* CF_SEASONAL and CF_DEVSEASONAL: */ + RRA_seasonal_gamma = 1, + /* exponential smoothing parameter for seasonal effects. */ + + RRA_seasonal_smoothing_window = 2, + /* fraction of the season to include in the running average + * smoother */ + + /* RRA_dependent_rra_idx = 3, */ + + RRA_seasonal_smooth_idx = 4, + /* an integer between 0 and row_count - 1 which + * is index in the seasonal cycle for applying + * the period smoother. */ + + /* CF_FAILURES: */ + RRA_delta_pos = 1, /* confidence bound scaling parameters */ + RRA_delta_neg = 2, + /* RRA_dependent_rra_idx = 3, */ + RRA_window_len = 4, + RRA_failure_threshold = 5, + /* For CF_FAILURES, number of violations within the last + * window required to mark a failure. */ +}; + + /* For CF_FAILURES, the length of the window for measuring + * failures. */ + #define CF_NAM_FMT "%19[A-Z]" #define CF_NAM_SIZE 20 typedef struct rra_def_t { - char cf_nam[CF_NAM_SIZE];/* consolidation function (null term) */ - unsigned long row_cnt; /* number of entries in the store */ - unsigned long pdp_cnt; /* how many primary data points are - * required for a consolidated data - * point?*/ - unival par[MAX_RRA_PAR_EN]; /* index see rra_param_en */ + char cf_nam[CF_NAM_SIZE]; /* consolidation function (null term) */ + unsigned long row_cnt; /* number of entries in the store */ + unsigned long pdp_cnt; /* how many primary data points are + * required for a consolidated data + * point?*/ + unival par[MAX_RRA_PAR_EN]; /* index see rra_param_en */ } rra_def_t; @@ -249,30 +279,31 @@ typedef struct rra_def_t { ****************************************************************************/ typedef struct live_head_t { - time_t last_up; /* when was rrd last updated */ - long last_up_usec; /* micro seconds part of the - update timestamp. Always >= 0 */ + time_t last_up; /* when was rrd last updated */ + long last_up_usec; /* micro seconds part of the + update timestamp. Always >= 0 */ } live_head_t; /**************************************************************************** * POS 5: pdp_prep_t (* ds_cnt) here we prepare the pdps ****************************************************************************/ -#define LAST_DS_LEN 30 /* DO NOT CHANGE THIS ... */ - -enum pdp_par_en { PDP_unkn_sec_cnt=0, /* how many seconds of the current - * pdp value is unknown data? */ - - PDP_val}; /* current value of the pdp. - this depends on dst */ - -typedef struct pdp_prep_t{ - char last_ds[LAST_DS_LEN]; /* the last reading from the data - * source. this is stored in ASCII - * to cater for very large counters - * we might encounter in connection - * with SNMP. */ - unival scratch[10]; /* contents according to pdp_par_en */ +#define LAST_DS_LEN 30 /* DO NOT CHANGE THIS ... */ + +enum pdp_par_en { PDP_unkn_sec_cnt = 0, /* how many seconds of the current + * pdp value is unknown data? */ + + PDP_val +}; /* current value of the pdp. + this depends on dst */ + +typedef struct pdp_prep_t { + char last_ds[LAST_DS_LEN]; /* the last reading from the data + * source. this is stored in ASCII + * to cater for very large counters + * we might encounter in connection + * with SNMP. */ + unival scratch[10]; /* contents according to pdp_par_en */ } pdp_prep_t; /* data is passed from pdp to cdp when seconds since epoch modulo pdp_step == 0 @@ -291,56 +322,58 @@ typedef struct pdp_prep_t{ * POS 6: cdp_prep_t (* rra_cnt * ds_cnt ) data prep area for cdp values ****************************************************************************/ #define MAX_CDP_PAR_EN 10 -#define MAX_CDP_FAILURES_IDX 8 +#define MAX_CDP_FAILURES_IDX 8 /* max CDP scratch entries avail to record violations for a FAILURES RRA */ #define MAX_FAILURES_WINDOW_LEN 28 -enum cdp_par_en { CDP_val=0, - /* the base_interval is always an - * average */ - CDP_unkn_pdp_cnt, - /* how many unknown pdp were - * integrated. This and the cdp_xff - * will decide if this is going to - * be a UNKNOWN or a valid value */ - CDP_hw_intercept, - /* Current intercept coefficient for the Holt-Winters - * prediction algorithm. */ - CDP_hw_last_intercept, - /* Last iteration intercept coefficient for the Holt-Winters - * prediction algorihtm. */ - CDP_hw_slope, - /* Current slope coefficient for the Holt-Winters - * prediction algorithm. */ - CDP_hw_last_slope, - /* Last iteration slope coeffient. */ - CDP_null_count, - /* Number of sequential Unknown (DNAN) values + 1 preceding - * the current prediction. - * */ - CDP_last_null_count, - /* Last iteration count of Unknown (DNAN) values. */ - CDP_primary_val = 8, - /* optimization for bulk updates: the value of the first CDP - * value to be written in the bulk update. */ - CDP_secondary_val = 9, - /* optimization for bulk updates: the value of subsequent - * CDP values to be written in the bulk update. */ - CDP_hw_seasonal = CDP_hw_intercept, - /* Current seasonal coefficient for the Holt-Winters - * prediction algorithm. This is stored in CDP prep to avoid - * redundant seek operations. */ - CDP_hw_last_seasonal = CDP_hw_last_intercept, - /* Last iteration seasonal coeffient. */ - CDP_seasonal_deviation = CDP_hw_intercept, - CDP_last_seasonal_deviation = CDP_hw_last_intercept, - CDP_init_seasonal = CDP_null_count}; +enum cdp_par_en { CDP_val = 0, + /* the base_interval is always an + * average */ + CDP_unkn_pdp_cnt, + /* how many unknown pdp were + * integrated. This and the cdp_xff + * will decide if this is going to + * be a UNKNOWN or a valid value */ + CDP_hw_intercept, + /* Current intercept coefficient for the Holt-Winters + * prediction algorithm. */ + CDP_hw_last_intercept, + /* Last iteration intercept coefficient for the Holt-Winters + * prediction algorihtm. */ + CDP_hw_slope, + /* Current slope coefficient for the Holt-Winters + * prediction algorithm. */ + CDP_hw_last_slope, + /* Last iteration slope coeffient. */ + CDP_null_count, + /* Number of sequential Unknown (DNAN) values + 1 preceding + * the current prediction. + * */ + CDP_last_null_count, + /* Last iteration count of Unknown (DNAN) values. */ + CDP_primary_val = 8, + /* optimization for bulk updates: the value of the first CDP + * value to be written in the bulk update. */ + CDP_secondary_val = 9, + /* optimization for bulk updates: the value of subsequent + * CDP values to be written in the bulk update. */ + CDP_hw_seasonal = CDP_hw_intercept, + /* Current seasonal coefficient for the Holt-Winters + * prediction algorithm. This is stored in CDP prep to avoid + * redundant seek operations. */ + CDP_hw_last_seasonal = CDP_hw_last_intercept, + /* Last iteration seasonal coeffient. */ + CDP_seasonal_deviation = CDP_hw_intercept, + CDP_last_seasonal_deviation = CDP_hw_last_intercept, + CDP_init_seasonal = CDP_null_count +}; + /* init_seasonal is a flag which when > 0, forces smoothing updates * to occur when rra_ptr.cur_row == 0 */ -typedef struct cdp_prep_t{ - unival scratch[MAX_CDP_PAR_EN]; - /* contents according to cdp_par_en * - * init state should be NAN */ +typedef struct cdp_prep_t { + unival scratch[MAX_CDP_PAR_EN]; + /* contents according to cdp_par_en * + * init state should be NAN */ } cdp_prep_t; @@ -349,7 +382,7 @@ typedef struct cdp_prep_t{ ****************************************************************************/ typedef struct rra_ptr_t { - unsigned long cur_row; /* current row in the rra*/ + unsigned long cur_row; /* current row in the rra */ } rra_ptr_t; @@ -359,14 +392,15 @@ typedef struct rra_ptr_t { **************************************************************************** ****************************************************************************/ typedef struct rrd_t { - stat_head_t *stat_head; /* the static header */ - ds_def_t *ds_def; /* list of data source definitions */ - rra_def_t *rra_def; /* list of round robin archive def */ - live_head_t *live_head; - pdp_prep_t *pdp_prep; /* pdp data prep area */ - cdp_prep_t *cdp_prep; /* cdp prep area */ - rra_ptr_t *rra_ptr; /* list of rra pointers */ - rrd_value_t *rrd_value; /* list of rrd values */ + stat_head_t *stat_head; /* the static header */ + ds_def_t *ds_def; /* list of data source definitions */ + rra_def_t *rra_def; /* list of round robin archive def */ + live_head_t *live_head; /* rrd v >= 3 last_up with us */ + time_t *legacy_last_up; /* rrd v < 3 last_up time */ + pdp_prep_t *pdp_prep; /* pdp data prep area */ + cdp_prep_t *cdp_prep; /* cdp prep area */ + rra_ptr_t *rra_ptr; /* list of rra pointers */ + rrd_value_t *rrd_value; /* list of rrd values */ } rrd_t; /**************************************************************************** @@ -392,7 +426,3 @@ typedef struct rrd_t { #endif - - - -