anchor.diff:          gauge -> fun gauge_update_fun/3;
           counter -> fun counter_update_fun/3;
           event -> fun event_update_fun/3;
  +        {histogram, Size} -> fun(One, Two, Three) -> histogram_update_fun(One, Two, Three, Size) end;
  +        {histogram, Size, NormFun, InverseFun} -> fun(One, Two, Three) -> histogram_normalized_update_fun(One, Two, Three, Size, NormFun, InverseFun) end;
           {timing, _} -> fun timing_update_fun/3;
           {timing_with_hist, _} -> fun timing_with_hist_update_fun/3
       end.
  
positive.code: %%      valid.
  -spec check_config() -> boolean().
  check_config() ->
      config:cfg_is_integer(rrd_timing_hist_size) and
      config:cfg_is_greater_than_equal(rrd_timing_hist_size, 0).
  
  -spec get_timing_hist_size() -> non_neg_integer().
  
negative.code: % gauge: record newest value of a time slot,
  % counter: sum up all values of a time slot,
  % event: record every event (incl. timestamp) in a time slot,
  % histogram: record all values in a time slot using an approximative histogram
  % timing: record time spans, store {sum(x), sum(x^2), count(x), min(x), max(x)}
  % timing_with_hist: record time spans, store {sum(x), sum(x^2), count(x), min(x), max(x), histogram(x)}
  -type timeseries_type() :: gauge | counter | event |
                             {histogram, Size::non_neg_integer()} |
                             {histogram, Size::non_neg_integer(),
                                         NormalizationFun::histogram_normalized:norm_fun(),
                                         InverseFun::histogram_normalized:norm_fun()} |
                             {timing | timing_with_hist, us | ms | s | count | percent}.
  -type fill_policy_type() :: set_undefined | keep_last_value.
  -type time() :: erlang_timestamp().
  -type internal_time() :: non_neg_integer(). % default: micro seconds since Epoch
  