lib/grape/batch.rb in grape-batch-1.1.4 vs lib/grape/batch.rb in grape-batch-1.2.0
- old
+ new
@@ -1,7 +1,6 @@
require 'active_support'
-require 'grape/batch/log_subscriber'
require 'grape/batch/version'
require 'grape/batch/errors'
require 'grape/batch/configuration'
require 'grape/batch/hash_converter'
require 'grape/batch/parser'
@@ -22,20 +21,20 @@
end
def batch_call(env)
status = 200
headers = { 'Content-Type' => 'application/json' }
-
+ logger.info('--- Grape::Batch BEGIN')
begin
batch_requests = Grape::Batch::Validator::parse(env, Grape::Batch.configuration.limit)
result = dispatch(env, batch_requests)
body = MultiJson.encode(result)
rescue Grape::Batch::RequestBodyError, Grape::Batch::TooManyRequestsError => e
e.class == TooManyRequestsError ? status = 429 : status = 400
body = e.message
end
-
+ logger.info('--- Grape::Batch END')
[status, headers, [body]]
end
private
@@ -44,29 +43,22 @@
env['REQUEST_METHOD'] == 'POST' &&
env['CONTENT_TYPE'] == 'application/json'
end
def dispatch(env, batch_requests)
- ActiveSupport::Notifications.instrument 'dispatch.batch' do |event|
- event[:requests] = []
+ session_data = env[Grape::Batch.configuration.session_header]
+ env['api.session'] = Grape::Batch.configuration.session_proc.call(session_data)
- session_data = env[Grape::Batch.configuration.session_header]
- env['api.session'] = Grape::Batch.configuration.session_proc.call(session_data)
+ # iterate
+ batch_env = env.dup
+ batch_requests.map do |request|
+ # init env for Grape resource
+ tmp_env = prepare_tmp_env(batch_env, request)
+ status, headers, response = @app.call(tmp_env)
- # iterate
- batch_env = env.dup
- batch_requests.map do |request|
- # init env for Grape resource
- tmp_env = prepare_tmp_env(batch_env, request)
- status, headers, response = @app.call(tmp_env)
-
- # format response
- @response_klass::format(status, headers, response).tap do |formatted_response|
- # log call
- event[:requests] << [tmp_env, formatted_response]
- end
- end
+ # format response
+ @response_klass::format(status, headers, response)
end
end
def prepare_tmp_env(tmp_env, request)
method = request['method']
@@ -84,9 +76,24 @@
tmp_env['REQUEST_METHOD'] = method
tmp_env['PATH_INFO'] = path
tmp_env['QUERY_STRING'] = query_string
tmp_env['rack.input'] = rack_input
tmp_env
+ end
+
+ def logger
+ @logger ||= Grape::Batch.configuration.logger || rails_logger || default_logger
+ end
+
+ def default_logger
+ logger = Logger.new($stdout)
+ logger.level = Logger::INFO
+ logger
+ end
+
+ # Get the Rails logger if it's defined.
+ def rails_logger
+ defined?(::Rails) && ::Rails.respond_to?(:logger) && ::Rails.logger
end
end
end
end