summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien F. Katz <damien@apache.org>2009-05-24 00:04:36 +0000
committerDamien F. Katz <damien@apache.org>2009-05-24 00:04:36 +0000
commit4aac0f7c6dcd3f3a29cfe5e1bf2bee84b9bae9d5 (patch)
treeda508e7b1ab785f409fc670ade1d94f114264469
parentb5da838ae062ddddba44e1c9d830435d22d8040b (diff)
Added stats tracking for active _changes clients.
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@778072 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/couchdb/couch_httpd_db.erl7
-rw-r--r--src/couchdb/couch_stats_aggregator.erl1
-rw-r--r--src/couchdb/couch_stats_collector.erl9
3 files changed, 11 insertions, 6 deletions
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);