From 894b8a95e88c786f2c03eb6db4d44b9212646113 Mon Sep 17 00:00:00 2001 From: Jan Lehnardt Date: Fri, 27 Feb 2009 16:44:53 +0000 Subject: - group HTTP method stats into httpd_requests_methods as per Christopher Lenz's suggestion - renamed http_status_codes to httpd_status_codes - better internal variable naming - remove comments that were leftovers from earlier refactoring git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@748582 13f79535-47bb-0310-9956-ffa450edef68 --- src/couchdb/couch_httpd.erl | 7 ++-- src/couchdb/couch_httpd_db.erl | 9 ----- src/couchdb/couch_stats.hrl | 2 +- src/couchdb/couch_stats_aggregator.erl | 65 +++++++++++++++++----------------- 4 files changed, 37 insertions(+), 46 deletions(-) (limited to 'src/couchdb') diff --git a/src/couchdb/couch_httpd.erl b/src/couchdb/couch_httpd.erl index 3365e88c..b8b80489 100644 --- a/src/couchdb/couch_httpd.erl +++ b/src/couchdb/couch_httpd.erl @@ -176,8 +176,7 @@ handle_request(MochiReq, UrlHandlers, DbUrlHandlers) -> {ok, Resp}. increment_method_stats(Method) -> - CounterName = list_to_atom(string:to_lower(atom_to_list(Method)) ++ "_requests"), - couch_stats_collector:increment({httpd, CounterName}). + couch_stats_collector:increment({httpd_request_methods, Method}). special_test_authentication_handler(Req) -> case header_value(Req, "WWW-Authenticate") of @@ -338,7 +337,7 @@ basic_username_pw(Req) -> start_chunked_response(#httpd{mochi_req=MochiReq}, Code, Headers) -> - couch_stats_collector:increment({http_status_codes, Code}), + couch_stats_collector:increment({httpd_status_codes, Code}), {ok, MochiReq:respond({Code, Headers ++ server_header(), chunked})}. send_chunk(Resp, Data) -> @@ -346,7 +345,7 @@ send_chunk(Resp, Data) -> {ok, Resp}. send_response(#httpd{mochi_req=MochiReq}, Code, Headers, Body) -> - couch_stats_collector:increment({http_status_codes, Code}), + couch_stats_collector:increment({httpd_status_codes, Code}), if Code >= 400 -> ?LOG_DEBUG("HTTPd ~p error response:~n ~s", [Code, Body]); true -> ok diff --git a/src/couchdb/couch_httpd_db.erl b/src/couchdb/couch_httpd_db.erl index 53eff650..524b52b4 100644 --- a/src/couchdb/couch_httpd_db.erl +++ b/src/couchdb/couch_httpd_db.erl @@ -80,7 +80,6 @@ db_req(#httpd{method='POST',path_parts=[DbName]}=Req, Db) -> Doc = couch_doc:from_json_obj(couch_httpd:json_body(Req)), DocId = couch_util:new_uuid(), {ok, NewRev} = couch_db:update_doc(Db, Doc#doc{id=DocId, revs=[]}, []), - % couch_stats_collector:increment({httpd, document_creates}), DocUrl = absolute_uri(Req, binary_to_list(<<"/",DbName/binary,"/",DocId/binary>>)), send_json(Req, 201, [{"Location", DocUrl}], {[ @@ -379,7 +378,6 @@ db_doc_req(#httpd{method='DELETE'}=Req, Db, DocId) -> couch_httpd:send_error(Req, 409, <<"missing_rev">>, <<"Document rev/etag must be specified to delete">>); RevToDelete -> - % couch_stats_collector:increment({httpd, document_deletes}), {ok, NewRev} = couch_db:delete_doc(Db, DocId, [RevToDelete]), send_json(Req, 200, {[ {ok, true}, @@ -394,7 +392,6 @@ db_doc_req(#httpd{method='GET'}=Req, Db, DocId) -> open_revs = Revs, options = Options } = parse_doc_query(Req), - % couch_stats_collector:increment({httpd, document_reads}), case Revs of [] -> Doc = couch_doc_open(Db, DocId, Rev, Options), @@ -471,10 +468,8 @@ db_doc_req(#httpd{method='PUT'}=Req, Db, DocId) -> end, case extract_header_rev(Req, ExplicitRev) of missing_rev -> - % couch_stats_collector:increment({httpd, document_creates}), Revs = []; Rev -> - % couch_stats_collector:increment({httpd, document_updates}), Revs = [Rev] end, {ok, NewRev} = couch_db:update_doc(Db, Doc#doc{id=DocId, revs=Revs}, Options), @@ -498,7 +493,6 @@ db_doc_req(#httpd{method='COPY'}=Req, Db, SourceDocId) -> % save new doc {ok, NewTargetRev} = couch_db:update_doc(Db, Doc#doc{id=TargetDocId, revs=TargetRev}, []), - % couch_stats_collector:increment({httpd, document_copies}), send_json(Req, 201, [{"Etag", "\"" ++ binary_to_list(NewTargetRev) ++ "\""}], {[ {ok, true}, @@ -525,7 +519,6 @@ db_doc_req(#httpd{method='MOVE'}=Req, Db, SourceDocId) -> #doc{id=SourceDocId, revs=[SourceRev], deleted=true} ], {ok, ResultRevs} = couch_db:update_docs(Db, Docs, []), - % couch_stats_collector:increment({httpd, document_moves}), DocResults = lists:zipwith( fun(FDoc, NewRev) -> @@ -629,10 +622,8 @@ db_attachment_req(#httpd{method=Method}=Req, Db, DocId, FileNameParts) Doc = case extract_header_rev(Req, couch_httpd:qs_value(Req, "rev")) of missing_rev -> % make the new doc - % couch_stats_collector:increment({httpd, document_creates}), #doc{id=DocId}; Rev -> - % couch_stats_collector:increment({httpd, document_updates}), case couch_db:open_doc_revs(Db, DocId, [Rev], []) of {ok, [{ok, Doc0}]} -> Doc0#doc{revs=[Rev]}; {ok, [Error]} -> throw(Error) diff --git a/src/couchdb/couch_stats.hrl b/src/couchdb/couch_stats.hrl index 47a9a86f..a08f6401 100644 --- a/src/couchdb/couch_stats.hrl +++ b/src/couchdb/couch_stats.hrl @@ -17,6 +17,6 @@ variance = 0.0, stddev = 0.0, count = 0, - last = 0, + current = 0, description }). diff --git a/src/couchdb/couch_stats_aggregator.erl b/src/couchdb/couch_stats_aggregator.erl index 42e9d431..4cdcb4a2 100644 --- a/src/couchdb/couch_stats_aggregator.erl +++ b/src/couchdb/couch_stats_aggregator.erl @@ -147,13 +147,14 @@ get_aggregate(Key, State) -> %% default Time is 0, which is when CouchDB started get_aggregate(Key, State, '0'). get_aggregate(Key, #state{aggregates=StatsList}, Time) -> + Description = get_description(Key), Aggregates = case proplists:lookup(Key, StatsList) of % if we don't have any data here, return an empty record - none -> #aggregates{}; + none -> #aggregates{description=Description}; {Key, Stats} -> case proplists:lookup(Time, Stats) of - none -> #aggregates{}; % empty record again - {Time, Stat} -> Stat#aggregates{description=get_description(Key)} + none -> #aggregates{description=Description}; % empty record again + {Time, Stat} -> Stat#aggregates{description=Description} end end, Aggregates. @@ -217,7 +218,7 @@ update_aggregates(Value, Stat, CounterType) -> variance=0, stddev=0, count=1, - last=Value + current=Value }; % this sure could look nicer -- any ideas? StatsRecord -> @@ -227,12 +228,12 @@ update_aggregates(Value, Stat, CounterType) -> mean=Mean, variance=Variance, count=Count, - last=Last + current=Current } = StatsRecord, % incremental counters need to keep track of the last update's value NewValue = case CounterType of - incremental -> Value - Last; + incremental -> Value - Current; absolute -> Value end, % Knuth, The Art of Computer Programming, vol. 2, p. 232. @@ -246,15 +247,14 @@ update_aggregates(Value, Stat, CounterType) -> variance=NewVariance, stddev=math:sqrt(NewVariance / NewCount), count=NewCount, - last=Value + current=Value } end. -aggregate_to_json_term(#aggregates{min=Min,max=Max,mean=Mean,stddev=Stddev,count=Count,last=Last,description=Description}) -> +aggregate_to_json_term(#aggregates{min=Min,max=Max,mean=Mean,stddev=Stddev,count=Count,current=Current,description=Description}) -> {[ - % current is redundant, but reads nicer in JSON - {current, Last}, + {current, Current}, {count, Count}, {mean, Mean}, {min, Min}, @@ -305,32 +305,33 @@ init_descriptions() -> ets:insert(?MODULE, {{couchdb, open_databases}, <<"number of open databases">>}), ets:insert(?MODULE, {{couchdb, os_files_open}, <<"number of file descriptors CouchDB has open">>}), ets:insert(?MODULE, {{couchdb, request_time}, <<"length of a request inside CouchDB without Mochiweb">>}), - - ets:insert(?MODULE, {{http_status_codes, '200'}, <<"number of HTTP 200 OK responses">>}), - ets:insert(?MODULE, {{http_status_codes, '201'}, <<"number of HTTP 201 Created responses">>}), - ets:insert(?MODULE, {{http_status_codes, '202'}, <<"number of HTTP 202 Accepted responses">>}), - ets:insert(?MODULE, {{http_status_codes, '301'}, <<"number of HTTP 301 Moved Permanently responses">>}), - ets:insert(?MODULE, {{http_status_codes, '304'}, <<"number of HTTP 304 Not Modified responses">>}), - ets:insert(?MODULE, {{http_status_codes, '400'}, <<"number of HTTP 400 Bad Request responses">>}), - ets:insert(?MODULE, {{http_status_codes, '401'}, <<"number of HTTP 401 Unauthorized responses">>}), - ets:insert(?MODULE, {{http_status_codes, '403'}, <<"number of HTTP 403 Forbidden responses">>}), - ets:insert(?MODULE, {{http_status_codes, '404'}, <<"number of HTTP 404 Not Found responses">>}), - ets:insert(?MODULE, {{http_status_codes, '405'}, <<"number of HTTP 405 Method Not Allowed responses">>}), - ets:insert(?MODULE, {{http_status_codes, '409'}, <<"number of HTTP 409 Conflict responses">>}), - ets:insert(?MODULE, {{http_status_codes, '412'}, <<"number of HTTP 412 Precondition Failed responses">>}), - ets:insert(?MODULE, {{http_status_codes, '500'}, <<"number of HTTP 500 Internal Server Error responses">>}), - + ets:insert(?MODULE, {{httpd, bulk_requests}, <<"number of bulk requests">>}), - ets:insert(?MODULE, {{httpd, copy_requests}, <<"number of HTTP COPY requests">>}), - ets:insert(?MODULE, {{httpd, delete_requests}, <<"number of HTTP DELETE requests">>}), - ets:insert(?MODULE, {{httpd, get_requests}, <<"number of HTTP GET requests">>}), - ets:insert(?MODULE, {{httpd, head_requests}, <<"number of HTTP HEAD requests">>}), - ets:insert(?MODULE, {{httpd, move_requests}, <<"number of HTTP MOVE requests">>}), - ets:insert(?MODULE, {{httpd, post_requests}, <<"number of HTTP POST requests">>}), 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, put_requests}, <<"number of HTTP PUT requests">>}). + + ets:insert(?MODULE, {{httpd_request_methods, 'COPY'}, <<"number of HTTP COPY requests">>}), + ets:insert(?MODULE, {{httpd_request_methods, 'DELETE'}, <<"number of HTTP DELETE requests">>}), + ets:insert(?MODULE, {{httpd_request_methods, 'GET'}, <<"number of HTTP GET requests">>}), + ets:insert(?MODULE, {{httpd_request_methods, 'HEAD'}, <<"number of HTTP HEAD requests">>}), + ets:insert(?MODULE, {{httpd_request_methods, 'MOVE'}, <<"number of HTTP MOVE requests">>}), + ets:insert(?MODULE, {{httpd_request_methods, 'POST'}, <<"number of HTTP POST requests">>}), + ets:insert(?MODULE, {{httpd_request_methods, 'PUT'}, <<"number of HTTP PUT requests">>}), + + ets:insert(?MODULE, {{httpd_status_codes, '200'}, <<"number of HTTP 200 OK responses">>}), + ets:insert(?MODULE, {{httpd_status_codes, '201'}, <<"number of HTTP 201 Created responses">>}), + ets:insert(?MODULE, {{httpd_status_codes, '202'}, <<"number of HTTP 202 Accepted responses">>}), + ets:insert(?MODULE, {{httpd_status_codes, '301'}, <<"number of HTTP 301 Moved Permanently responses">>}), + ets:insert(?MODULE, {{httpd_status_codes, '304'}, <<"number of HTTP 304 Not Modified responses">>}), + ets:insert(?MODULE, {{httpd_status_codes, '400'}, <<"number of HTTP 400 Bad Request responses">>}), + ets:insert(?MODULE, {{httpd_status_codes, '401'}, <<"number of HTTP 401 Unauthorized responses">>}), + ets:insert(?MODULE, {{httpd_status_codes, '403'}, <<"number of HTTP 403 Forbidden responses">>}), + ets:insert(?MODULE, {{httpd_status_codes, '404'}, <<"number of HTTP 404 Not Found responses">>}), + ets:insert(?MODULE, {{httpd_status_codes, '405'}, <<"number of HTTP 405 Method Not Allowed responses">>}), + ets:insert(?MODULE, {{httpd_status_codes, '409'}, <<"number of HTTP 409 Conflict responses">>}), + ets:insert(?MODULE, {{httpd_status_codes, '412'}, <<"number of HTTP 412 Precondition Failed responses">>}), + ets:insert(?MODULE, {{httpd_status_codes, '500'}, <<"number of HTTP 500 Internal Server Error responses">>}). % please keep this in alphabetical order -- cgit v1.2.3