-
- 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;
- opt = getopt_long(argc, argv, "h:i:a:d:r:p:n:w:f:x:y:z:v:b:",
- long_options, &option_index);
- if (opt == EOF)
- break;
-
- optcnt++;
- switch(opt) {
- case 'h':
- if ((matches = sscanf(optarg, DS_NAM_FMT ":%ld",ds_nam,&heartbeat)) != 2){
- rrd_set_error("invalid arguments for heartbeat");
- rrd_free(&rrd);
- fclose(rrd_file);
- return -1;
- }
- if ((ds=ds_match(&rrd,ds_nam))==-1){
- rrd_free(&rrd);
- fclose(rrd_file);
- return -1;
- }
- rrd.ds_def[ds].par[DS_mrhb_cnt].u_cnt = heartbeat;
- break;
+ while (1) {
+ int option_index = 0;
+ int opt;
+ char *old_locale = "";
+
+ opt = getopt_long(argc, argv, "h:i:a:d:r:p:n:w:f:x:y:z:v:b:",
+ long_options, &option_index);
+ if (opt == EOF)
+ break;
+
+ optcnt++;
+ switch (opt) {
+ case 'h':
+ old_locale = setlocale(LC_NUMERIC, "C");
+ if ((matches =
+ sscanf(optarg, DS_NAM_FMT ":%ld", ds_nam,
+ &heartbeat)) != 2) {
+ rrd_set_error("invalid arguments for heartbeat");
+ rrd_free(&rrd);
+ rrd_close(rrd_file);
+ setlocale(LC_NUMERIC, old_locale);
+ return -1;
+ }
+ setlocale(LC_NUMERIC, old_locale);
+ if ((ds = ds_match(&rrd, ds_nam)) == -1) {
+ rrd_free(&rrd);
+ rrd_close(rrd_file);
+ return -1;
+ }
+ rrd.ds_def[ds].par[DS_mrhb_cnt].u_cnt = heartbeat;
+ break;
+
+ case 'i':
+ old_locale = setlocale(LC_NUMERIC, "C");
+ if ((matches =
+ sscanf(optarg, DS_NAM_FMT ":%lf", ds_nam, &min)) < 1) {
+ rrd_set_error("invalid arguments for minimum ds value");
+ rrd_free(&rrd);
+ rrd_close(rrd_file);
+ setlocale(LC_NUMERIC, old_locale);
+ return -1;
+ }
+ setlocale(LC_NUMERIC, old_locale);
+ if ((ds = ds_match(&rrd, ds_nam)) == -1) {
+ rrd_free(&rrd);
+ rrd_close(rrd_file);
+ return -1;
+ }