Log request measures in dedicated log channel
diff --git a/src/chttpd/src/chttpd_db.erl b/src/chttpd/src/chttpd_db.erl
index 748b356..9e8f06e 100644
--- a/src/chttpd/src/chttpd_db.erl
+++ b/src/chttpd/src/chttpd_db.erl
@@ -103,6 +103,7 @@
do_db_req(Req, fun db_req/2);
{_, [SecondPart | _]} ->
Handler = chttpd_handlers:db_handler(SecondPart, fun db_req/2),
+ io:format("HANDLING {~p} WITH: ~p~n", [SecondPart, Handler]),
do_db_req(Req, Handler)
end.
diff --git a/src/couch_log/priv/stats_descriptions.cfg b/src/couch_log/priv/stats_descriptions.cfg
index 31e4161..73acb95 100644
--- a/src/couch_log/priv/stats_descriptions.cfg
+++ b/src/couch_log/priv/stats_descriptions.cfg
@@ -46,3 +46,7 @@
{type, counter},
{desc, <<"number of logged warning messages">>}
]}.
+{[couch_log, level, measures], [
+ {type, counter},
+ {desc, <<"number of logged measures messages">>}
+]}.
diff --git a/src/couch_log/src/couch_log.erl b/src/couch_log/src/couch_log.erl
index b8a1ca4..42f7944 100644
--- a/src/couch_log/src/couch_log.erl
+++ b/src/couch_log/src/couch_log.erl
@@ -21,6 +21,7 @@
critical/2,
alert/2,
emergency/2,
+ measures/2,
set_level/1
]).
@@ -49,6 +50,9 @@
-spec emergency(string(), list()) -> ok.
emergency(Fmt, Args) -> log(emergency, Fmt, Args).
+-spec measures(string(), list()) -> ok.
+measures(Fmt, Args) -> log(measures, Fmt, Args).
+
-spec set_level(atom() | string() | integer()) -> true.
set_level(Level) ->
config:set("log", "level", couch_log_util:level_to_string(Level)).
diff --git a/src/couch_log/src/couch_log_config.erl b/src/couch_log/src/couch_log_config.erl
index 9259731..e85c347 100644
--- a/src/couch_log/src/couch_log_config.erl
+++ b/src/couch_log/src/couch_log_config.erl
@@ -17,6 +17,7 @@
-export([
init/0,
reconfigure/0,
+ should_log_measures/1,
get/1
]).
@@ -38,6 +39,14 @@
get(Key) ->
?MOD_NAME:get(Key).
+-spec should_log_measures(term()) -> boolean().
+should_log_measures(_LogEntry) ->
+ case ?MODULE:get(should_log_measures) of
+ true -> true;
+ false -> false;
+ _Other -> false
+ end.
+
-spec entries() -> [string()].
entries() ->
[
@@ -45,6 +54,7 @@
{level_int, "level", "info"},
{max_message_size, "max_message_size", "16000"},
{strip_last_msg, "strip_last_msg", "true"},
+ {should_log_measures, "should_log_measures", "true"},
{filter_fields, "filter_fields", "[pid, registered_name, error_info, messages]"}
].
@@ -101,6 +111,12 @@
false;
transform(strip_last_msg, _) ->
true;
+transform(should_log_measures, "false") ->
+ false;
+transform(should_log_measures, "true") ->
+ true;
+transform(should_log_measures, _) ->
+ false;
transform(filter_fields, FieldsStr) ->
Default = [pid, registered_name, error_info, messages],
case parse_term(FieldsStr) of
diff --git a/src/couch_log/src/couch_log_util.erl b/src/couch_log/src/couch_log_util.erl
index 8be11e1..abcdcb7 100644
--- a/src/couch_log/src/couch_log_util.erl
+++ b/src/couch_log/src/couch_log_util.erl
@@ -27,6 +27,13 @@
-include("couch_log.hrl").
-spec should_log(#log_entry{} | atom()) -> boolean().
+should_log(#log_entry{level = measures = Level}=Entry) ->
+ case couch_log_config:should_log_measures(Entry) of
+ true ->
+ true;
+ false ->
+ should_log(Level)
+ end;
should_log(#log_entry{level = Level}) ->
should_log(Level);
should_log(Level) ->
@@ -53,6 +60,7 @@
level_to_integer(notice) -> 3;
level_to_integer(warning) -> 4;
level_to_integer(warn) -> 4;
+level_to_integer(measures) -> 4;
level_to_integer(error) -> 5;
level_to_integer(err) -> 5;
level_to_integer(critical) -> 6;
@@ -66,6 +74,7 @@
level_to_integer("notice") -> 3;
level_to_integer("warning") -> 4;
level_to_integer("warn") -> 4;
+level_to_integer("measures") -> 4;
level_to_integer("error") -> 5;
level_to_integer("err") -> 5;
level_to_integer("critical") -> 6;
@@ -95,6 +104,7 @@
level_to_atom("4") -> warning;
level_to_atom("warning") -> warning;
level_to_atom("warn") -> warning;
+level_to_atom("measures") -> measures;
level_to_atom("5") -> error;
level_to_atom("error") -> error;
level_to_atom("err") -> error;
diff --git a/src/mango/src/mango_cursor_view.erl b/src/mango/src/mango_cursor_view.erl
index 9202ce0..9bca19c 100644
--- a/src/mango/src/mango_cursor_view.erl
+++ b/src/mango/src/mango_cursor_view.erl
@@ -159,6 +159,7 @@
Arg = {add_key, bookmark, NewBookmark},
{_Go, FinalUserAcc} = UserFun(Arg, LastCursor#cursor.user_acc),
Stats0 = LastCursor#cursor.execution_stats,
+ mango_execution_stats:log_stats(Stats0),
FinalUserAcc0 = mango_execution_stats:maybe_add_stats(
Opts, UserFun, Stats0, FinalUserAcc
),
diff --git a/src/mango/src/mango_execution_stats.erl b/src/mango/src/mango_execution_stats.erl
index 0db3edf..7d91d08 100644
--- a/src/mango/src/mango_execution_stats.erl
+++ b/src/mango/src/mango_execution_stats.erl
@@ -21,6 +21,7 @@
incr_results_returned/1,
log_start/1,
log_end/1,
+ log_stats/1,
maybe_add_stats/4
]).
@@ -74,6 +75,9 @@
maybe_add_stats(Opts, UserFun, Stats0, UserAcc) ->
Stats1 = log_end(Stats0),
couch_stats:update_histogram([mango, query_time], Stats1#execution_stats.executionTimeMs),
+ %% TODO: validate rows/reads assignments
+ chttpd_stats:incr_rows(Stats1#execution_stats.totalDocsExamined),
+ chttpd_stats:incr_reads(Stats1#execution_stats.totalQuorumDocsExamined),
case couch_util:get_value(execution_stats, Opts) of
true ->
@@ -84,3 +88,9 @@
_ ->
UserAcc
end.
+
+log_stats(Stats) ->
+ {JStats0} = mango_execution_stats:to_json(Stats),
+ Nonce = list_to_binary(couch_log_util:get_msg_id()),
+ JStats = {[{<<"nonce">>, Nonce} | JStats0]},
+ couch_log:measures("GOT MANGO EXEC STATS: ~s", [binary_to_list(jiffy:encode(JStats))]).