From 07c5f6b61fc9e226d387aa026b541e3ee2b289b6 Mon Sep 17 00:00:00 2001 From: Konstantin Haase Date: Wed, 23 Jan 2013 15:22:06 +0100 Subject: [PATCH 01/14] add extension that keeps track of route pattern --- Gemfile.lock | 2 +- lib/travis/api/app/base.rb | 2 +- .../api/app/extensions/expose_pattern.rb | 12 ++++++++++ spec/unit/extensions/expose_pattern_spec.rb | 23 +++++++++++++++++++ 4 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 lib/travis/api/app/extensions/expose_pattern.rb create mode 100644 spec/unit/extensions/expose_pattern_spec.rb diff --git a/Gemfile.lock b/Gemfile.lock index 7f2c8c6b..e0bba5fe 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -66,7 +66,7 @@ GIT GIT remote: git://github.com/travis-ci/travis-core.git - revision: aecd4e464e4c18d0e77e1e44deac75e4f1054efe + revision: 259e48ffc68a67eff32848334025ef17ab58a3b3 specs: travis-core (0.0.1) actionmailer (~> 3.2.11) diff --git a/lib/travis/api/app/base.rb b/lib/travis/api/app/base.rb index 172e3342..4f61f6a6 100644 --- a/lib/travis/api/app/base.rb +++ b/lib/travis/api/app/base.rb @@ -27,7 +27,7 @@ class Travis::Api::App disable :protection, :logging, :setup enable :raise_errors # disable :dump_errors - register :subclass_tracker + register :subclass_tracker, :expose_pattern helpers :respond_with, :mime_types end diff --git a/lib/travis/api/app/extensions/expose_pattern.rb b/lib/travis/api/app/extensions/expose_pattern.rb new file mode 100644 index 00000000..7ed0cc3e --- /dev/null +++ b/lib/travis/api/app/extensions/expose_pattern.rb @@ -0,0 +1,12 @@ +require 'travis/api/app' + +class Travis::Api::App + module Extensions + module ExposePattern + def route(verb, path, *) + condition { headers('X-Endpoint' => settings.name.to_s, 'X-Pattern' => path.to_s) } + super + end + end + end +end diff --git a/spec/unit/extensions/expose_pattern_spec.rb b/spec/unit/extensions/expose_pattern_spec.rb new file mode 100644 index 00000000..1952665d --- /dev/null +++ b/spec/unit/extensions/expose_pattern_spec.rb @@ -0,0 +1,23 @@ +require 'spec_helper' + +class Foo < Sinatra::Base + register Travis::Api::App::Extensions::ExposePattern + + get '/:id' do + "ok" + end +end + +describe Travis::Api::App::Extensions::ExposePattern do + before { set_app(Foo) } + + example "it exposes the pattern" do + get('/foo').should be_ok + headers['X-Pattern'].should be == '/:id' + end + + example "it exposes the app class" do + get('/foo').should be_ok + headers['X-Endpoint'].should be == 'Foo' + end +end \ No newline at end of file From cd98231c427b6d38fc0cfb25bce15a7cb291a832 Mon Sep 17 00:00:00 2001 From: Mathias Meyer Date: Tue, 16 Apr 2013 19:47:20 +0200 Subject: [PATCH 02/14] Add Middle ware for tracking metriks. --- lib/travis/api/app/middleware/metriks.rb | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 lib/travis/api/app/middleware/metriks.rb diff --git a/lib/travis/api/app/middleware/metriks.rb b/lib/travis/api/app/middleware/metriks.rb new file mode 100644 index 00000000..a1322ece --- /dev/null +++ b/lib/travis/api/app/middleware/metriks.rb @@ -0,0 +1,22 @@ +require 'travis/api/app' + +class Travis::Api::App + class Middleware + class Metriks < Middleware + before do + env['metriks.request.start'] = Time.now.utc + end + + after do + if response.status < 400 + time = Time.now.utc - env['metriks.request.start'] + pattern = headers['X-Pattern'].gsub(/[:\/]/, ".") + metric = "api.request.endpoint.#{pattern}" + Metriks.timer(metric).update(time) + Metriks.meter("api.request.#{request.method}") + end + Metriks.meter("api.request.status.#{response.status.to_s[0]}") + end + end + end +end From d07f289047c9b9587a7a492a3f5df028394ab04d Mon Sep 17 00:00:00 2001 From: Konstantin Haase Date: Fri, 19 Apr 2013 15:52:44 +0200 Subject: [PATCH 03/14] whitespace --- 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 a1322ece..f2e58730 100644 --- a/lib/travis/api/app/middleware/metriks.rb +++ b/lib/travis/api/app/middleware/metriks.rb @@ -6,7 +6,7 @@ class Travis::Api::App before do env['metriks.request.start'] = Time.now.utc end - + after do if response.status < 400 time = Time.now.utc - env['metriks.request.start'] From c3249a498cb8a714a1fa0ac9091add294db88ce0 Mon Sep 17 00:00:00 2001 From: Mathias Meyer Date: Thu, 9 May 2013 13:44:08 +0200 Subject: [PATCH 04/14] Fix Metriks reference. --- lib/travis/api/app/middleware/metriks.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/travis/api/app/middleware/metriks.rb b/lib/travis/api/app/middleware/metriks.rb index f2e58730..bca65cf5 100644 --- a/lib/travis/api/app/middleware/metriks.rb +++ b/lib/travis/api/app/middleware/metriks.rb @@ -5,6 +5,7 @@ class Travis::Api::App class Metriks < Middleware before do env['metriks.request.start'] = Time.now.utc + ::Metriks.meter("api.requests").mark end after do @@ -12,10 +13,10 @@ class Travis::Api::App time = Time.now.utc - env['metriks.request.start'] pattern = headers['X-Pattern'].gsub(/[:\/]/, ".") metric = "api.request.endpoint.#{pattern}" - Metriks.timer(metric).update(time) - Metriks.meter("api.request.#{request.method}") + ::Metriks.timer(metric).update(time) + ::Metriks.meter("api.request.#{request.method}").mark end - Metriks.meter("api.request.status.#{response.status.to_s[0]}") + ::Metriks.meter("api.request.status.#{response.status.to_s[0]}").mark end end end From 729ec6e7fa8fb2ba03ddade420111f55a7f1657b Mon Sep 17 00:00:00 2001 From: Mathias Meyer Date: Thu, 9 May 2013 14:04:25 +0200 Subject: [PATCH 05/14] Require 'metriks'. --- lib/travis/api/app/middleware/metriks.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/travis/api/app/middleware/metriks.rb b/lib/travis/api/app/middleware/metriks.rb index bca65cf5..5fc01d12 100644 --- a/lib/travis/api/app/middleware/metriks.rb +++ b/lib/travis/api/app/middleware/metriks.rb @@ -1,4 +1,5 @@ require 'travis/api/app' +require 'metriks' class Travis::Api::App class Middleware From 78608b81ae901bcaf383b2ff461eec476b7e64b2 Mon Sep 17 00:00:00 2001 From: Mathias Meyer Date: Thu, 9 May 2013 14:13:33 +0200 Subject: [PATCH 06/14] Lmao if you Object#method. --- 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 5fc01d12..5c1849ba 100644 --- a/lib/travis/api/app/middleware/metriks.rb +++ b/lib/travis/api/app/middleware/metriks.rb @@ -15,7 +15,7 @@ class Travis::Api::App pattern = headers['X-Pattern'].gsub(/[:\/]/, ".") metric = "api.request.endpoint.#{pattern}" ::Metriks.timer(metric).update(time) - ::Metriks.meter("api.request.#{request.method}").mark + ::Metriks.meter("api.request.#{request.request_method.downcase}").mark end ::Metriks.meter("api.request.status.#{response.status.to_s[0]}").mark end From 63d2a69b7d32482385f2fcf03c84539a245c6862 Mon Sep 17 00:00:00 2001 From: Mathias Meyer Date: Thu, 9 May 2013 14:18:59 +0200 Subject: [PATCH 07/14] Only track endpoint if an endpoint is set. For compatibility with the V1 API layer. --- lib/travis/api/app/middleware/metriks.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/travis/api/app/middleware/metriks.rb b/lib/travis/api/app/middleware/metriks.rb index 5c1849ba..ecfea648 100644 --- a/lib/travis/api/app/middleware/metriks.rb +++ b/lib/travis/api/app/middleware/metriks.rb @@ -12,9 +12,11 @@ class Travis::Api::App after do if response.status < 400 time = Time.now.utc - env['metriks.request.start'] - pattern = headers['X-Pattern'].gsub(/[:\/]/, ".") - metric = "api.request.endpoint.#{pattern}" - ::Metriks.timer(metric).update(time) + if headers['X-Pattern'] + pattern = headers['X-Pattern'].gsub(/[:\/]/, ".") + metric = "api.request.endpoint.#{pattern}" + ::Metriks.timer(metric).update(time) + end ::Metriks.meter("api.request.#{request.request_method.downcase}").mark end ::Metriks.meter("api.request.status.#{response.status.to_s[0]}").mark From 5971946d35adb69b19c4f9c82b89d78f7e6b906f Mon Sep 17 00:00:00 2001 From: Mathias Meyer Date: Sat, 18 May 2013 11:11:43 +0200 Subject: [PATCH 08/14] Use our own middlewares explicitly. --- lib/travis/api/app.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/travis/api/app.rb b/lib/travis/api/app.rb index 68ed7981..b23bb938 100644 --- a/lib/travis/api/app.rb +++ b/lib/travis/api/app.rb @@ -86,7 +86,11 @@ module Travis::Api env['travis.global_prefix'] = env['SCRIPT_NAME'] end - Middleware.subclasses.each { |m| use(m) } + use Travis::Api::App::Middleware::ScopeCheck + use Travis::Api::App::Middleware::Logging + use Travis::Api::App::Middleware::Metriks + use Travis::Api::App::Middleware::Rewrite + Endpoint.subclasses.each { |e| map(e.prefix) { run(e.new) } } end end From c75f76aefb7e32a5e7dfb4d6a91ce174e13cb238 Mon Sep 17 00:00:00 2001 From: Mathias Meyer Date: Sat, 18 May 2013 11:19:15 +0200 Subject: [PATCH 09/14] Remove spec for auto-using custom middlewares. --- spec/unit/middleware_spec.rb | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 spec/unit/middleware_spec.rb diff --git a/spec/unit/middleware_spec.rb b/spec/unit/middleware_spec.rb deleted file mode 100644 index 58dd74ee..00000000 --- a/spec/unit/middleware_spec.rb +++ /dev/null @@ -1,12 +0,0 @@ -require 'spec_helper' - -describe Travis::Api::App::Middleware do - class MyMiddleware < Travis::Api::App::Middleware - get('/my_middleware') { 'ok' } - end - - it 'sets up middleware automatically' do - get('/my_middleware').should be_ok - body.should == "ok" - end -end From 1ba02d8e2babf7590c2187dcb0bd2f9a31dd9660 Mon Sep 17 00:00:00 2001 From: Mathias Meyer Date: Mon, 10 Jun 2013 14:50:36 +0200 Subject: [PATCH 10/14] Track API version. --- lib/travis/api/app/middleware/metriks.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/travis/api/app/middleware/metriks.rb b/lib/travis/api/app/middleware/metriks.rb index ecfea648..47e914e0 100644 --- a/lib/travis/api/app/middleware/metriks.rb +++ b/lib/travis/api/app/middleware/metriks.rb @@ -4,6 +4,8 @@ require 'metriks' class Travis::Api::App class Middleware class Metriks < Middleware + include Helpers::Accept + before do env['metriks.request.start'] = Time.now.utc ::Metriks.meter("api.requests").mark @@ -20,6 +22,7 @@ class Travis::Api::App ::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.#{version}").mark end end end From ba97ebcfff68cc17861ebe2e173c46878cc93c3b Mon Sep 17 00:00:00 2001 From: Mathias Meyer Date: Mon, 10 Jun 2013 14:58:38 +0200 Subject: [PATCH 11/14] Use accept_version. --- 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 47e914e0..fc346aa6 100644 --- a/lib/travis/api/app/middleware/metriks.rb +++ b/lib/travis/api/app/middleware/metriks.rb @@ -22,7 +22,7 @@ class Travis::Api::App ::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.#{version}").mark + ::Metriks.meter("api.request.version.#{accept_version}").mark end end end From 4e23712109833423f5181c05e76bf12afb4f6b45 Mon Sep 17 00:00:00 2001 From: Mathias Meyer Date: Mon, 10 Jun 2013 14:59:12 +0200 Subject: [PATCH 12/14] Remove jruby/rbx, add 2.0.0 --- .travis.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 27dc76a5..e6b2bd29 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,13 +1,8 @@ language: ruby rvm: - 1.9.3 - - rbx-19mode - - jruby-19mode + - 2.0.0 before_script: - 'RAILS_ENV=test rake db:create db:schema:load --trace' notifications: irc: "irc.freenode.org#travis" -matrix: - allow_failures: - - rvm: rbx-19mode - - rvm: jruby-19mode From f1e7e91558836bf5db0478a141c7cac5e6f1b164 Mon Sep 17 00:00:00 2001 From: Mathias Meyer Date: Mon, 10 Jun 2013 15:03:52 +0200 Subject: [PATCH 13/14] Or not. --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e6b2bd29..9c38f8c1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ language: ruby rvm: - 1.9.3 - - 2.0.0 before_script: - 'RAILS_ENV=test rake db:create db:schema:load --trace' notifications: From d4130312c235b6eba8c5a4a06d8367a51c963e26 Mon Sep 17 00:00:00 2001 From: Mathias Meyer Date: Wed, 26 Jun 2013 13:47:38 +0200 Subject: [PATCH 14/14] Add a global timer for all requests. --- 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 fc346aa6..d8ac4f18 100644 --- a/lib/travis/api/app/middleware/metriks.rb +++ b/lib/travis/api/app/middleware/metriks.rb @@ -8,7 +8,6 @@ class Travis::Api::App before do env['metriks.request.start'] = Time.now.utc - ::Metriks.meter("api.requests").mark end after do @@ -18,6 +17,7 @@ class Travis::Api::App pattern = headers['X-Pattern'].gsub(/[:\/]/, ".") metric = "api.request.endpoint.#{pattern}" ::Metriks.timer(metric).update(time) + ::Metriks.timer('api.requests').update(time) end ::Metriks.meter("api.request.#{request.request_method.downcase}").mark end