couchdb-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From j..@apache.org
Subject svn commit: r774045 - in /couchdb/trunk: etc/couchdb/default.ini.tpl.in src/couchdb/couch_httpd_misc_handlers.erl src/couchdb/couch_log.erl src/couchdb/couch_util.erl
Date Tue, 12 May 2009 19:36:15 GMT
Author: jan
Date: Tue May 12 19:36:15 2009
New Revision: 774045

URL: http://svn.apache.org/viewvc?rev=774045&view=rev
Log:
Add non-streaming log-file handler. A GET request to /_log will show the last 1000 bytes of
the logflie. More bytes can be requested with GET /_log?bytes=10000.

Modified:
    couchdb/trunk/etc/couchdb/default.ini.tpl.in
    couchdb/trunk/src/couchdb/couch_httpd_misc_handlers.erl
    couchdb/trunk/src/couchdb/couch_log.erl
    couchdb/trunk/src/couchdb/couch_util.erl

Modified: couchdb/trunk/etc/couchdb/default.ini.tpl.in
URL: http://svn.apache.org/viewvc/couchdb/trunk/etc/couchdb/default.ini.tpl.in?rev=774045&r1=774044&r2=774045&view=diff
==============================================================================
--- couchdb/trunk/etc/couchdb/default.ini.tpl.in (original)
+++ couchdb/trunk/etc/couchdb/default.ini.tpl.in Tue May 12 19:36:15 2009
@@ -59,6 +59,7 @@
 _uuids = {couch_httpd_misc_handlers, handle_uuids_req}
 _restart = {couch_httpd_misc_handlers, handle_restart_req}
 _stats = {couch_httpd_stats_handlers, handle_stats_req}
+_log = {couch_httpd_misc_handlers, handle_log_req}
 
 [httpd_db_handlers]
 _compact = {couch_httpd_db, handle_compact_req}

Modified: couchdb/trunk/src/couchdb/couch_httpd_misc_handlers.erl
URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_httpd_misc_handlers.erl?rev=774045&r1=774044&r2=774045&view=diff
==============================================================================
--- couchdb/trunk/src/couchdb/couch_httpd_misc_handlers.erl (original)
+++ couchdb/trunk/src/couchdb/couch_httpd_misc_handlers.erl Tue May 12 19:36:15 2009
@@ -14,7 +14,7 @@
 
 -export([handle_welcome_req/2,handle_favicon_req/2,handle_utils_dir_req/2,
     handle_all_dbs_req/1,handle_replicate_req/1,handle_restart_req/1,
-    handle_uuids_req/1,handle_config_req/1,
+    handle_uuids_req/1,handle_config_req/1,handle_log_req/1,
     handle_task_status_req/1]).
     
 -export([increment_update_seq_req/2]).
@@ -195,3 +195,15 @@
 increment_update_seq_req(Req, _Db) ->
     send_method_not_allowed(Req, "POST").
 
+% httpd log handlers
+
+handle_log_req(#httpd{method='GET'}=Req) ->
+    LastBytes = list_to_integer(couch_httpd:qs_value(Req, "bytes", "1000")),
+    {ok, Resp} = start_chunked_response(Req, 200, [
+        % send a plaintext response
+        {"Content-Type", "text/plain; charset=utf-8"}
+    ]),
+    send_chunk(Resp, couch_log:read(LastBytes)),
+    send_chunk(Resp, "");
+handle_log_req(Req) ->
+    send_method_not_allowed(Req, "GET").

Modified: couchdb/trunk/src/couchdb/couch_log.erl
URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_log.erl?rev=774045&r1=774044&r2=774045&view=diff
==============================================================================
--- couchdb/trunk/src/couchdb/couch_log.erl (original)
+++ couchdb/trunk/src/couchdb/couch_log.erl Tue May 12 19:36:15 2009
@@ -16,6 +16,7 @@
 -export([start_link/0,stop/0]).
 -export([debug_on/0,info_on/0,get_level/0,get_level_integer/0, set_level/1]).
 -export([init/1, handle_event/2, terminate/2, code_change/3, handle_info/2, handle_call/2]).
+-export([read/1]).
 
 -define(LEVEL_ERROR, 3).
 -define(LEVEL_INFO, 2).
@@ -120,3 +121,16 @@
     ok = io:format("[~s] [~p] ~s~n", [Level, Pid, Msg]), % dump to console too
     {ok, Msg2, _} = regexp:gsub(lists:flatten(Msg),"\\r\\n|\\r|\\n", "\r\n"),
     ok = io:format(Fd, "[~s] [~s] [~p] ~s\r~n\r~n", [httpd_util:rfc1123_date(), Level, Pid,
Msg2]).
+
+read(LastBytes) ->
+    LogFileName = couch_config:get("log", "file"),
+    LogFileSize = couch_util:file_read_size(LogFileName),
+
+    {ok, Fd} = file:open(LogFileName, [binary]),
+    Start = lists:max([LogFileSize - LastBytes, 0]),
+
+    % TODO: truncate chopped first line
+    % TODO: make streaming
+
+    {ok, Chunk} = file:pread(Fd, Start, LogFileSize),
+    Chunk.

Modified: couchdb/trunk/src/couchdb/couch_util.erl
URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_util.erl?rev=774045&r1=774044&r2=774045&view=diff
==============================================================================
--- couchdb/trunk/src/couchdb/couch_util.erl (original)
+++ couchdb/trunk/src/couchdb/couch_util.erl Tue May 12 19:36:15 2009
@@ -17,8 +17,10 @@
 -export([new_uuid/0, rand32/0, implode/2, collate/2, collate/3]).
 -export([abs_pathname/1,abs_pathname/2, trim/1, ascii_lower/1]).
 -export([encodeBase64/1, decodeBase64/1, to_hex/1,parse_term/1,dict_find/3]).
+-export([file_read_size/1]).
 
 -include("couch_db.hrl").
+-include_lib("kernel/include/file.hrl").
 
 % arbitrarily chosen amount of memory to use before flushing to disk
 -define(FLUSH_MAX_MEM, 10000000).
@@ -291,3 +293,11 @@
     error ->
         DefaultValue
     end.
+
+
+file_read_size(FileName) ->
+    case file:read_file_info(FileName) of
+        {ok, FileInfo} ->
+            FileInfo#file_info.size;
+        Error -> Error
+    end.



Mime
View raw message