diff options
Diffstat (limited to 'src/mango/src/mango_execution_stats.erl')
-rw-r--r-- | src/mango/src/mango_execution_stats.erl | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/src/mango/src/mango_execution_stats.erl b/src/mango/src/mango_execution_stats.erl index 66104e89e..350b58bda 100644 --- a/src/mango/src/mango_execution_stats.erl +++ b/src/mango/src/mango_execution_stats.erl @@ -15,7 +15,7 @@ -export([ to_json/1, to_map/1, - incr_keys_examined/1, + incr_keys_examined/2, incr_docs_examined/1, incr_docs_examined/2, incr_quorum_docs_examined/1, @@ -23,11 +23,18 @@ log_start/1, log_end/1, log_stats/1, - maybe_add_stats/4 + maybe_add_stats/4, + shard_init/0, + shard_incr_keys_examined/0, + shard_incr_docs_examined/0, + shard_get_stats/0 ]). +-include("mango.hrl"). -include("mango_cursor.hrl"). +-define(SHARD_STATS_KEY, mango_shard_execution_stats). + to_json(Stats) -> {[ {total_keys_examined, Stats#execution_stats.totalKeysExamined}, @@ -46,9 +53,9 @@ to_map(Stats) -> execution_time_ms => Stats#execution_stats.executionTimeMs }. -incr_keys_examined(Stats) -> +incr_keys_examined(Stats, N) -> Stats#execution_stats{ - totalKeysExamined = Stats#execution_stats.totalKeysExamined + 1 + totalKeysExamined = Stats#execution_stats.totalKeysExamined + N }. incr_docs_examined(Stats) -> @@ -106,3 +113,30 @@ log_stats(Stats) -> Nonce = list_to_binary(couch_log_util:get_msg_id()), MStats1 = MStats0#{nonce => Nonce}, couch_log:report("mango-stats", MStats1). + +-spec shard_init() -> any(). +shard_init() -> + InitialState = #{docs_examined => 0, keys_examined => 0}, + put(?SHARD_STATS_KEY, InitialState). + +-spec shard_incr_keys_examined() -> any(). +shard_incr_keys_examined() -> + incr(keys_examined). + +-spec shard_incr_docs_examined() -> any(). +shard_incr_docs_examined() -> + incr(docs_examined). + +-spec incr(atom()) -> any(). +incr(Key) -> + case get(?SHARD_STATS_KEY) of + #{} = Stats0 -> + Stats = maps:update_with(Key, fun(X) -> X + 1 end, Stats0), + put(?SHARD_STATS_KEY, Stats); + _ -> + ok + end. + +-spec shard_get_stats() -> shard_stats_v2(). +shard_get_stats() -> + get(?SHARD_STATS_KEY). |