This is an automated email from the ASF dual-hosted git repository. nickva pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit d4067c4f9274b93a0f07dda6c5f75ab451858bcd Author: Sam Smith <[email protected]> AuthorDate: Wed Jul 15 15:47:01 2026 +0100 feat(couch): add process_count gauge to query server manager Track the number of active query server processes to provide visibility into resource usage. The gauge is updated when processes spawn/remove. --- src/couch/priv/stats_descriptions.cfg | 4 ++++ src/couch/src/couch_proc_manager.erl | 9 +++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/couch/priv/stats_descriptions.cfg b/src/couch/priv/stats_descriptions.cfg index 17f028782..3497b728b 100644 --- a/src/couch/priv/stats_descriptions.cfg +++ b/src/couch/priv/stats_descriptions.cfg @@ -322,6 +322,10 @@ {type, counter}, {desc, <<"number of acquired external processes">>} ]}. +{[couchdb, query_server, process_count], [ + {type, gauge}, + {desc, <<"number of active query server processes">>} +]}. {[couchdb, query_server, process_starts], [ {type, counter}, {desc, <<"number of OS process starts">>} diff --git a/src/couch/src/couch_proc_manager.erl b/src/couch/src/couch_proc_manager.erl index ea4a76001..a95acc7c0 100644 --- a/src/couch/src/couch_proc_manager.erl +++ b/src/couch/src/couch_proc_manager.erl @@ -141,6 +141,8 @@ init([]) -> ok = configure_language_servers(), + couch_stats:update_gauge([couchdb, query_server, process_count], get_proc_count()), + {ok, #state{ config = get_proc_config(), threshold_ts = timestamp(), @@ -250,6 +252,7 @@ handle_info({'EXIT', Pid, spawn_error}, State) -> % Assert when removing that we always expect the opener to have been there [{Pid, #client{lang = Lang}}] = ets:take(?OPENING, Pid), dec_count(Lang), + couch_stats:update_gauge([couchdb, query_server, process_count], get_proc_count()), ok = flush_waiters(State, Lang), {noreply, State}; handle_info({'EXIT', Pid, Reason}, State) -> @@ -370,7 +373,8 @@ find_proc(Lang, DbPat, DDocKey) when spawn_proc(#client{} = Client) -> Pid = spawn_link(?MODULE, new_proc, [Client]), ets:insert(?OPENING, {Pid, Client}), - inc_count(Client#client.lang). + inc_count(Client#client.lang), + couch_stats:update_gauge([couchdb, query_server, process_count], get_proc_count()). % This instance was spawned without a client to replenish % the untagged pool asynchronously @@ -686,7 +690,8 @@ remove_proc(#proc{pid = Pid} = Proc) -> false -> ok end, - dec_count(Proc#proc.lang). + dec_count(Proc#proc.lang), + couch_stats:update_gauge([couchdb, query_server, process_count], get_proc_count()). flush_waiters(#state{} = State, Lang) -> #state{hard_limit = HardLimit, config = {[_ | _] = Cfg}} = State,
