You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ch...@apache.org on 2022/10/31 21:42:47 UTC

[couchdb] branch add-measures-logging created (now 08c2f98e6)

This is an automated email from the ASF dual-hosted git repository.

chewbranca pushed a change to branch add-measures-logging
in repository https://gitbox.apache.org/repos/asf/couchdb.git


      at 08c2f98e6 Log request measures in dedicated log channel

This branch includes the following new commits:

     new 08c2f98e6 Log request measures in dedicated log channel

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[couchdb] 01/01: Log request measures in dedicated log channel

Posted by ch...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

chewbranca pushed a commit to branch add-measures-logging
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 08c2f98e64c2fbec7a6a7f6b0bbd96ebf98b3a19
Author: Russell Branca <ch...@apache.org>
AuthorDate: Mon Oct 31 14:36:59 2022 -0700

    Log request measures in dedicated log channel
---
 src/chttpd/src/chttpd_db.erl              |  1 +
 src/couch_log/priv/stats_descriptions.cfg |  4 ++++
 src/couch_log/src/couch_log.erl           |  4 ++++
 src/couch_log/src/couch_log_config.erl    | 16 ++++++++++++++++
 src/couch_log/src/couch_log_util.erl      | 10 ++++++++++
 src/mango/src/mango_cursor_view.erl       |  1 +
 src/mango/src/mango_execution_stats.erl   | 10 ++++++++++
 7 files changed, 46 insertions(+)

diff --git a/src/chttpd/src/chttpd_db.erl b/src/chttpd/src/chttpd_db.erl
index 748b356fd..9e8f06e40 100644
--- a/src/chttpd/src/chttpd_db.erl
+++ b/src/chttpd/src/chttpd_db.erl
@@ -103,6 +103,7 @@ handle_request(#httpd{path_parts = [DbName | RestParts], method = Method} = Req)
             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 31e41614b..73acb9536 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 b8a1ca4bd..42f7944c4 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 @@ alert(Fmt, Args) -> log(alert, Fmt, Args).
 -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 925973178..e85c34784 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 @@ reconfigure() ->
 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 @@ entries() ->
         {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 @@ transform(strip_last_msg, "false") ->
     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 8be11e12d..abcdcb774 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(info) -> 2;
 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("info") -> 2;
 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("notice") -> notice;
 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 9202ce071..9bca19cee 100644
--- a/src/mango/src/mango_cursor_view.erl
+++ b/src/mango/src/mango_cursor_view.erl
@@ -159,6 +159,7 @@ execute(#cursor{db = Db, index = Idx, execution_stats = Stats} = Cursor0, UserFu
                     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 0db3edf5f..7d91d08f9 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 @@ log_end(Stats) ->
 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 @@ maybe_add_stats(Opts, UserFun, Stats0, UserAcc) ->
         _ ->
             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))]).