X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_tune.c;h=f675c8b24d92ec9f5524a696b67f543ca629d2dd;hb=ad6f3441d407ca0c82b86b481f697ca913844d54;hp=df22968378fa15da2aa7abd6142efcb0616a715d;hpb=2a6a270edfda89b04722b42b57992907f871c671;p=rrdtool.git diff --git a/src/rrd_tune.c b/src/rrd_tune.c index df22968..f675c8b 100644 --- a/src/rrd_tune.c +++ b/src/rrd_tune.c @@ -72,6 +72,24 @@ int rrd_tune( 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 */ @@ -79,28 +97,11 @@ int rrd_tune( 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; @@ -117,12 +118,12 @@ int rrd_tune( &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; @@ -133,12 +134,12 @@ int rrd_tune( 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; } @@ -152,12 +153,12 @@ int rrd_tune( 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) @@ -170,17 +171,17 @@ int rrd_tune( 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); @@ -199,12 +200,12 @@ int rrd_tune( 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); @@ -236,14 +237,20 @@ int rrd_tune( 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': @@ -262,19 +269,19 @@ int rrd_tune( 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; @@ -284,12 +291,11 @@ int rrd_tune( else rrd_set_error("unknown option '%s'", argv[optind - 1]); rrd_free(&rrd); - close(rrd_file->fd); + rrd_close(rrd_file); return -1; } } if (optcnt > 0) { - rrd_seek(rrd_file, 0, SEEK_SET); rrd_write(rrd_file, rrd.stat_head, sizeof(stat_head_t) * 1); rrd_write(rrd_file, rrd.ds_def, @@ -319,7 +325,7 @@ int rrd_tune( free(buffer); } } - close(rrd_file->fd); + rrd_close(rrd_file); rrd_free(&rrd); return 0; }