Calculate average as well as average rate.

This commit is contained in:
Simon MacMullen 2013-02-05 15:56:03 +00:00
parent 0d6f2a51bb
commit 1548b2e0b7
3 changed files with 17 additions and 11 deletions

View File

@ -790,10 +790,13 @@ format_sample_details(Range, #stats{diffs = Diffs, base = Base}, Interval) ->
Part1 = [{rate, Rate},
{interval, Interval},
{samples, Samples}],
Part2 = case length(Samples) > 1 of
Length = length(Samples),
Part2 = case Length > 1 of
true -> [{sample, S2}, {timestamp, T2}] = hd(Samples),
[{sample, S1}, {timestamp, T1}] = lists:last(Samples),
[{avg_rate, (S2 - S1) * 1000 / (T2 - T1)}];
Total = lists:sum([pget(sample, I) || I <- Samples]),
[{avg_rate, (S2 - S1) * 1000 / (T2 - T1)},
{avg, Total / Length}];
false -> []
end,
{Part1 ++ Part2, Count}.

View File

@ -216,15 +216,17 @@ get_ch(Name, Range) -> rabbit_mgmt_db:get_channel(a2b(Name), Range).
get_overview(Range) -> rabbit_mgmt_db:get_overview(Range).
get_overview_q(Range) -> pget(queue_totals, get_overview(Range)).
details(R, AR, L) ->
details(R, AR, A, L) ->
[{rate, R},
{interval, 5000},
{samples, [[{sample, S}, {timestamp, T * 1000}] || {T, S} <- L]},
{avg_rate, AR}].
{avg_rate, AR},
{avg, A}].
simple_details(Thing, N) ->
[{Thing, N},
{atom_suffix(Thing, "_details"), details(0, 0.0, [{1, N}, {0, N}])}].
{atom_suffix(Thing, "_details"),
details(0, 0.0, N * 1.0, [{1, N}, {0, N}])}].
atom_suffix(Atom, Suffix) ->
list_to_atom(atom_to_list(Atom) ++ Suffix).

View File

@ -59,20 +59,20 @@ format_sample_details_test() ->
%% Just three samples, all of which we format. Note the
%% instantaneous rate is taken from the penultimate sample.
T({10, 30, 10}, {[{10, 10}, {20, 20}, {30, 30}], 1},
{[{30, 61}, {20, 31}, {10, 11}], 2.0, 10, 2.5, 61}),
{[{30, 61}, {20, 31}, {10, 11}], 2.0, 10, 2.5, 103/3, 61}),
%% Skip over the second (and ditto).
T({10, 30, 20}, {[{10, 10}, {20, 20}, {30, 30}], 1},
{[{30, 61}, {10, 11}], 2.0, 10, 2.5, 61}),
{[{30, 61}, {10, 11}], 2.0, 10, 2.5, 36.0, 61}),
%% Skip over some and invent some. Note that the instantaneous
%% rate drops to 0 since the last event is now in the past.
T({0, 40, 20}, {[{10, 10}, {20, 20}, {30, 30}], 1},
{[{40, 61}, {20, 31}, {0, 1}], 0, 10, 1.5, 61}),
{[{40, 61}, {20, 31}, {0, 1}], 0, 10, 1.5, 31.0, 61}),
%% And a case where the range starts after the samples
T({20, 40, 10}, {[{10, 10}, {20, 20}, {30, 30}], 1},
{[{40, 61}, {30, 61}, {20, 31}], 0, 10, 1.5, 61}),
{[{40, 61}, {30, 61}, {20, 31}], 0, 10, 1.5, 51.0, 61}),
%% A single sample - which should lead to some bits not getting generated
T({10, 10, 10}, {[{10, 10}, {20, 20}, {30, 30}], 1},
@ -106,11 +106,12 @@ format({Samples, Rate, Interval, Count}) ->
{samples, format_samples(Samples)}],
Count};
format({Samples, Rate, Interval, AvgRate, Count}) ->
format({Samples, Rate, Interval, AvgRate, Avg, Count}) ->
{[{rate, Rate},
{interval, Interval * 1000},
{samples, format_samples(Samples)},
{avg_rate, AvgRate}],
{avg_rate, AvgRate},
{avg, Avg}],
Count}.
format_samples(Samples) ->