From: Peter Stamfest Date: Thu, 27 Feb 2014 20:53:45 +0000 (+0100) Subject: factor out init_cdp and make it globally available X-Git-Tag: v1.5.0-rc1~131^2~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=158245ddeb3c1fb71ef6d14110aaf8638955ddab;p=thirdparty%2Frrdtool-1.x.git factor out init_cdp and make it globally available --- diff --git a/src/rrd_create.c b/src/rrd_create.c index 2eeaec41..614d6a4d 100644 --- a/src/rrd_create.c +++ b/src/rrd_create.c @@ -754,6 +754,41 @@ rra_def_t * create_hw_contingent_rras(rra_def_t *rra_defs, return rra_defs; } +void init_cdp(const rrd_t *rrd, const rra_def_t *rra_def, cdp_prep_t *cdp_prep) +{ + + switch (cf_conv(rra_def->cf_nam)) { + case CF_HWPREDICT: + case CF_MHWPREDICT: + init_hwpredict_cdp(cdp_prep); + break; + case CF_SEASONAL: + case CF_DEVSEASONAL: + init_seasonal_cdp(cdp_prep); + break; + case CF_FAILURES: + /* initialize violation history to 0 */ + for (int ii = 0; ii < MAX_CDP_PAR_EN; ii++) { + /* We can zero everything out, by setting u_val to the + * NULL address. Each array entry in scratch is 8 bytes + * (a double), but u_cnt only accessed 4 bytes (long) */ + cdp_prep->scratch[ii].u_val = 0.0; + } + break; + default: + /* can not be zero because we don't know anything ... */ + cdp_prep->scratch[CDP_val].u_val = DNAN; + /* startup missing pdp count */ + cdp_prep->scratch[CDP_unkn_pdp_cnt].u_cnt = + ((rrd->live_head->last_up - + rrd->pdp_prep->scratch[PDP_unkn_sec_cnt].u_cnt) + % (rrd->stat_head->pdp_step + * rra_def->pdp_cnt)) / rrd->stat_head->pdp_step; + break; + + } +} + /* create and empty rrd file according to the specs given */ int rrd_create_fn( @@ -816,35 +851,7 @@ int rrd_create_fn( for (i = 0; i < rrd->stat_head->rra_cnt; i++) { - switch (cf_conv(rrd->rra_def[i].cf_nam)) { - case CF_HWPREDICT: - case CF_MHWPREDICT: - init_hwpredict_cdp(rrd->cdp_prep); - break; - case CF_SEASONAL: - case CF_DEVSEASONAL: - init_seasonal_cdp(rrd->cdp_prep); - break; - case CF_FAILURES: - /* initialize violation history to 0 */ - for (ii = 0; ii < MAX_CDP_PAR_EN; ii++) { - /* We can zero everything out, by setting u_val to the - * NULL address. Each array entry in scratch is 8 bytes - * (a double), but u_cnt only accessed 4 bytes (long) */ - rrd->cdp_prep->scratch[ii].u_val = 0.0; - } - break; - default: - /* can not be zero because we don't know anything ... */ - rrd->cdp_prep->scratch[CDP_val].u_val = DNAN; - /* startup missing pdp count */ - rrd->cdp_prep->scratch[CDP_unkn_pdp_cnt].u_cnt = - ((rrd->live_head->last_up - - rrd->pdp_prep->scratch[PDP_unkn_sec_cnt].u_cnt) - % (rrd->stat_head->pdp_step - * rrd->rra_def[i].pdp_cnt)) / rrd->stat_head->pdp_step; - break; - } + init_cdp(rrd, &(rrd->rra_def[i]), rrd->cdp_prep); for (ii = 0; ii < rrd->stat_head->ds_cnt; ii++) { rrd_write(rrd_file_dn, rrd->cdp_prep, sizeof(cdp_prep_t)); diff --git a/src/rrd_create.h b/src/rrd_create.h index 2a76b4c0..682931b2 100644 --- a/src/rrd_create.h +++ b/src/rrd_create.h @@ -25,6 +25,10 @@ rra_def_t *handle_dependent_rras(rra_def_t *rra_def_array, long unsigned int *rra_cnt, unsigned long hash); +void init_cdp(const rrd_t *rrd, + const rra_def_t *rra_def, + cdp_prep_t *cdp_prep); + #endif