metriks-middleware 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NDQ0YWZjMmFlYjM0ZjU4ZTBmMTVhMmNkNGMzYTk3MmY2MDMxZWJiMg==
5
+ data.tar.gz: !binary |-
6
+ YmEwMWZkNjhjYjIxOWUyYzE3ZTdhZGMwZDQzNjFjOTY5NjZlZTUzYw==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ ZjE1NTEyZGEyNjMxMDk4MGJmZmZhZWFmZTU2YzcwMzNlZTc2ZDUyYzdiODhh
10
+ NTJlZmFmMWFmNTEyYzlhNmQyMjZiNzEyZTM4ODBkYjlmMmJiYjMwZjRkM2Mx
11
+ NGU2NTE1MmNhOGEzMWJmMGU2YzVjMDU5NGY3N2E0ZDRjNDMwMDM=
12
+ data.tar.gz: !binary |-
13
+ NDMwMWFmZWY4NmNiZmY5OTYyN2FkZGRjMmE4MzZmNjU2YTVmZjIyM2Q4ZDA5
14
+ NjgwMWZhNDZmMTBlODkzOGFlMmViNGI5MjFmMGUxODhkZGYyZWZmMWQ1YWY0
15
+ NjViZGZiYzFkMDkxNDg4NTU1ZDRjMzg5NzQ1MjM0YmU4YzExN2Q=
data/Rakefile CHANGED
@@ -1,54 +1,3 @@
1
- require 'rubygems'
2
- require 'rake'
3
- require 'date'
4
-
5
- #############################################################################
6
- #
7
- # Helper functions
8
- #
9
- #############################################################################
10
-
11
- def name
12
- @name ||= Dir['*.gemspec'].first.split('.').first
13
- end
14
-
15
- def lib_path
16
- "lib/#{ name.gsub('-', '/') }.rb"
17
- end
18
-
19
- def version
20
- line = File.read(lib_path)[/^\s*VERSION\s*=\s*.*/]
21
- line.match(/.*ERSION\s*=\s*['"](.*)['"]/)[1]
22
- end
23
-
24
- def date
25
- Date.today.to_s
26
- end
27
-
28
- def rubyforge_project
29
- name
30
- end
31
-
32
- def gemspec_file
33
- "#{name}.gemspec"
34
- end
35
-
36
- def gem_file
37
- "#{name}-#{version}.gem"
38
- end
39
-
40
- def replace_header(head, header_name)
41
- head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
42
- end
43
-
44
- #############################################################################
45
- #
46
- # Standard tasks
47
- #
48
- #############################################################################
49
-
50
- task :default => :test
51
-
52
1
  require 'rake/testtask'
53
2
  Rake::TestTask.new(:test) do |test|
54
3
  test.libs << 'lib' << 'test'
@@ -56,106 +5,4 @@ Rake::TestTask.new(:test) do |test|
56
5
  test.verbose = true
57
6
  end
58
7
 
59
- desc "Generate RCov test coverage and open in your browser"
60
- task :coverage do
61
- require 'rcov'
62
- sh "rm -fr coverage"
63
- sh "rcov test/test_*.rb"
64
- sh "open coverage/index.html"
65
- end
66
-
67
- require 'rdoc/task'
68
- Rake::RDocTask.new do |rdoc|
69
- rdoc.rdoc_dir = 'rdoc'
70
- rdoc.title = "#{name} #{version}"
71
- rdoc.rdoc_files.include('README*')
72
- rdoc.rdoc_files.include('lib/**/*.rb')
73
- end
74
-
75
- desc "Open an irb session preloaded with this library"
76
- task :console do
77
- p "irb -rubygems -r ./#{lib_path}"
78
- sh "irb -rubygems -r ./#{lib_path}"
79
- end
80
-
81
- #############################################################################
82
- #
83
- # Custom tasks (add your own tasks here)
84
- #
85
- #############################################################################
86
-
87
-
88
-
89
- #############################################################################
90
- #
91
- # Packaging tasks
92
- #
93
- #############################################################################
94
-
95
- desc "Create tag v#{version} and build and push #{gem_file} to Rubygems"
96
- task :release => :build do
97
- unless `git branch` =~ /^\* master$/
98
- puts "You must be on the master branch to release!"
99
- exit!
100
- end
101
- sh "git commit --allow-empty -a -m 'Release #{version}'"
102
- sh "git tag v#{version}"
103
- sh "git push origin master"
104
- sh "git push origin v#{version}"
105
- sh "gem push pkg/#{name}-#{version}.gem"
106
- end
107
-
108
- desc "Build #{gem_file} into the pkg directory"
109
- task :build => [:gemspec, :update_bundle] do
110
- sh "mkdir -p pkg"
111
- sh "gem build #{gemspec_file}"
112
- sh "mv #{gem_file} pkg"
113
- end
114
-
115
- desc "Generate #{gemspec_file}"
116
- task :gemspec => :validate do
117
- # read spec file and split out manifest section
118
- spec = File.read(gemspec_file)
119
- head, manifest, tail = spec.split(" # = MANIFEST =\n")
120
-
121
- # replace name version and date
122
- replace_header(head, :name)
123
- replace_header(head, :version)
124
- replace_header(head, :date)
125
- #comment this out if your rubyforge_project has a different name
126
- replace_header(head, :rubyforge_project)
127
-
128
- # determine file list from git ls-files
129
- files = `git ls-files`.
130
- split("\n").
131
- sort.
132
- reject { |file| file =~ /^\./ }.
133
- reject { |file| file =~ /^(rdoc|pkg)/ }.
134
- map { |file| " #{file}" }.
135
- join("\n")
136
-
137
- # piece file back together and write
138
- manifest = " s.files = %w[\n#{files}\n ]\n"
139
- spec = [head, manifest, tail].join(" # = MANIFEST =\n")
140
- File.open(gemspec_file, 'w') { |io| io.write(spec) }
141
- puts "Updated #{gemspec_file}"
142
- end
143
-
144
- desc "Update #{name} in bundle"
145
- task :update_bundle => :validate do
146
- `bundle update #{name}`
147
- puts "Bundled #{name} version #{version}"
148
- end
149
-
150
- desc "Validate #{gemspec_file}"
151
- task :validate do
152
- libfiles = Dir['lib/*'] + Dir['lib/*/*'] - [lib_path, File.dirname(lib_path)]
153
- unless libfiles.empty?
154
- puts "Directory `lib` should only contain a `#{lib_path}` file and `#{name}` dir."
155
- exit!
156
- end
157
- unless Dir['VERSION*'].empty?
158
- puts "A `VERSION` file at root level violates Gem best practices."
159
- exit!
160
- end
161
- end
8
+ task :default => :test
@@ -2,17 +2,14 @@ require 'metriks'
2
2
 
3
3
  module Metriks
4
4
  class Middleware
5
- VERSION = '2.0.0'
5
+ VERSION = '2.1.0'
6
6
 
7
7
  REQUEST_DELAY = 'request_delay'
8
- HEROKU_DYNOS_IN_USE = 'heroku.dynos_in_use'
9
8
  ERROR_RESPONSE = 'responses.error'
10
9
  NOT_FOUND_RESPONSE = 'responses.not_found'
11
10
  NOT_MODIFIED_RESPONSE = 'responses.not_modified'
12
11
  CONTENT_LENGTH = 'responses.content_length'
13
-
14
12
  REQUEST_START_HEADER = 'HTTP_X_REQUEST_START'
15
- HEROKU_DYNOS_IN_USE_HEADER = 'HTTP_X_HEROKU_DYNOS_IN_USE'
16
13
 
17
14
  def initialize(app)
18
15
  @app = app
@@ -21,7 +18,6 @@ module Metriks
21
18
  def call(env)
22
19
  time_response(env) do
23
20
  record_request_delay env
24
- record_heroku_dynos_in_use env
25
21
  record_response env
26
22
  call_downstream env
27
23
  end
@@ -44,12 +40,6 @@ module Metriks
44
40
  Metriks.histogram(REQUEST_DELAY).update(delay)
45
41
  end
46
42
 
47
- def record_heroku_dynos_in_use(env)
48
- dynos = env[HEROKU_DYNOS_IN_USE_HEADER]
49
- return unless dynos
50
- Metriks.histogram(HEROKU_DYNOS_IN_USE).update(dynos.to_i)
51
- end
52
-
53
43
  def record_response(env)
54
44
  original_callback = env['async.callback']
55
45
  env['async.callback'] = lambda do |(status, headers, body)|
@@ -1,73 +1,36 @@
1
- ## This is the rakegem gemspec template. Make sure you read and understand
2
- ## all of the comments. Some sections require modification, and others can
3
- ## be deleted if you don't need them. Once you understand the contents of
4
- ## this file, feel free to delete any comments that begin with two hash marks.
5
- ## You can find comprehensive Gem::Specification documentation, at
6
- ## http://docs.rubygems.org/read/chapter/20
7
- Gem::Specification.new do |s|
8
- s.specification_version = 2 if s.respond_to? :specification_version=
9
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
10
- s.rubygems_version = '1.3.5'
1
+ lib = "metriks-middleware"
2
+ lib_file = File.expand_path("../lib/metriks/middleware.rb", __FILE__)
3
+ File.read(lib_file) =~ /\bVERSION\s*=\s*["'](.+?)["']/
4
+ version = $1
11
5
 
12
- ## Leave these as is they will be modified for you by the rake gemspec task.
13
- ## If your rubyforge_project name is different, then edit it and comment out
14
- ## the sub! line in the Rakefile
15
- s.name = 'metriks-middleware'
16
- s.version = '2.0.0'
17
- s.date = '2013-02-22'
6
+ Gem::Specification.new do |spec|
7
+ spec.specification_version = 2 if spec.respond_to? :specification_version=
8
+ spec.required_rubygems_version = '>= 1.3.6'
18
9
 
19
- ## Make sure your summary is short. The description may be as long
20
- ## as you like.
21
- s.summary = "Rack middleware for metriks"
22
- s.description = "Rack middleware to track throughput and response time with metriks."
10
+ spec.name = lib
11
+ spec.version = version
23
12
 
24
- ## List the primary authors. If there are a bunch of authors, it's probably
25
- ## better to set the email to an email list or something. If you don't have
26
- ## a custom homepage, consider using your GitHub URL or the like.
27
- s.authors = ["Larry Marburger"]
28
- s.email = 'larry@marburger.cc'
29
- s.homepage = 'https://github.com/lmarburger/metriks-middleware'
13
+ spec.summary = "Rack middleware for metriks"
14
+ spec.description = "Rack middleware to track throughput and response time with metriks."
30
15
 
31
- ## This gets added to the $LOAD_PATH so that 'lib/NAME.rb' can be required as
32
- ## require 'NAME.rb' or'/lib/NAME/file.rb' can be as require 'NAME/file.rb'
33
- s.require_paths = %w[lib]
16
+ spec.authors = ["Larry Marburger"]
17
+ spec.email = 'larry@marburger.cc'
18
+ spec.homepage = 'https://github.com/lmarburger/metriks-middleware'
19
+ spec.licenses = ['MIT']
34
20
 
35
- ## Specify any RDoc options here. You'll want to add your README and
36
- ## LICENSE files to the extra_rdoc_files list.
37
- s.rdoc_options = ["--charset=UTF-8"]
38
- s.extra_rdoc_files = %w[README.md LICENSE]
21
+ spec.add_dependency 'metriks', '~> 0.9.9'
22
+ spec.add_development_dependency 'mocha', '~> 0.11.4'
23
+ spec.add_development_dependency 'rake', '>= 0.9'
39
24
 
40
- ## List your runtime dependencies here. Runtime dependencies are those
41
- ## that are needed for an end user to actually USE your code.
42
- s.add_dependency 'metriks', '~> 0.9.9'
25
+ spec.files = %w(Gemfile LICENSE README.md Rakefile)
26
+ spec.files << "#{lib}.gemspec"
27
+ spec.files += Dir.glob("lib/**/*.rb")
28
+ spec.files += Dir.glob("test/**/*.rb")
29
+ spec.files += Dir.glob("script/*")
43
30
 
44
- ## List your development dependencies here. Development dependencies are
45
- ## those that are only needed during development
46
- s.add_development_dependency 'mocha', '~> 0.11.4'
47
- s.add_development_dependency 'rake', '>= 0.9'
31
+ dev_null = File.exist?('/dev/null') ? '/dev/null' : 'NUL'
32
+ git_files = `git ls-files -z 2>#{dev_null}`
33
+ spec.files &= git_files.split("\0") if $?.success?
48
34
 
49
- ## Leave this section as-is. It will be automatically generated from the
50
- ## contents of your Git repository via the gemspec task. DO NOT REMOVE
51
- ## THE MANIFEST COMMENTS, they are used as delimiters by the task.
52
- # = MANIFEST =
53
- s.files = %w[
54
- Gemfile
55
- LICENSE
56
- README.md
57
- Rakefile
58
- example/Gemfile
59
- example/Gemfile.lock
60
- example/Procfile
61
- example/config.ru
62
- lib/metriks/middleware.rb
63
- metriks-middleware.gemspec
64
- test/async_app_test.rb
65
- test/sync_app_test.rb
66
- test/test_helper.rb
67
- ]
68
- # = MANIFEST =
69
-
70
- ## Test files will be grabbed from the file list. Make sure the path glob
71
- ## matches what you actually use.
72
- s.test_files = s.files.select { |path| path =~ /^test\/.*_test\.rb/ }
35
+ spec.test_files = Dir.glob("test/**/*.rb")
73
36
  end
data/script/package ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env bash
2
+ # Usage: script/gem
3
+ # Updates the gemspec and builds a new gem in the pkg directory.
4
+
5
+ mkdir -p pkg
6
+ gem build *.gemspec
7
+ mv *.gem pkg
data/script/release ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env bash
2
+ # Usage: script/release
3
+ # Build the package, tag a commit, push it to origin, and then release the
4
+ # package publicly.
5
+
6
+ # set -e
7
+
8
+ version="$(script/package | grep Version: | awk '{print $2}')"
9
+ [ -n "$version" ] || exit 1
10
+
11
+ git commit -a -m "Release $version"
12
+ git tag "v$version"
13
+ git push origin
14
+ git push origin "v$version"
15
+ gem push pkg/*-${version}.gem
@@ -167,19 +167,4 @@ class AsyncAppTest < Test::Unit::TestCase
167
167
  delay = Metriks.histogram('request_delay').mean
168
168
  assert_equal 0, delay
169
169
  end
170
-
171
- def test_omits_heroku_dynos_in_use
172
- Metriks::Middleware.new(@downstream).call(@env)
173
-
174
- used = Metriks.histogram('heroku.dynos_in_use').mean
175
- assert_equal 0, used
176
- end
177
-
178
- def test_records_heroku_dynos_in_use
179
- @env.merge! 'HTTP_X_HEROKU_DYNOS_IN_USE' => '42'
180
- Metriks::Middleware.new(@downstream).call(@env)
181
-
182
- dynos = Metriks.histogram('heroku.dynos_in_use').mean
183
- assert_equal 42, dynos
184
- end
185
170
  end
@@ -106,19 +106,4 @@ class SyncAppTest < Test::Unit::TestCase
106
106
  delay = Metriks.histogram('request_delay').mean
107
107
  assert_equal 0, delay
108
108
  end
109
-
110
- def test_omits_heroku_dynos_in_use
111
- Metriks::Middleware.new(@downstream).call(@env)
112
-
113
- used = Metriks.histogram('heroku.dynos_in_use').mean
114
- assert_equal 0, used
115
- end
116
-
117
- def test_records_heroku_dynos_in_use
118
- @env.merge! 'HTTP_X_HEROKU_DYNOS_IN_USE' => '42'
119
- Metriks::Middleware.new(@downstream).call(@env)
120
-
121
- dynos = Metriks.histogram('heroku.dynos_in_use').mean
122
- assert_equal 42, dynos
123
- end
124
109
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metriks-middleware
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
5
- prerelease:
4
+ version: 2.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Larry Marburger
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-22 00:00:00.000000000 Z
11
+ date: 2013-03-22 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: metriks
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: mocha
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rake
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ! '>='
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ! '>='
60
53
  - !ruby/object:Gem::Version
@@ -63,51 +56,44 @@ description: Rack middleware to track throughput and response time with metriks.
63
56
  email: larry@marburger.cc
64
57
  executables: []
65
58
  extensions: []
66
- extra_rdoc_files:
67
- - README.md
68
- - LICENSE
59
+ extra_rdoc_files: []
69
60
  files:
70
61
  - Gemfile
71
62
  - LICENSE
72
63
  - README.md
73
64
  - Rakefile
74
- - example/Gemfile
75
- - example/Gemfile.lock
76
- - example/Procfile
77
- - example/config.ru
78
- - lib/metriks/middleware.rb
79
65
  - metriks-middleware.gemspec
66
+ - lib/metriks/middleware.rb
80
67
  - test/async_app_test.rb
81
68
  - test/sync_app_test.rb
82
69
  - test/test_helper.rb
70
+ - script/package
71
+ - script/release
83
72
  homepage: https://github.com/lmarburger/metriks-middleware
84
- licenses: []
73
+ licenses:
74
+ - MIT
75
+ metadata: {}
85
76
  post_install_message:
86
- rdoc_options:
87
- - --charset=UTF-8
77
+ rdoc_options: []
88
78
  require_paths:
89
79
  - lib
90
80
  required_ruby_version: !ruby/object:Gem::Requirement
91
- none: false
92
81
  requirements:
93
82
  - - ! '>='
94
83
  - !ruby/object:Gem::Version
95
84
  version: '0'
96
- segments:
97
- - 0
98
- hash: -1952576612337173392
99
85
  required_rubygems_version: !ruby/object:Gem::Requirement
100
- none: false
101
86
  requirements:
102
87
  - - ! '>='
103
88
  - !ruby/object:Gem::Version
104
- version: '0'
89
+ version: 1.3.6
105
90
  requirements: []
106
91
  rubyforge_project:
107
- rubygems_version: 1.8.23
92
+ rubygems_version: 2.0.3
108
93
  signing_key:
109
94
  specification_version: 2
110
95
  summary: Rack middleware for metriks
111
96
  test_files:
112
97
  - test/async_app_test.rb
113
98
  - test/sync_app_test.rb
99
+ - test/test_helper.rb
data/example/Gemfile DELETED
@@ -1,6 +0,0 @@
1
- source :rubygems
2
-
3
- gem 'metriks-middleware'
4
- gem 'thin'
5
-
6
- gem 'foreman', group: 'development'
data/example/Gemfile.lock DELETED
@@ -1,30 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- atomic (1.0.1)
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)
10
- hitimes (1.1.1)
11
- metriks (0.9.9.1)
12
- atomic (~> 1.0)
13
- avl_tree (~> 1.1.2)
14
- hitimes (~> 1.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)
23
-
24
- PLATFORMS
25
- ruby
26
-
27
- DEPENDENCIES
28
- foreman
29
- metriks-middleware
30
- thin
data/example/Procfile DELETED
@@ -1 +0,0 @@
1
- web: bundle exec thin start -p $PORT
data/example/config.ru DELETED
@@ -1,40 +0,0 @@
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)