rack-statsd 0.1.1 → 0.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.
Files changed (3) hide show
  1. data/lib/rack-statsd.rb +34 -8
  2. data/rack-statsd.gemspec +2 -2
  3. metadata +51 -27
data/lib/rack-statsd.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module RackStatsD
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
 
4
4
  # Simple middleware to add a quick status URL for tools like Nagios.
5
5
  class RequestStatus
@@ -7,6 +7,7 @@ module RackStatsD
7
7
  GET = 'GET'.freeze
8
8
  PATH_INFO = 'PATH_INFO'.freeze
9
9
  STATUS_PATH = '/status'
10
+ HEADERS = {"Content-Type" => "text/plain"}.freeze
10
11
 
11
12
  # Initializes the middleware.
12
13
  #
@@ -39,8 +40,11 @@ module RackStatsD
39
40
  def call(env)
40
41
  if env[REQUEST_METHOD] == GET
41
42
  if env[PATH_INFO] == @status_path
42
- method = @callback.respond_to?(:call) ? :call : :to_s
43
- return [200, {}, @callback.send(method)]
43
+ if @callback.respond_to?(:call)
44
+ return @callback.call
45
+ else
46
+ return [200, HEADERS, [@callback.to_s]]
47
+ end
44
48
  end
45
49
  end
46
50
 
@@ -63,13 +67,13 @@ module RackStatsD
63
67
  # Returns nothing.
64
68
  def initialize(app, options = {})
65
69
  @app = app
66
- @host = options[:host] || `hostname -s`.chomp
70
+ @host = options.key?(:host) ? options[:host] : `hostname -s`.chomp
67
71
  @sha = options[:revision] || '<none>'
68
72
  end
69
73
 
70
74
  def call(env)
71
75
  status, headers, body = @app.call(env)
72
- headers['X-Node'] = @host
76
+ headers['X-Node'] = @host if @host
73
77
  headers['X-Revision'] = @sha
74
78
  [status, headers, body]
75
79
  end
@@ -82,6 +86,9 @@ module RackStatsD
82
86
  # NOTE This middleware is not thread safe. It should only be used when
83
87
  # rack.multiprocess is true and rack.multithread is false.
84
88
  class ProcessUtilization
89
+ REQUEST_METHOD = 'REQUEST_METHOD'.freeze
90
+ VALID_METHODS = ['GET', 'HEAD', 'POST', 'PUT', 'DELETE'].freeze
91
+
85
92
  # Initializes the middleware.
86
93
  #
87
94
  # app - The next Rack app in the pipeline.
@@ -210,7 +217,7 @@ module RackStatsD
210
217
 
211
218
  # called immediately after a request to record statistics, update the
212
219
  # procline, and dump information to the logfile
213
- def record_request(status)
220
+ def record_request(status, env)
214
221
  now = Time.now
215
222
  diff = (now - @start)
216
223
  @active_time += diff
@@ -220,6 +227,11 @@ module RackStatsD
220
227
 
221
228
  if @stats
222
229
  @stats.timing("#{@stats_prefix}.response_time", diff * 1000)
230
+ if VALID_METHODS.include?(env[REQUEST_METHOD])
231
+ stat = "#{@stats_prefix}.response_time.#{env[REQUEST_METHOD].downcase}"
232
+ @stats.timing(stat, diff * 1000)
233
+ end
234
+
223
235
  if suffix = status_suffix(status)
224
236
  @stats.increment "#{@stats_prefix}.status_code.#{status_suffix(status)}"
225
237
  end
@@ -236,12 +248,26 @@ module RackStatsD
236
248
 
237
249
  def status_suffix(status)
238
250
  suffix = case status.to_i
251
+ when 200 then :ok
252
+ when 201 then :created
253
+ when 202 then :accepted
254
+ when 301 then :moved_permanently
255
+ when 302 then :found
256
+ when 303 then :see_other
257
+ when 304 then :not_modified
258
+ when 305 then :use_proxy
259
+ when 307 then :temporary_redirect
239
260
  when 400 then :bad_request
240
261
  when 401 then :unauthorized
262
+ when 402 then :payment_required
263
+ when 403 then :forbidden
241
264
  when 404 then :missing
265
+ when 410 then :gone
242
266
  when 422 then :invalid
243
- when 503 then :node_down
244
267
  when 500 then :error
268
+ when 502 then :bad_gateway
269
+ when 503 then :node_down
270
+ when 504 then :gateway_timeout
245
271
  end
246
272
  end
247
273
 
@@ -279,7 +305,7 @@ module RackStatsD
279
305
  env.delete('HTTP_X_REQUEST_START')
280
306
 
281
307
  status, headers, body = @app.call(env)
282
- body = Body.new(body) { record_request(status) }
308
+ body = Body.new(body) { record_request(status, env) }
283
309
  [status, headers, body]
284
310
  end
285
311
  end
data/rack-statsd.gemspec CHANGED
@@ -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 = 'rack-statsd'
16
- s.version = '0.1.1'
17
- s.date = '2011-12-14'
16
+ s.version = '0.2.0'
17
+ s.date = '2013-01-24'
18
18
  s.rubyforge_project = 'rack-statsd'
19
19
 
20
20
  ## Make sure your summary is short. The description may be as long
metadata CHANGED
@@ -1,61 +1,85 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rack-statsd
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.1
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Ryan Tomayko
9
14
  - Rick Olson
10
15
  autorequire:
11
16
  bindir: bin
12
17
  cert_chain: []
13
- date: 2011-12-14 00:00:00.000000000 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
18
+
19
+ date: 2013-01-24 00:00:00 -07:00
20
+ default_executable:
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
16
23
  name: rack-test
17
- requirement: &70288897702740 !ruby/object:Gem::Requirement
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
18
26
  none: false
19
- requirements:
20
- - - ! '>='
21
- - !ruby/object:Gem::Version
22
- version: '0'
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ hash: 3
31
+ segments:
32
+ - 0
33
+ version: "0"
23
34
  type: :development
24
- prerelease: false
25
- version_requirements: *70288897702740
35
+ version_requirements: *id001
26
36
  description: Tools for monitoring Rack apps in production.
27
37
  email: technoweenie@gmail.com
28
38
  executables: []
39
+
29
40
  extensions: []
41
+
30
42
  extra_rdoc_files: []
31
- files:
43
+
44
+ files:
32
45
  - LICENSE
33
46
  - README.md
34
47
  - Rakefile
35
48
  - lib/rack-statsd.rb
36
49
  - rack-statsd.gemspec
50
+ has_rdoc: true
37
51
  homepage: https://github.com/github/rack-statsd
38
52
  licenses: []
53
+
39
54
  post_install_message:
40
55
  rdoc_options: []
41
- require_paths:
56
+
57
+ require_paths:
42
58
  - lib
43
- required_ruby_version: !ruby/object:Gem::Requirement
59
+ required_ruby_version: !ruby/object:Gem::Requirement
44
60
  none: false
45
- requirements:
46
- - - ! '>='
47
- - !ruby/object:Gem::Version
48
- version: '0'
49
- required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ hash: 3
65
+ segments:
66
+ - 0
67
+ version: "0"
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
69
  none: false
51
- requirements:
52
- - - ! '>='
53
- - !ruby/object:Gem::Version
54
- version: '0'
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ hash: 3
74
+ segments:
75
+ - 0
76
+ version: "0"
55
77
  requirements: []
78
+
56
79
  rubyforge_project: rack-statsd
57
- rubygems_version: 1.8.11
80
+ rubygems_version: 1.6.2
58
81
  signing_key:
59
82
  specification_version: 2
60
83
  summary: Tools for monitoring Rack apps in production.
61
84
  test_files: []
85
+