metriks-middleware 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/example/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source :rubygems
2
+
3
+ gem 'metriks-middleware'
4
+ gem 'thin'
5
+
6
+ gem 'foreman', group: 'development'
@@ -1,26 +1,30 @@
1
- PATH
2
- remote: .
3
- specs:
4
- metriks-middleware (1.1.0)
5
- metriks (~> 0.9.9)
6
-
7
1
  GEM
8
2
  remote: http://rubygems.org/
9
3
  specs:
10
4
  atomic (1.0.1)
11
5
  avl_tree (1.1.3)
6
+ daemons (1.1.8)
7
+ eventmachine (0.12.10)
8
+ foreman (0.49.0)
9
+ thor (>= 0.13.6)
12
10
  hitimes (1.1.1)
13
- metaclass (0.0.1)
14
11
  metriks (0.9.9.1)
15
12
  atomic (~> 1.0)
16
13
  avl_tree (~> 1.1.2)
17
14
  hitimes (~> 1.1)
18
- mocha (0.11.4)
19
- metaclass (~> 0.0.1)
15
+ metriks-middleware (1.1.0)
16
+ metriks (~> 0.9.9)
17
+ rack (1.4.1)
18
+ thin (1.3.1)
19
+ daemons (>= 1.0.9)
20
+ eventmachine (>= 0.12.6)
21
+ rack (>= 1.0.0)
22
+ thor (0.15.4)
20
23
 
21
24
  PLATFORMS
22
25
  ruby
23
26
 
24
27
  DEPENDENCIES
25
- metriks-middleware!
26
- mocha (~> 0.11.4)
28
+ foreman
29
+ metriks-middleware
30
+ thin
data/example/Procfile ADDED
@@ -0,0 +1 @@
1
+ web: bundle exec thin start -p $PORT
data/example/config.ru ADDED
@@ -0,0 +1,40 @@
1
+ $: << 'lib'
2
+ require 'metriks/middleware'
3
+ require 'metriks/reporter/logger'
4
+ require 'pp'
5
+
6
+ $stdout.sync = true
7
+ Thread.abort_on_exception = true
8
+
9
+ Metriks::Reporter::Logger.new(logger: Logger.new($stdout), interval: 5).start
10
+ use Metriks::Middleware
11
+
12
+ run(->(env) do
13
+ case env['PATH_INFO']
14
+ when '/sync'
15
+ [200, {'Content-Type' => 'text/plain'}, ['sync!']]
16
+
17
+ when '/sync-error'
18
+ [500, {'Content-Type' => 'text/plain'}, ['sync error!']]
19
+
20
+ when '/async'
21
+ Thread.new do
22
+ sleep 1
23
+ env['async.callback'].call([200, {'Content-Type' => 'text/plain'}, ['async!']])
24
+ end
25
+ [-1, {}, []]
26
+
27
+ when '/async-error'
28
+ Thread.new do
29
+ sleep 1
30
+ env['async.callback'].call([500, {'Content-Type' => 'text/plain'}, ['async error!']])
31
+ end
32
+ [-1, {}, []]
33
+
34
+ else
35
+ world = env.keys.sort.each_with_object({}) {|key, world|
36
+ world[key] = env[key]
37
+ }
38
+ [200, {'Content-Type' => 'text/plain'}, [world.pretty_inspect]]
39
+ end
40
+ end)
@@ -2,7 +2,7 @@ require 'metriks'
2
2
 
3
3
  module Metriks
4
4
  class Middleware
5
- VERSION = '1.1.0'
5
+ VERSION = '1.2.0'
6
6
 
7
7
  def initialize(app, options = {})
8
8
  @app = app
@@ -52,7 +52,11 @@ module Metriks
52
52
  end
53
53
 
54
54
  def record_error(status)
55
- Metriks.meter("#{ @name }.errors").mark if status >= 500
55
+ if status >= 500
56
+ Metriks.meter("#{ @name }.responses.error").mark
57
+ elsif status == 404
58
+ Metriks.meter("#{ @name }.responses.not_found").mark
59
+ end
56
60
  end
57
61
 
58
62
  def response_timer
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
13
13
  ## If your rubyforge_project name is different, then edit it and comment out
14
14
  ## the sub! line in the Rakefile
15
15
  s.name = 'metriks-middleware'
16
- s.version = '1.1.0'
17
- s.date = '2012-07-11'
16
+ s.version = '1.2.0'
17
+ s.date = '2012-07-16'
18
18
 
19
19
  ## Make sure your summary is short. The description may be as long
20
20
  ## as you like.
@@ -51,10 +51,13 @@ Gem::Specification.new do |s|
51
51
  # = MANIFEST =
52
52
  s.files = %w[
53
53
  Gemfile
54
- Gemfile.lock
55
54
  LICENSE
56
55
  README.md
57
56
  Rakefile
57
+ example/Gemfile
58
+ example/Gemfile.lock
59
+ example/Procfile
60
+ example/config.ru
58
61
  lib/metriks/middleware.rb
59
62
  metriks-middleware.gemspec
60
63
  test/async_app_test.rb
@@ -61,7 +61,7 @@ class AsyncAppTest < Test::Unit::TestCase
61
61
  assert_in_delta 0.1, time, 0.01
62
62
  end
63
63
 
64
- def test_records_errors
64
+ def test_records_error_responses
65
65
  error_sync_app = lambda do |env| [500, {}, ['']] end
66
66
  error_async_app = lambda do |env|
67
67
  env['async.callback'].call [500, {}, ['']]
@@ -79,11 +79,34 @@ class AsyncAppTest < Test::Unit::TestCase
79
79
  Metriks::Middleware.new(success_sync_app).call(@env.dup)
80
80
  Metriks::Middleware.new(success_async_app).call(@env.dup)
81
81
 
82
- errors = Metriks.meter('app.errors').count
82
+ errors = Metriks.meter('app.responses.error').count
83
83
 
84
84
  assert_equal 2, errors
85
85
  end
86
86
 
87
+ def test_records_not_found_responses
88
+ not_found_sync_app = lambda do |env| [404, {}, ['']] end
89
+ not_found_async_app = lambda do |env|
90
+ env['async.callback'].call [404, {}, ['']]
91
+ [-1, {}, ['']]
92
+ end
93
+
94
+ success_sync_app = lambda do |env| [200, {}, ['']] end
95
+ success_async_app = lambda do |env|
96
+ env['async.callback'].call [200, {}, ['']]
97
+ [-1, {}, ['']]
98
+ end
99
+
100
+ Metriks::Middleware.new(not_found_sync_app).call(@env.dup)
101
+ Metriks::Middleware.new(not_found_async_app).call(@env.dup)
102
+ Metriks::Middleware.new(success_sync_app).call(@env.dup)
103
+ Metriks::Middleware.new(success_async_app).call(@env.dup)
104
+
105
+ not_founds = Metriks.meter('app.responses.not_found').count
106
+
107
+ assert_equal 2, not_founds
108
+ end
109
+
87
110
  def test_omits_queue_metrics
88
111
  Metriks::Middleware.new(@downstream).call(@env)
89
112
  @async_close.call
@@ -45,16 +45,26 @@ class SyncAppTest < Test::Unit::TestCase
45
45
  assert_in_delta 0.1, time, 0.01
46
46
  end
47
47
 
48
- def test_records_errors
48
+ def test_records_error_responses
49
49
  error_app = lambda do |env| [500, {}, ['']] end
50
50
  2.times { Metriks::Middleware.new(error_app).call(@env) }
51
51
  Metriks::Middleware.new(@downstream).call(@env)
52
52
 
53
- errors = Metriks.meter('app.errors').count
53
+ errors = Metriks.meter('app.responses.error').count
54
54
 
55
55
  assert_equal 2, errors
56
56
  end
57
57
 
58
+ def test_records_not_found_responses
59
+ not_found_app = lambda do |env| [404, {}, ['']] end
60
+ 2.times { Metriks::Middleware.new(not_found_app).call(@env) }
61
+ Metriks::Middleware.new(@downstream).call(@env)
62
+
63
+ not_founds = Metriks.meter('app.responses.not_found').count
64
+
65
+ assert_equal 2, not_founds
66
+ end
67
+
58
68
  def test_omits_queue_metrics
59
69
  Metriks::Middleware.new(@downstream).call(@env)
60
70
 
@@ -78,18 +88,22 @@ class SyncAppTest < Test::Unit::TestCase
78
88
  end
79
89
 
80
90
  def test_name_merics
81
- error_app = lambda do |env| [500, {}, ['']] end
91
+ error_app = lambda do |env| [500, {}, ['']] end
92
+ not_found_app = lambda do |env| [404, {}, ['']] end
82
93
  @env.merge! 'HTTP_X_HEROKU_QUEUE_WAIT_TIME' => '42',
83
94
  'HTTP_X_HEROKU_QUEUE_DEPTH' => '24'
84
95
  Metriks::Middleware.new(error_app, name: 'metric-name').call(@env)
96
+ Metriks::Middleware.new(not_found_app, name: 'metric-name').call(@env)
85
97
 
86
- count = Metriks.timer('metric-name').count
87
- errors = Metriks.meter('metric-name.errors').count
88
- wait = Metriks.histogram('metric-name.queue.wait').mean
89
- depth = Metriks.histogram('metric-name.queue.depth').mean
98
+ count = Metriks.timer('metric-name').count
99
+ errors = Metriks.meter('metric-name.responses.error').count
100
+ not_founds = Metriks.meter('metric-name.responses.not_found').count
101
+ wait = Metriks.histogram('metric-name.queue.wait').mean
102
+ depth = Metriks.histogram('metric-name.queue.depth').mean
90
103
 
91
104
  assert_operator count, :>, 0
92
105
  assert_operator errors, :>, 0
106
+ assert_operator not_founds, :>, 0
93
107
  assert_operator wait, :>, 0
94
108
  assert_operator depth, :>, 0
95
109
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metriks-middleware
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-11 00:00:00.000000000 Z
12
+ date: 2012-07-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: metriks
@@ -52,10 +52,13 @@ extra_rdoc_files:
52
52
  - LICENSE
53
53
  files:
54
54
  - Gemfile
55
- - Gemfile.lock
56
55
  - LICENSE
57
56
  - README.md
58
57
  - Rakefile
58
+ - example/Gemfile
59
+ - example/Gemfile.lock
60
+ - example/Procfile
61
+ - example/config.ru
59
62
  - lib/metriks/middleware.rb
60
63
  - metriks-middleware.gemspec
61
64
  - test/async_app_test.rb