diff --git a/lib/travis/api/v3/router.rb b/lib/travis/api/v3/router.rb index e4541c11..cff6d91e 100644 --- a/lib/travis/api/v3/router.rb +++ b/lib/travis/api/v3/router.rb @@ -1,3 +1,6 @@ + +require 'sentry-raven' + module Travis::API::V3 class Router include Travis::API::V3 @@ -16,34 +19,32 @@ module Travis::API::V3 end def call(env) + return service_index(env) if env['PATH_INFO'.freeze] == ?/.freeze + metrics = @metrics_processor.create + access_control = AccessControl.new(env) + env_params = params(env) + factory, params = routes.factory_for(env['REQUEST_METHOD'.freeze], env['PATH_INFO'.freeze]) + + + raise NotFound unless factory + metrics.name_after(factory) + + filtered = factory.filter_params(env_params) + service = factory.new(access_control, filtered.merge(params), env['rack.input'.freeze]) + + metrics.tick(:prepare) + result = service.run + metrics.tick(:service) + + env_params.each_key { |key| result.ignored_param(key, reason: "not safelisted".freeze) unless filtered.include?(key) } + response = render(result, env_params, env) + + metrics.tick(:renderer) + metrics.success(status: response[0]) + response + rescue Error => error Raven.capture do - # capture any exceptions which happen during execution of this block 1 / 0 - - return service_index(env) if env['PATH_INFO'.freeze] == ?/.freeze - metrics = @metrics_processor.create - access_control = AccessControl.new(env) - env_params = params(env) - factory, params = routes.factory_for(env['REQUEST_METHOD'.freeze], env['PATH_INFO'.freeze]) - - - raise NotFound unless factory - metrics.name_after(factory) - - filtered = factory.filter_params(env_params) - service = factory.new(access_control, filtered.merge(params), env['rack.input'.freeze]) - - metrics.tick(:prepare) - result = service.run - metrics.tick(:service) - - env_params.each_key { |key| result.ignored_param(key, reason: "not safelisted".freeze) unless filtered.include?(key) } - response = render(result, env_params, env) - - metrics.tick(:renderer) - metrics.success(status: response[0]) - response - rescue Error => error metrics.tick(:service) result = Result.new(access_control, :error, error) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 74fcf50e..814e0130 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -10,6 +10,7 @@ require 'gh' require 'multi_json' require 'pry' require 'stackprof' +require 'sentry-raven' require 'travis/api/app' require 'travis/testing'