From cafe40a4c3edfb0ccfb49ad6e07c1ee4274dcb76 Mon Sep 17 00:00:00 2001 From: carlad Date: Thu, 21 Jul 2016 17:07:25 +0200 Subject: [PATCH] add sentry capture to v3 router --- lib/travis/api/v3/router.rb | 57 +++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/lib/travis/api/v3/router.rb b/lib/travis/api/v3/router.rb index 2d29b9f1..e4541c11 100644 --- a/lib/travis/api/v3/router.rb +++ b/lib/travis/api/v3/router.rb @@ -3,6 +3,10 @@ module Travis::API::V3 include Travis::API::V3 attr_accessor :routes, :metrics_processor + Raven.configure do |config| + config.dsn = Travis.config.sentry.dsn + end + def initialize(routes = Routes) @routes = routes @metrics_processor = Metrics::Processor.new @@ -12,39 +16,44 @@ 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]) + 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) + 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]) + 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) + 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) + 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) + metrics.tick(:renderer) + metrics.success(status: response[0]) + response + rescue Error => error + metrics.tick(:service) - result = Result.new(access_control, :error, error) - response = V3.response(result.render(env_params, env), {}, status: error.status) + result = Result.new(access_control, :error, error) + response = V3.response(result.render(env_params, env), {}, status: error.status) - metrics.tick(:rendered) - metrics.failure(status: error.status) + metrics.tick(:rendered) + metrics.failure(status: error.status) - response + response + end end def render(result, env_params, env)