summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: d2ca4b1)
raw | patch | inline | side by side (parent: d2ca4b1)
author | oetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa> | |
Tue, 11 Sep 2007 06:28:15 +0000 (06:28 +0000) | ||
committer | oetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa> | |
Tue, 11 Sep 2007 06:28:15 +0000 (06:28 +0000) |
-- Evan Miller emiller imvu.com
git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk@1203 a5681a0c-68f1-0310-ab6d-d61299d08faa
git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk@1203 a5681a0c-68f1-0310-ab6d-d61299d08faa
index 49db70ec4ca86c33c424cefb90b3ab65b03fc1c6..37eacbeffb43840670ca6b3ee1250055590825f7 100644 (file)
@@ -238,11 +238,11 @@ B<RRA:>I<MHWPREDICT>B<:>I<rows>B<:>I<alpha>B<:>I<beta>B<:>I<seasonal period>[B<:
=item *
-B<RRA:>I<SEASONAL>B<:>I<seasonal period>B<:>I<gamma>B<:>I<rra-num>
+B<RRA:>I<SEASONAL>B<:>I<seasonal period>B<:>I<gamma>B<:>I<rra-num>[B<:smoothing-window=>I<fraction>]
=item *
-B<RRA:>I<DEVSEASONAL>B<:>I<seasonal period>B<:>I<gamma>B<:>I<rra-num>
+B<RRA:>I<DEVSEASONAL>B<:>I<seasonal period>B<:>I<gamma>B<:>I<rra-num>[B<:smoothing-window=>I<fraction>]
=item *
be the same for both. Note that I<gamma> can also be changed via the
B<RRDtool> I<tune> command.
+I<smoothing-window> specifies the fraction of a season that should be
+averaged around each point. By default, the value of I<smoothing-window> is
+0.05, which means each value in SEASONAL and DEVSEASONAL will be occasionally
+replaced by averaging it with its (I<seasonal period>*0.05) nearest neighbors.
+Setting I<smoothing-window> to zero will disable the running-average smoother
+altogether.
+
I<rra-num> provides the links between related B<RRAs>. If HWPREDICT is
specified alone and the other B<RRAs> are created implicitly, then
there is no need to worry about this argument. If B<RRAs> are created
index 5a08394f55ecdb9bd89ab09ef6cf547ed1b55c69..859c14345f407d7c77f6813fc9dd8de8b7071074 100644 (file)
--- a/program/doc/rrdtune.pod
+++ b/program/doc/rrdtune.pod
S<[B<--beta> I<adaption-parameter>]>
S<[B<--gamma> I<adaption-parameter>]>
S<[B<--gamma-deviation> I<adaption-parameter>]>
+S<[B<--smoothing-window> I<fraction-of-season>]>
+S<[B<--smoothing-window-deviation> I<fraction-of-season>]>
S<[B<--aberrant-reset> I<ds-name>]>
=head1 DESCRIPTION
Alter the seasonal deviation adaptation parameter for the DEVSEASONAL
B<RRA>. This parameter must be between 0 and 1.
+=item S<B<--smoothing-window> I<fraction-of-season>>
+
+Alter the size of the smoothing window for the SEASONAL B<RRA>. This must
+be between 0 and 1.
+
+=item S<B<--smoothing-window-deviation> I<fraction-of-season>>
+
+Alter the size of the smoothing window for the DEVSEASONAL B<RRA>. This must
+be between 0 and 1.
+
=item S<B<--aberrant-reset> I<ds-name>>
This option causes the aberrant behavior detection algorithm to reset
index 47d34cb403ad45e72129859a52fd440cc181bd9d..b6dd08f82a0b4e32359aec1e91c9d8a1909256cb 100644 (file)
--- a/program/src/rrd_create.c
+++ b/program/src/rrd_create.c
/* initialize some parameters */
rrd.rra_def[rrd.stat_head->rra_cnt].
par[RRA_seasonal_gamma].u_val = 0.1;
+ rrd.rra_def[rrd.stat_head->rra_cnt].
+ par[RRA_seasonal_smoothing_window].u_val = 0.05;
/* fall through */
case CF_DEVPREDICT:
rrd.rra_def[rrd.stat_head->rra_cnt].
par[RRA_dependent_rra_idx].u_cnt =
atoi(token) - 1;
break;
+ case CF_DEVSEASONAL:
+ case CF_SEASONAL:
+ /* optional smoothing window */
+ if (sscanf(token, "smoothing-window=%lf",
+ &(rrd.rra_def[rrd.stat_head->rra_cnt].
+ par[RRA_seasonal_smoothing_window].u_val))) {
+ strcpy(rrd.stat_head->version, RRD_VERSION); /* smoothing-window causes Version 4 */
+ if (rrd.rra_def[rrd.stat_head->rra_cnt].
+ par[RRA_seasonal_smoothing_window].u_val < 0.0
+ || rrd.rra_def[rrd.stat_head->rra_cnt].
+ par[RRA_seasonal_smoothing_window].u_val > 1.0) {
+ rrd_set_error("Invalid smoothing-window %f: must be between 0 and 1",
+ rrd.rra_def[rrd.stat_head->rra_cnt].
+ par[RRA_seasonal_smoothing_window].u_val);
+ }
+ } else {
+ rrd_set_error("Invalid option %s", token);
+ }
+ break;
case CF_HWPREDICT:
case CF_MHWPREDICT:
/* length of the associated CF_SEASONAL and CF_DEVSEASONAL arrays. */
diff --git a/program/src/rrd_dump.c b/program/src/rrd_dump.c
index dadd34d3a2c2bc32164cedffdf944a20631a6b96..6343e1d01ec665e534bd56fb46307df1c2edcf23 100644 (file)
--- a/program/src/rrd_dump.c
+++ b/program/src/rrd_dump.c
fprintf(out_file,
"\t\t<seasonal_smooth_idx> %lu </seasonal_smooth_idx>\n",
rrd.rra_def[i].par[RRA_seasonal_smooth_idx].u_cnt);
+ if (atoi(rrd.stat_head->version) >= 4) {
+ fprintf(out_file,
+ "\t\t<smoothing_window> %0.10e </smoothing_window>\n",
+ rrd.rra_def[i].par[RRA_seasonal_smoothing_window].u_val);
+ }
fprintf(out_file,
"\t\t<dependent_rra_idx> %lu </dependent_rra_idx>\n",
rrd.rra_def[i].par[RRA_dependent_rra_idx].u_cnt);
index 0d8a9dc3751c099d09e9039bfc9fc430340a5ae0..3eb46ae22a5c4cca5119600f80a92911a99370cc 100644 (file)
--- a/program/src/rrd_format.h
+++ b/program/src/rrd_format.h
enum rra_par_en { RRA_cdp_xff_val = 0, /* what part of the consolidated
* datapoint must be known, to produce a
* valid entry in the rra */
- RRA_hw_alpha,
+ /* CF_HWPREDICT: */
+ RRA_hw_alpha = 1,
/* exponential smoothing parameter for the intercept in
* the Holt-Winters prediction algorithm. */
- RRA_hw_beta,
+ RRA_hw_beta = 2,
/* exponential smoothing parameter for the slope in
* the Holt-Winters prediction algorithm. */
- RRA_dependent_rra_idx,
+
+ RRA_dependent_rra_idx = 3,
/* For CF_HWPREDICT: index of the RRA with the seasonal
* effects of the Holt-Winters algorithm (of type
* CF_SEASONAL).
* Holt-Winters prediction (of type CF_HWPREDICT).
* For CF_FAILURES: index of the CF_DEVSEASONAL array.
* */
- RRA_seasonal_smooth_idx,
- /* For CF_SEASONAL and CF_DEVSEASONAL:
- * an integer between 0 and row_count - 1 which
+
+ /* CF_SEASONAL and CF_DEVSEASONAL: */
+ RRA_seasonal_gamma = 1,
+ /* exponential smoothing parameter for seasonal effects. */
+
+ RRA_seasonal_smoothing_window = 2,
+ /* fraction of the season to include in the running average
+ * smoother */
+
+ /* RRA_dependent_rra_idx = 3, */
+
+ RRA_seasonal_smooth_idx = 4,
+ /* an integer between 0 and row_count - 1 which
* is index in the seasonal cycle for applying
* the period smoother. */
- RRA_failure_threshold,
+
+ /* CF_FAILURES: */
+ RRA_delta_pos = 1, /* confidence bound scaling parameters */
+ RRA_delta_neg = 2,
+ /* RRA_dependent_rra_idx = 3, */
+ RRA_window_len = 4,
+ RRA_failure_threshold = 5,
/* For CF_FAILURES, number of violations within the last
* window required to mark a failure. */
- RRA_seasonal_gamma = RRA_hw_alpha,
- /* exponential smoothing parameter for seasonal effects.
- * */
- RRA_delta_pos = RRA_hw_alpha,
- RRA_delta_neg = RRA_hw_beta,
- /* confidence bound scaling parameters for the
- * the FAILURES RRA. */
- RRA_window_len = RRA_seasonal_smooth_idx
};
/* For CF_FAILURES, the length of the window for measuring
diff --git a/program/src/rrd_hw.c b/program/src/rrd_hw.c
index 98333e2794e356dcff31bf3d882006b3988c14db..e8024121739966fd6e56e3136083b2a83e6d9431 100644 (file)
--- a/program/src/rrd_hw.c
+++ b/program/src/rrd_hw.c
rrd_value_t *working_average;
rrd_value_t *baseline;
- offset = floor(0.025 * row_count);
+ if (atoi(rrd->stat_head->version) >= 4) {
+ offset = floor(rrd->rra_def[rra_idx].
+ par[RRA_seasonal_smoothing_window].
+ u_val / 2 * row_count);
+ } else {
+ offset = floor(0.05 / 2 * row_count);
+ }
+
if (offset == 0)
return 0; /* no smoothing */
diff --git a/program/src/rrd_info.c b/program/src/rrd_info.c
index 3a35d485728b380008e59e39e25a1d0d3692ff95..8f88d6898f68a89b037b35059b86b18d2316e968 100644 (file)
--- a/program/src/rrd_info.c
+++ b/program/src/rrd_info.c
info.u_val = rrd.rra_def[i].par[RRA_seasonal_gamma].u_val;
cd = info_push(cd, sprintf_alloc("rra[%d].gamma", i), RD_I_VAL,
info);
+ if (atoi(rrd.stat_head->version) >= 4) {
+ info.u_val = rrd.rra_def[i].par[RRA_seasonal_smoothing_window].u_val;
+ cd = info_push(cd, sprintf_alloc("rra[%d].smoothing_window", i), RD_I_VAL,
+ info);
+ }
break;
case CF_FAILURES:
info.u_val = rrd.rra_def[i].par[RRA_delta_pos].u_val;
index 3dc8931a28d1286897978212d52c16cd52960298..c301736efaa2251dee8939e66390039f2a50e1f9 100644 (file)
read_tag(&ptr2, "seasonal_smooth_idx", "%lu",
&(rrd->rra_def[rra_index].
par[RRA_seasonal_smooth_idx].u_cnt));
+ if (atoi(rrd->stat_head->version) >= 4) {
+ read_tag(&ptr2, "smoothing_window", "%lf",
+ &(rrd->rra_def[rra_index].
+ par[RRA_seasonal_smoothing_window].u_val));
+ }
read_tag(&ptr2, "dependent_rra_idx", "%lu",
&(rrd->rra_def[rra_index].
par[RRA_dependent_rra_idx].u_cnt));
diff --git a/program/src/rrd_tune.c b/program/src/rrd_tune.c
index 1c72db7d2c9363a952768b71ab613df9cfd62823..36b2bb0b409984c3a0a2a54428ac70c7b62b1490 100644 (file)
--- a/program/src/rrd_tune.c
+++ b/program/src/rrd_tune.c
{"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}
};
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);