Merge pull request #65 from travis-ci/rkh-metrics

Add a Metriks middleware
This commit is contained in:
Mathias Meyer 2013-06-26 05:10:30 -07:00
commit 4b7fc07171
7 changed files with 70 additions and 20 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View 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

View 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

View 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

View File

@ -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