prepare for the release of rrdtool-1.3.0
[rrdtool.git] / src / rrd_tune.c
index f5bea46..3fa33d9 100644 (file)
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * RRDtool 1.2.23  Copyright by Tobi Oetiker, 1997-2007
+ * RRDtool 1.3.0  Copyright by Tobi Oetiker, 1997-2008
  *****************************************************************************
  * change header parameters of an rrd
  *****************************************************************************
@@ -88,6 +88,8 @@ int rrd_tune(
         {"beta", required_argument, 0, 'y'},
         {"gamma", required_argument, 0, 'z'},
         {"gamma-deviation", required_argument, 0, 'v'},
+        {"smoothing-window", required_argument, 0, 's'},
+        {"smoothing-window-deviation", required_argument, 0, 'S'},
         {"aberrant-reset", required_argument, 0, 'b'},
         {0, 0, 0, 0}
     };
@@ -105,7 +107,8 @@ int rrd_tune(
     while (1) {
         int       option_index = 0;
         int       opt;
-        char *old_locale = "";
+        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)
@@ -114,17 +117,17 @@ int rrd_tune(
         optcnt++;
         switch (opt) {
         case 'h':
-            old_locale = setlocale(LC_NUMERIC,"C");
+            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);
+                setlocale(LC_NUMERIC, old_locale);
                 return -1;
             }
-            setlocale(LC_NUMERIC,old_locale);
+            setlocale(LC_NUMERIC, old_locale);
             if ((ds = ds_match(&rrd, ds_nam)) == -1) {
                 rrd_free(&rrd);
                 rrd_close(rrd_file);
@@ -134,16 +137,16 @@ int rrd_tune(
             break;
 
         case 'i':
-            old_locale = setlocale(LC_NUMERIC,"C");
+            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);
+                setlocale(LC_NUMERIC, old_locale);
                 return -1;
             }
-            setlocale(LC_NUMERIC,old_locale);
+            setlocale(LC_NUMERIC, old_locale);
             if ((ds = ds_match(&rrd, ds_nam)) == -1) {
                 rrd_free(&rrd);
                 rrd_close(rrd_file);
@@ -156,16 +159,16 @@ int rrd_tune(
             break;
 
         case 'a':
-            old_locale = setlocale(LC_NUMERIC,"C");
+            old_locale = setlocale(LC_NUMERIC, "C");
             if ((matches =
                  sscanf(optarg, DS_NAM_FMT ":%lf", ds_nam, &max)) < 1) {
                 rrd_set_error("invalid arguments for maximum ds value");
                 rrd_free(&rrd);
                 rrd_close(rrd_file);
-                setlocale(LC_NUMERIC,old_locale);
+                setlocale(LC_NUMERIC, old_locale);
                 return -1;
             }
-            setlocale(LC_NUMERIC,old_locale);
+            setlocale(LC_NUMERIC, old_locale);
             if ((ds = ds_match(&rrd, ds_nam)) == -1) {
                 rrd_free(&rrd);
                 rrd_close(rrd_file);
@@ -194,15 +197,17 @@ int rrd_tune(
                 rrd_close(rrd_file);
                 return -1;
             }
-            strncpy(rrd.ds_def[ds].dst, dst, DST_SIZE - 1);
-            rrd.ds_def[ds].dst[DST_SIZE - 1] = '\0';
-
-            rrd.pdp_prep[ds].last_ds[0] = 'U';
-            rrd.pdp_prep[ds].last_ds[1] = 'N';
-            rrd.pdp_prep[ds].last_ds[2] = 'K';
-            rrd.pdp_prep[ds].last_ds[3] = 'N';
-            rrd.pdp_prep[ds].last_ds[4] = '\0';
+            /* only reset when something is changed */
+            if (strncmp(rrd.ds_def[ds].dst, dst, DST_SIZE - 1) != 0) {
+                strncpy(rrd.ds_def[ds].dst, dst, DST_SIZE - 1);
+                rrd.ds_def[ds].dst[DST_SIZE - 1] = '\0';
 
+                rrd.pdp_prep[ds].last_ds[0] = 'U';
+                rrd.pdp_prep[ds].last_ds[1] = 'N';
+                rrd.pdp_prep[ds].last_ds[2] = 'K';
+                rrd.pdp_prep[ds].last_ds[3] = 'N';
+                rrd.pdp_prep[ds].last_ds[4] = '\0';
+            }
             break;
         case 'r':
             if ((matches =
@@ -295,6 +300,23 @@ int rrd_tune(
                 return -1;
             }
             break;
+        case 's':
+            strcpy(rrd.stat_head->version, RRD_VERSION);    /* smoothing_window causes Version 4 */
+            if (set_hwarg
+                (&rrd, CF_SEASONAL, RRA_seasonal_smoothing_window, optarg)) {
+                rrd_free(&rrd);
+                return -1;
+            }
+            break;
+        case 'S':
+            strcpy(rrd.stat_head->version, RRD_VERSION);    /* smoothing_window causes Version 4 */
+            if (set_hwarg
+                (&rrd, CF_DEVSEASONAL, RRA_seasonal_smoothing_window,
+                 optarg)) {
+                rrd_free(&rrd);
+                return -1;
+            }
+            break;
         case '?':
             if (optopt != 0)
                 rrd_set_error("unknown option '%c'", optopt);