This is an automated email from the ASF dual-hosted git repository. iilyak pushed a commit to branch couch-stats-resource-tracker-v3-rebase-http-4 in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit bfcad8e0479a389db8e6ea6d74c1b48c2bc07183 Author: ILYA Khlopotov <[email protected]> AuthorDate: Wed Jun 25 07:48:52 2025 -0700 Support more key types in csrt_entry:key/1 --- src/couch_stats/src/csrt_entry.erl | 66 +++++++++++++++++++++++++++++--------- 1 file changed, 50 insertions(+), 16 deletions(-) diff --git a/src/couch_stats/src/csrt_entry.erl b/src/couch_stats/src/csrt_entry.erl index 3b1cf3f50..61949c65f 100644 --- a/src/couch_stats/src/csrt_entry.erl +++ b/src/couch_stats/src/csrt_entry.erl @@ -40,21 +40,55 @@ value(#rctx{get_kp_node = Val}, get_kp_node) -> Val; value(#rctx{started_at = Val}, started_at) -> Val; value(#rctx{updated_at = Val}, updated_at) -> Val. --spec key(BinKey :: binary() | string()) -> Key :: rctx_field() +-spec key(BinKey :: binary() | string() | atom()) -> Key :: rctx_field() | throw({bad_request, Reason :: binary()}). -key(<<"pid_ref">>) -> pid_ref; -key(<<"nonce">>) -> nonce; -key(<<"type">>) -> type; -key(<<"dbname">>) -> dbname; -key(<<"username">>) -> username; -key(<<"db_open">>) -> db_open; -key(<<"docs_read">>) -> docs_read; -key(<<"rows_read">>) -> rows_read; -key(<<"changes_returned">>) -> changes_returned; -key(<<"ioq_calls">>) -> ioq_calls; -key(<<"js_filter">>) -> js_filter; -key(<<"js_filtered_docs">>) -> js_filtered_docs; -key(<<"get_kv_node">>) -> get_kv_node; -key(<<"get_kp_node">>) -> get_kp_node; -key(Other) when is_binary(Other) -> throw({bad_request, <<"Invalid key '", Other/binary, "'">>}). +key(Key) when is_atom(Key) -> + key_from_atom(Key); +key(Key) when is_binary(Key) -> + key_from_binary(Key); +key(Key) when is_list(Key) -> + case key_from_binary(list_to_binary(Key)) of + {error, {invalid_key, _Key}} -> + {error, {invalid_key, Key}}; + Res -> + Res + end; +key(Other) -> + key_error(Other). + +key_from_atom(pid_ref) -> pid_ref; +key_from_atom(nonce) -> nonce; +key_from_atom(type) -> type; +key_from_atom(dbname) -> dbname; +key_from_atom(username) -> username; +key_from_atom(db_open) -> db_open; +key_from_atom(docs_read) -> docs_read; +key_from_atom(rows_read) -> rows_read; +key_from_atom(changes_returned) -> changes_returned; +key_from_atom(ioq_calls) -> ioq_calls; +key_from_atom(js_filter) -> js_filter; +key_from_atom(js_filtered_docs) -> js_filtered_docs; +key_from_atom(get_kv_node) -> get_kv_node; +key_from_atom(get_kp_node) -> get_kp_node; +key_from_atom(Other) -> key_error(Other). + +key_from_binary(<<"pid_ref">>) -> pid_ref; +key_from_binary(<<"nonce">>) -> nonce; +key_from_binary(<<"type">>) -> type; +key_from_binary(<<"dbname">>) -> dbname; +key_from_binary(<<"username">>) -> username; +key_from_binary(<<"db_open">>) -> db_open; +key_from_binary(<<"docs_read">>) -> docs_read; +key_from_binary(<<"rows_read">>) -> rows_read; +key_from_binary(<<"changes_returned">>) -> changes_returned; +key_from_binary(<<"ioq_calls">>) -> ioq_calls; +key_from_binary(<<"js_filter">>) -> js_filter; +key_from_binary(<<"js_filtered_docs">>) -> js_filtered_docs; +key_from_binary(<<"get_kv_node">>) -> get_kv_node; +key_from_binary(<<"get_kp_node">>) -> get_kp_node; +key_from_binary(Other) -> key_error(Other). + +key_error(Key) -> + {error, {invalid_key, Key}}. +
