From 4aac0f7c6dcd3f3a29cfe5e1bf2bee84b9bae9d5 Mon Sep 17 00:00:00 2001 From: "Damien F. Katz" Date: Sun, 24 May 2009 00:04:36 +0000 Subject: Added stats tracking for active _changes clients. git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@778072 13f79535-47bb-0310-9956-ffa450edef68 --- src/couchdb/couch_httpd_db.erl | 7 +++++-- src/couchdb/couch_stats_aggregator.erl | 1 + src/couchdb/couch_stats_collector.erl | 9 +++++---- 3 files changed, 11 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/couchdb/couch_httpd_db.erl b/src/couchdb/couch_httpd_db.erl index 04f178d5..03cba11e 100644 --- a/src/couchdb/couch_httpd_db.erl +++ b/src/couchdb/couch_httpd_db.erl @@ -51,18 +51,21 @@ handle_changes_req(#httpd{method='GET',path_parts=[DbName|_]}=Req, Db) -> case couch_httpd:qs_value(Req, "continuous", "false") of "true" -> Self = self(), - Notify = couch_db_update_notifier:start_link( + {ok, Notify} = couch_db_update_notifier:start_link( fun({_, DbName0}) when DbName0 == DbName -> Self ! db_updated; (_) -> ok end), + couch_stats_collector:track_process_count(Self, + {httpd, clients_requesting_changes}), try keep_sending_changes(Req, Resp, Db, StartSeq, <<"">>) after - catch couch_db_update_notifier:stop(Notify), + couch_db_update_notifier:stop(Notify), wait_db_updated(0) % clean out any remaining update messages end; + "false" -> {ok, {LastSeq, _Prepend}} = send_changes(Req, Resp, Db, StartSeq, <<"">>), diff --git a/src/couchdb/couch_stats_aggregator.erl b/src/couchdb/couch_stats_aggregator.erl index bc37ab96..9aa3e468 100644 --- a/src/couchdb/couch_stats_aggregator.erl +++ b/src/couchdb/couch_stats_aggregator.erl @@ -309,6 +309,7 @@ init_descriptions() -> ets:insert(?MODULE, {{httpd, requests}, <<"number of HTTP requests">>}), ets:insert(?MODULE, {{httpd, temporary_view_reads}, <<"number of temporary view reads">>}), ets:insert(?MODULE, {{httpd, view_reads}, <<"number of view reads">>}), + ets:insert(?MODULE, {{httpd, clients_requesting_changes}, <<"Number of clients currently requesting continuous _changes">>}), ets:insert(?MODULE, {{httpd_request_methods, 'COPY'}, <<"number of HTTP COPY requests">>}), ets:insert(?MODULE, {{httpd_request_methods, 'DELETE'}, <<"number of HTTP DELETE requests">>}), diff --git a/src/couchdb/couch_stats_collector.erl b/src/couchdb/couch_stats_collector.erl index ad5e9e9a..9139f6cb 100644 --- a/src/couchdb/couch_stats_collector.erl +++ b/src/couchdb/couch_stats_collector.erl @@ -24,7 +24,7 @@ -export([start/0, stop/0, get/1, increment/1, decrement/1, - track_process_count/1, + track_process_count/1, track_process_count/2, record/2, clear/1, all/0, all/1]). @@ -87,14 +87,15 @@ all(Type) -> absolute -> ets:tab2list(?ABSOLUTE_VALUE_COUNTER_TABLE) end. - track_process_count(Stat) -> + track_process_count(self(), Stat). + +track_process_count(Pid, Stat) -> case (catch couch_stats_collector:increment(Stat)) of ok -> - Self = self(), spawn( fun() -> - erlang:monitor(process, Self), + erlang:monitor(process, Pid), receive {'DOWN', _, _, _, _} -> ok end, couch_stats_collector:decrement(Stat) end); -- cgit v1.2.3