Commit f2985c267b89d2f241689b6c02c300df998db03f
Committed by
Rodrigo Souto
1 parent
4921dc6e
Exists in
master
and in
29 other branches
api: improve api logging
Showing
4 changed files
with
29 additions
and
15 deletions
Show diff stats
Gemfile
@@ -22,6 +22,7 @@ gem 'eita-jrails', '>= 0.9.5', :require => 'jrails' | @@ -22,6 +22,7 @@ gem 'eita-jrails', '>= 0.9.5', :require => 'jrails' | ||
22 | gem 'grape', '~> 0.11.0' | 22 | gem 'grape', '~> 0.11.0' |
23 | gem 'grape-entity' | 23 | gem 'grape-entity' |
24 | gem 'grape-swagger' | 24 | gem 'grape-swagger' |
25 | +gem 'grape_logging' | ||
25 | gem 'rack-cors' | 26 | gem 'rack-cors' |
26 | gem 'rack-contrib' | 27 | gem 'rack-contrib' |
27 | 28 |
lib/noosfero/api/api.rb
@@ -6,12 +6,18 @@ module Noosfero | @@ -6,12 +6,18 @@ module Noosfero | ||
6 | class API < Grape::API | 6 | class API < Grape::API |
7 | use Rack::JSONP | 7 | use Rack::JSONP |
8 | 8 | ||
9 | - before { start_log } | 9 | + logger = Logger.new(File.join(Rails.root, 'log', "#{ENV['RAILS_ENV'] || 'production'}_api.log")) |
10 | + logger.formatter = GrapeLogging::Formatters::Default.new | ||
11 | + use RequestLogger, { logger: logger } | ||
12 | + | ||
13 | + rescue_from :all do |e| | ||
14 | + logger.error e | ||
15 | + end | ||
16 | + | ||
10 | before { setup_multitenancy } | 17 | before { setup_multitenancy } |
11 | before { detect_stuff_by_domain } | 18 | before { detect_stuff_by_domain } |
12 | - after { end_log } | ||
13 | after { set_session_cookie } | 19 | after { set_session_cookie } |
14 | - | 20 | + |
15 | version 'v1' | 21 | version 'v1' |
16 | prefix "api" | 22 | prefix "api" |
17 | format :json | 23 | format :json |
lib/noosfero/api/helpers.rb
@@ -3,11 +3,7 @@ module Noosfero | @@ -3,11 +3,7 @@ module Noosfero | ||
3 | module APIHelpers | 3 | module APIHelpers |
4 | PRIVATE_TOKEN_PARAM = :private_token | 4 | PRIVATE_TOKEN_PARAM = :private_token |
5 | ALLOWED_PARAMETERS = ['parent_id', 'from', 'until', 'content_type'] | 5 | ALLOWED_PARAMETERS = ['parent_id', 'from', 'until', 'content_type'] |
6 | - | ||
7 | - def logger | ||
8 | - @logger ||= Logger.new(File.join(Rails.root, 'log', "#{ENV['RAILS_ENV']}_api.log")) | ||
9 | - end | ||
10 | - | 6 | + |
11 | def current_user | 7 | def current_user |
12 | private_token = (params[PRIVATE_TOKEN_PARAM] || headers['Private-Token'] || cookies['_noosfero_api_session']).to_s if params | 8 | private_token = (params[PRIVATE_TOKEN_PARAM] || headers['Private-Token'] || cookies['_noosfero_api_session']).to_s if params |
13 | @current_user ||= User.find_by_private_token(private_token) | 9 | @current_user ||= User.find_by_private_token(private_token) |
@@ -151,13 +147,6 @@ module Noosfero | @@ -151,13 +147,6 @@ module Noosfero | ||
151 | cookies['_noosfero_api_session'] = { value: @current_user.private_token, httponly: true } if @current_user.present? | 147 | cookies['_noosfero_api_session'] = { value: @current_user.private_token, httponly: true } if @current_user.present? |
152 | end | 148 | end |
153 | 149 | ||
154 | - def start_log | ||
155 | - logger.info "Started #{request.path} #{request.params.except('password')}" | ||
156 | - end | ||
157 | - def end_log | ||
158 | - logger.info "Completed #{request.path}" | ||
159 | - end | ||
160 | - | ||
161 | def setup_multitenancy | 150 | def setup_multitenancy |
162 | Noosfero::MultiTenancy.setup!(request.host) | 151 | Noosfero::MultiTenancy.setup!(request.host) |
163 | end | 152 | end |
@@ -0,0 +1,18 @@ | @@ -0,0 +1,18 @@ | ||
1 | +module Noosfero | ||
2 | + module API | ||
3 | + class RequestLogger < GrapeLogging::Middleware::RequestLogger | ||
4 | + | ||
5 | + protected | ||
6 | + | ||
7 | + def parameters(response, duration) | ||
8 | + { | ||
9 | + path: request.path, | ||
10 | + params: request.params.except('password'), | ||
11 | + method: request.request_method, | ||
12 | + total: (duration * 1000).round(2), | ||
13 | + db: request.env[:db_duration].round(2), | ||
14 | + } | ||
15 | + end | ||
16 | + end | ||
17 | + end | ||
18 | +end |