double max;
char dst[DST_SIZE];
rrd_file_t *rrd_file;
+ struct option long_options[] = {
+ {"heartbeat", required_argument, 0, 'h'},
+ {"minimum", required_argument, 0, 'i'},
+ {"maximum", required_argument, 0, 'a'},
+ {"data-source-type", required_argument, 0, 'd'},
+ {"data-source-rename", required_argument, 0, 'r'},
+ /* added parameter tuning options for aberrant behavior detection */
+ {"deltapos", required_argument, 0, 'p'},
+ {"deltaneg", required_argument, 0, 'n'},
+ {"window-length", required_argument, 0, 'w'},
+ {"failure-threshold", required_argument, 0, 'f'},
+ {"alpha", required_argument, 0, 'x'},
+ {"beta", required_argument, 0, 'y'},
+ {"gamma", required_argument, 0, 'z'},
+ {"gamma-deviation", required_argument, 0, 'v'},
+ {"aberrant-reset", required_argument, 0, 'b'},
+ {0, 0, 0, 0}
+ };
optind = 0;
opterr = 0; /* initialize getopt */
rrd_file = rrd_open(argv[1], &rrd, RRD_READWRITE);
if (rrd_file == NULL) {
+ rrd_free(&rrd);
return -1;
}
while (1) {
- static struct option long_options[] = {
- {"heartbeat", required_argument, 0, 'h'},
- {"minimum", required_argument, 0, 'i'},
- {"maximum", required_argument, 0, 'a'},
- {"data-source-type", required_argument, 0, 'd'},
- {"data-source-rename", required_argument, 0, 'r'},
- /* added parameter tuning options for aberrant behavior detection */
- {"deltapos", required_argument, 0, 'p'},
- {"deltaneg", required_argument, 0, 'n'},
- {"window-length", required_argument, 0, 'w'},
- {"failure-threshold", required_argument, 0, 'f'},
- {"alpha", required_argument, 0, 'x'},
- {"beta", required_argument, 0, 'y'},
- {"gamma", required_argument, 0, 'z'},
- {"gamma-deviation", required_argument, 0, 'v'},
- {"aberrant-reset", required_argument, 0, 'b'},
- {0, 0, 0, 0}
- };
int option_index = 0;
int opt;
&heartbeat)) != 2) {
rrd_set_error("invalid arguments for heartbeat");
rrd_free(&rrd);
- close(rrd_file->fd);
+ rrd_close(rrd_file);
return -1;
}
if ((ds = ds_match(&rrd, ds_nam)) == -1) {
rrd_free(&rrd);
- close(rrd_file->fd);
+ rrd_close(rrd_file);
return -1;
}
rrd.ds_def[ds].par[DS_mrhb_cnt].u_cnt = heartbeat;
sscanf(optarg, DS_NAM_FMT ":%lf", ds_nam, &min)) < 1) {
rrd_set_error("invalid arguments for minimum ds value");
rrd_free(&rrd);
- close(rrd_file->fd);
+ rrd_close(rrd_file);
return -1;
}
if ((ds = ds_match(&rrd, ds_nam)) == -1) {
rrd_free(&rrd);
- close(rrd_file->fd);
+ rrd_close(rrd_file);
return -1;
}
sscanf(optarg, DS_NAM_FMT ":%lf", ds_nam, &max)) < 1) {
rrd_set_error("invalid arguments for maximum ds value");
rrd_free(&rrd);
- close(rrd_file->fd);
+ rrd_close(rrd_file);
return -1;
}
if ((ds = ds_match(&rrd, ds_nam)) == -1) {
rrd_free(&rrd);
- close(rrd_file->fd);
+ rrd_close(rrd_file);
return -1;
}
if (matches == 1)
sscanf(optarg, DS_NAM_FMT ":" DST_FMT, ds_nam, dst)) != 2) {
rrd_set_error("invalid arguments for data source type");
rrd_free(&rrd);
- close(rrd_file->fd);
+ rrd_close(rrd_file);
return -1;
}
if ((ds = ds_match(&rrd, ds_nam)) == -1) {
rrd_free(&rrd);
- close(rrd_file->fd);
+ rrd_close(rrd_file);
return -1;
}
if ((int) dst_conv(dst) == -1) {
rrd_free(&rrd);
- close(rrd_file->fd);
+ rrd_close(rrd_file);
return -1;
}
strncpy(rrd.ds_def[ds].dst, dst, DST_SIZE - 1);
ds_new)) != 2) {
rrd_set_error("invalid arguments for data source type");
rrd_free(&rrd);
- close(rrd_file->fd);
+ rrd_close(rrd_file);
return -1;
}
if ((ds = ds_match(&rrd, ds_nam)) == -1) {
rrd_free(&rrd);
- close(rrd_file->fd);
+ rrd_close(rrd_file);
return -1;
}
strncpy(rrd.ds_def[ds].ds_nam, ds_new, DS_NAM_SIZE - 1);
break;
case 'x':
if (set_hwarg(&rrd, CF_HWPREDICT, RRA_hw_alpha, optarg)) {
- rrd_free(&rrd);
- return -1;
+ if (set_hwarg(&rrd, CF_MHWPREDICT, RRA_hw_alpha, optarg)) {
+ rrd_free(&rrd);
+ return -1;
+ }
+ rrd_clear_error();
}
break;
case 'y':
if (set_hwarg(&rrd, CF_HWPREDICT, RRA_hw_beta, optarg)) {
- rrd_free(&rrd);
- return -1;
+ if (set_hwarg(&rrd, CF_MHWPREDICT, RRA_hw_beta, optarg)) {
+ rrd_free(&rrd);
+ return -1;
+ }
+ rrd_clear_error();
}
break;
case 'z':
if (sscanf(optarg, DS_NAM_FMT, ds_nam) != 1) {
rrd_set_error("invalid argument for aberrant-reset");
rrd_free(&rrd);
- close(rrd_file->fd);
+ rrd_close(rrd_file);
return -1;
}
if ((ds = ds_match(&rrd, ds_nam)) == -1) {
/* ds_match handles it own errors */
rrd_free(&rrd);
- close(rrd_file->fd);
+ rrd_close(rrd_file);
return -1;
}
reset_aberrant_coefficients(&rrd, rrd_file, (unsigned long) ds);
if (rrd_test_error()) {
rrd_free(&rrd);
- close(rrd_file->fd);
+ rrd_close(rrd_file);
return -1;
}
break;
else
rrd_set_error("unknown option '%s'", argv[optind - 1]);
rrd_free(&rrd);
- close(rrd_file->fd);
+ rrd_close(rrd_file);
return -1;
}
}
free(buffer);
}
}
- close(rrd_file->fd);
+ rrd_close(rrd_file);
rrd_free(&rrd);
return 0;
}