From 8707f3b35738b1dc53fe13d123f4377eabef47af Mon Sep 17 00:00:00 2001 From: Konstantin Haase Date: Thu, 11 Jul 2013 17:49:21 +0200 Subject: [PATCH 1/5] set X-Middleware-Start for NewRelic --- lib/travis/api/app.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/travis/api/app.rb b/lib/travis/api/app.rb index fb4ac081..a469dab7 100644 --- a/lib/travis/api/app.rb +++ b/lib/travis/api/app.rb @@ -64,6 +64,8 @@ module Travis::Api def initialize @app = Rack::Builder.app do + use(Rack::Config) { |env| env["HTTP_X_MIDDLEWARE_START"] ||= "t=#{(Time.now.to_f * 1000000).to_i}" } + Rack::Utils::HTTP_STATUS_CODES[420] = "Enhance Your Calm" use Rack::Attack Rack::Attack.blacklist('block client requesting ruby builds') do |req| From 03d124d1b7b16b3c7dd05ff1c305297a3a054ac6 Mon Sep 17 00:00:00 2001 From: Konstantin Haase Date: Thu, 11 Jul 2013 18:13:23 +0200 Subject: [PATCH 2/5] metrics for request queue --- lib/travis/api/app.rb | 2 +- lib/travis/api/app/middleware/metriks.rb | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/travis/api/app.rb b/lib/travis/api/app.rb index a469dab7..59e58af8 100644 --- a/lib/travis/api/app.rb +++ b/lib/travis/api/app.rb @@ -64,7 +64,7 @@ module Travis::Api def initialize @app = Rack::Builder.app do - use(Rack::Config) { |env| env["HTTP_X_MIDDLEWARE_START"] ||= "t=#{(Time.now.to_f * 1000000).to_i}" } + use(Rack::Config) { |env| env['metriks.request.start'] ||= Time.now.utc } Rack::Utils::HTTP_STATUS_CODES[420] = "Enhance Your Calm" use Rack::Attack diff --git a/lib/travis/api/app/middleware/metriks.rb b/lib/travis/api/app/middleware/metriks.rb index cb90f1f4..c8bc07c1 100644 --- a/lib/travis/api/app/middleware/metriks.rb +++ b/lib/travis/api/app/middleware/metriks.rb @@ -7,10 +7,15 @@ class Travis::Api::App include Helpers::Accept before do - env['metriks.request.start'] = Time.now.utc + env['metriks.request.start'] ||= Time.now.utc end after do + if queue_start = time(env['HTTP_X_QUEUE_START']) + time = env['metriks.request.start'] - queue_start + ::Metriks.timer('api.request_queue').update(time) + end + if response.status < 400 time = Time.now.utc - env['metriks.request.start'] if headers['X-Pattern'].present? and headers['X-Endpoint'].present? @@ -21,9 +26,17 @@ class Travis::Api::App end ::Metriks.meter("api.request.#{request.request_method.downcase}").mark end + ::Metriks.meter("api.request.status.#{response.status.to_s[0]}").mark ::Metriks.meter("api.request.version.#{accept_version}").mark end + + def time(value) + value = value.to_f + start = env['metriks.request.start'].to_f + value /= 1000 while value > start + value if value > 946684800 + end end end end From 63b4ac333888844d4f876024150329eefa7087aa Mon Sep 17 00:00:00 2001 From: Konstantin Haase Date: Thu, 11 Jul 2013 18:22:52 +0200 Subject: [PATCH 3/5] also support X-Request-Start --- lib/travis/api/app/middleware/metriks.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/travis/api/app/middleware/metriks.rb b/lib/travis/api/app/middleware/metriks.rb index c8bc07c1..4b9384a8 100644 --- a/lib/travis/api/app/middleware/metriks.rb +++ b/lib/travis/api/app/middleware/metriks.rb @@ -11,7 +11,7 @@ class Travis::Api::App end after do - if queue_start = time(env['HTTP_X_QUEUE_START']) + if queue_start = time(env['HTTP_X_QUEUE_START']) || time(env['HTTP_X_REQUEST_START']) time = env['metriks.request.start'] - queue_start ::Metriks.timer('api.request_queue').update(time) end From 40acdfba4f5834f50217971b4cdd6e03cc763848 Mon Sep 17 00:00:00 2001 From: Konstantin Haase Date: Thu, 11 Jul 2013 18:28:44 +0200 Subject: [PATCH 4/5] Revert "also support X-Request-Start" This reverts commit 63b4ac333888844d4f876024150329eefa7087aa. --- lib/travis/api/app/middleware/metriks.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/travis/api/app/middleware/metriks.rb b/lib/travis/api/app/middleware/metriks.rb index 4b9384a8..c8bc07c1 100644 --- a/lib/travis/api/app/middleware/metriks.rb +++ b/lib/travis/api/app/middleware/metriks.rb @@ -11,7 +11,7 @@ class Travis::Api::App end after do - if queue_start = time(env['HTTP_X_QUEUE_START']) || time(env['HTTP_X_REQUEST_START']) + if queue_start = time(env['HTTP_X_QUEUE_START']) time = env['metriks.request.start'] - queue_start ::Metriks.timer('api.request_queue').update(time) end From 04ea79ceec5b324062c839879bc47fa9ff6a5b7f Mon Sep 17 00:00:00 2001 From: Konstantin Haase Date: Thu, 11 Jul 2013 18:31:29 +0200 Subject: [PATCH 5/5] fix time parsing --- lib/travis/api/app/middleware/metriks.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/travis/api/app/middleware/metriks.rb b/lib/travis/api/app/middleware/metriks.rb index c8bc07c1..cfb22b7b 100644 --- a/lib/travis/api/app/middleware/metriks.rb +++ b/lib/travis/api/app/middleware/metriks.rb @@ -11,7 +11,7 @@ class Travis::Api::App end after do - if queue_start = time(env['HTTP_X_QUEUE_START']) + if queue_start = time(env['HTTP_X_QUEUE_START']) || time(env['HTTP_X_REQUEST_START']) time = env['metriks.request.start'] - queue_start ::Metriks.timer('api.request_queue').update(time) end @@ -35,7 +35,7 @@ class Travis::Api::App value = value.to_f start = env['metriks.request.start'].to_f value /= 1000 while value > start - value if value > 946684800 + Time.at(value) if value > 946684800 end end end