blob: af8ba4e4fcaa4482b67b7af24ab6d54a7ca114cf [file] [log] [blame]
% Licensed under the Apache License, Version 2.0 (the "License"); you may not
% use this file except in compliance with the License. You may obtain a copy of
% the License at
%
% http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
% License for the specific language governing permissions and limitations under
% the License.
-module(couch_replicator_stats).
-record(rep_stats, {
missing_checked = 0,
missing_found = 0,
docs_read = 0,
docs_written = 0,
doc_write_failures = 0
}).
-export([
new/0,
new/1,
get/2,
increment/2,
sum_stats/2
]).
-export([
missing_checked/1,
missing_found/1,
docs_read/1,
docs_written/1,
doc_write_failures/1
]).
new() ->
orddict:new().
new(Initializers) when is_list(Initializers) ->
orddict:from_list(Initializers).
missing_checked(Stats) ->
get(missing_checked, upgrade(Stats)).
missing_found(Stats) ->
get(missing_found, upgrade(Stats)).
docs_read(Stats) ->
get(docs_read, upgrade(Stats)).
docs_written(Stats) ->
get(docs_written, upgrade(Stats)).
doc_write_failures(Stats) ->
get(doc_write_failures, upgrade(Stats)).
get(Field, Stats) ->
case orddict:find(Field, upgrade(Stats)) of
{ok, Value} ->
Value;
error ->
0
end.
increment(Field, Stats) ->
orddict:update_counter(Field, 1, upgrade(Stats)).
sum_stats(S1, S2) ->
orddict:merge(fun(_, V1, V2) -> V1+V2 end, upgrade(S1), upgrade(S2)).
upgrade(#rep_stats{} = Stats) ->
orddict:from_list([
{missing_checked, Stats#rep_stats.missing_checked},
{missing_found, Stats#rep_stats.missing_found},
{docs_read, Stats#rep_stats.docs_read},
{docs_written, Stats#rep_stats.docs_written},
{doc_write_failures, Stats#rep_stats.doc_write_failures}
]);
upgrade(Stats) ->
Stats.