metriks-middleware 2.0.0 → 2.1.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.
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)