/* * Parse an RRA definition */ static int parse_tag_rra_cf( xmlTextReaderPtr reader, rra_def_t *rra_def) { int status; status = get_xml_string(reader, rra_def->cf_nam, sizeof(rra_def->cf_nam)); if (status != 0) return status; status = rrd_cf_conv(rra_def->cf_nam); if (status == -1) { rrd_set_error("parse_tag_rra_cf: Unknown consolidation function: %s", rra_def->cf_nam); return -1; } return 0; } /* int parse_tag_rra_cf */
static int set_hwsmootharg( rrd_t *rrd, enum cf_en cf, enum rra_par_en rra_par, const char *arg) { double param; unsigned long i; signed short rra_idx = -1; unsigned int strtod_ret_val; /* read the value */ strtod_ret_val = rrd_strtodbl(arg, NULL, ¶m, NULL); /* in order to avoid smoothing of SEASONAL or DEVSEASONAL, we need to * the 0.0 value*/ if ( (strtod_ret_val == 1 || strtod_ret_val == 2 ) && (param < 0.0 || param > 1.0) ) { rrd_set_error("Holt-Winters parameter must be between 0 and 1"); return -1; } else if( strtod_ret_val == 0 || strtod_ret_val > 2 ) { rrd_set_error("Unable to parse Holt-Winters parameter"); return -1; } /* does the appropriate RRA exist? */ for (i = 0; i < rrd->stat_head->rra_cnt; ++i) { if (rrd_cf_conv(rrd->rra_def[i].cf_nam) == cf) { rra_idx = i; break; } } if (rra_idx == -1) { rrd_set_error("Holt-Winters RRA does not exist in this RRD"); return -1; } /* set the value */ rrd->rra_def[rra_idx].par[rra_par].u_val = param; return 0; }
static int set_windowarg( rrd_t *rrd, enum rra_par_en rra_par, const char *arg) { unsigned long param; unsigned long i, cdp_idx; signed short rra_idx = -1; /* read the value */ param = atoi(arg); if (param < 1 || param > MAX_FAILURES_WINDOW_LEN) { rrd_set_error("Parameter must be between %d and %d", 1, MAX_FAILURES_WINDOW_LEN); return -1; } /* does the appropriate RRA exist? */ for (i = 0; i < rrd->stat_head->rra_cnt; ++i) { if (rrd_cf_conv(rrd->rra_def[i].cf_nam) == CF_FAILURES) { rra_idx = i; break; } } if (rra_idx == -1) { rrd_set_error("Failures RRA does not exist in this RRD"); return -1; } /* set the value */ rrd->rra_def[rra_idx].par[rra_par].u_cnt = param; /* erase existing violations */ for (i = 0; i < rrd->stat_head->ds_cnt; i++) { cdp_idx = rra_idx * (rrd->stat_head->ds_cnt) + i; erase_violations(rrd, cdp_idx, rra_idx); } return 0; }
static int set_deltaarg( rrd_t *rrd, enum rra_par_en rra_par, const char *arg) { rrd_value_t param; unsigned long i; signed short rra_idx = -1; unsigned int strtod_ret_val; strtod_ret_val = rrd_strtodbl(arg, NULL, ¶m, NULL); if ((strtod_ret_val == 1 || strtod_ret_val == 2) && param < 0.1) { rrd_set_error("Parameter specified is too small"); return -1; } else if( strtod_ret_val == 1 || strtod_ret_val > 2 ) { rrd_set_error("Unable to parse parameter in set_deltaarg"); return -1; } /* does the appropriate RRA exist? */ for (i = 0; i < rrd->stat_head->rra_cnt; ++i) { if (rrd_cf_conv(rrd->rra_def[i].cf_nam) == CF_FAILURES) { rra_idx = i; break; } } if (rra_idx == -1) { rrd_set_error("Failures RRA does not exist in this RRD"); return -1; } /* set the value */ rrd->rra_def[rra_idx].par[rra_par].u_val = param; return 0; }