Merge pull request #65 from travis-ci/rkh-metrics
Add a Metriks middleware
This commit is contained in:
commit
4b7fc07171
|
@ -1,13 +1,7 @@
|
|||
language: ruby
|
||||
rvm:
|
||||
- 1.9.3
|
||||
- rbx-19mode
|
||||
- jruby-19mode
|
||||
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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -37,7 +37,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
|
||||
|
||||
|
|
12
lib/travis/api/app/extensions/expose_pattern.rb
Normal file
12
lib/travis/api/app/extensions/expose_pattern.rb
Normal file
|
@ -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
|
29
lib/travis/api/app/middleware/metriks.rb
Normal file
29
lib/travis/api/app/middleware/metriks.rb
Normal file
|
@ -0,0 +1,29 @@
|
|||
require 'travis/api/app'
|
||||
require 'metriks'
|
||||
|
||||
class Travis::Api::App
|
||||
class Middleware
|
||||
class Metriks < Middleware
|
||||
include Helpers::Accept
|
||||
|
||||
before do
|
||||
env['metriks.request.start'] = Time.now.utc
|
||||
end
|
||||
|
||||
after do
|
||||
if response.status < 400
|
||||
time = Time.now.utc - env['metriks.request.start']
|
||||
if headers['X-Pattern']
|
||||
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
|
||||
::Metriks.meter("api.request.status.#{response.status.to_s[0]}").mark
|
||||
::Metriks.meter("api.request.version.#{accept_version}").mark
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
23
spec/unit/extensions/expose_pattern_spec.rb
Normal file
23
spec/unit/extensions/expose_pattern_spec.rb
Normal file
|
@ -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
|
|
@ -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
|
Loading…
Reference in New Issue
Block a user