formatted-metrics 1.1.1 → 1.1.2
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 +4 -4
- data/formatted-metrics.gemspec +1 -0
- data/lib/faraday/instrumentation.rb +36 -0
- data/lib/metrics.rb +18 -7
- data/lib/metrics/grouping.rb +20 -6
- data/lib/metrics/instrumenter.rb +3 -7
- data/lib/metrics/middleware_helpers.rb +32 -0
- data/lib/metrics/version.rb +1 -1
- data/lib/rack/instrumentation.rb +5 -23
- data/spec/faraday/instrumentation_spec.rb +21 -0
- data/spec/metrics/grouping_spec.rb +18 -0
- metadata +19 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: b72967d33d3eaeaefa60e66a94b4df665733bb66
         | 
| 4 | 
            +
              data.tar.gz: 80529c68a14a80c2f7127385440f090a9f446383
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 488dfe4484cbc9d34340ae4c307de143472ad257b0db4a0eae5002ca1f55069785ae1967f1d19aed1616e860790ee136b6211bb89d9665f6ff91544cf165bceb
         | 
| 7 | 
            +
              data.tar.gz: 957744dc87ce70b5663d4cef80a816e46537b4a7a4c90bad0495b9750c1721a8bd1dd9ad678d99af65b56f09576add7550b8c2eda7cf6fe68b059c018706a7e9
         | 
    
        data/formatted-metrics.gemspec
    CHANGED
    
    
| @@ -0,0 +1,36 @@ | |
| 1 | 
            +
            require 'metrics'
         | 
| 2 | 
            +
            require 'faraday'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Faraday
         | 
| 5 | 
            +
              class Instrumentation < Faraday::Middleware
         | 
| 6 | 
            +
                include Metrics::MiddlewareHelpers
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                def initialize(app, options = {})
         | 
| 9 | 
            +
                  super(app)
         | 
| 10 | 
            +
                  @options = { metric: 'faraday.request' }.merge(options)
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                def call(env)
         | 
| 14 | 
            +
                  time = Time.now
         | 
| 15 | 
            +
                  response = @app.call(env)
         | 
| 16 | 
            +
                  duration = (Time.now - time) * 1000.0
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  request_metrics response.status, duration, metric: metric, source: source(env)
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  response
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              private
         | 
| 24 | 
            +
                attr_reader :options
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                def source(env)
         | 
| 27 | 
            +
                  method = env[:method]
         | 
| 28 | 
            +
                  path   = env[:url].path.gsub(/\//, '.')
         | 
| 29 | 
            +
                  "#{method}#{path}"
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                def metric
         | 
| 33 | 
            +
                  options[:metric]
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
            end
         | 
    
        data/lib/metrics.rb
    CHANGED
    
    | @@ -3,15 +3,26 @@ require 'metrics/core_ext' | |
| 3 3 | 
             
            require 'metrics/railtie' if defined?(Rails)
         | 
| 4 4 |  | 
| 5 5 | 
             
            module Metrics
         | 
| 6 | 
            -
              autoload : | 
| 7 | 
            -
              autoload : | 
| 8 | 
            -
              autoload : | 
| 9 | 
            -
              autoload : | 
| 10 | 
            -
              autoload : | 
| 6 | 
            +
              autoload :MiddlewareHelpers, 'metrics/middleware_helpers'
         | 
| 7 | 
            +
              autoload :Configuration,     'metrics/configuration'
         | 
| 8 | 
            +
              autoload :Instrumentable,    'metrics/instrumentable'
         | 
| 9 | 
            +
              autoload :Instrumenter,      'metrics/instrumenter'
         | 
| 10 | 
            +
              autoload :Grouping,          'metrics/grouping'
         | 
| 11 | 
            +
              autoload :Handler,           'metrics/handler'
         | 
| 11 12 |  | 
| 12 13 | 
             
              module Formatters
         | 
| 13 | 
            -
                autoload :Base, | 
| 14 | 
            -
                autoload :L2Met, | 
| 14 | 
            +
                autoload :Base,            'metrics/formatters/base'
         | 
| 15 | 
            +
                autoload :L2Met,           'metrics/formatters/l2met'
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              module Helpers
         | 
| 19 | 
            +
                def self.extract_options!(options)
         | 
| 20 | 
            +
                  if options.last.is_a?(Hash)
         | 
| 21 | 
            +
                    options.pop
         | 
| 22 | 
            +
                  else
         | 
| 23 | 
            +
                    {}
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
                end
         | 
| 15 26 | 
             
              end
         | 
| 16 27 |  | 
| 17 28 | 
             
              class << self
         | 
    
        data/lib/metrics/grouping.rb
    CHANGED
    
    | @@ -2,30 +2,44 @@ module Metrics | |
| 2 2 | 
             
              # Public: Starts a new Grouping context, which allows for multiple
         | 
| 3 3 | 
             
              # instruments to output on a single line.
         | 
| 4 4 | 
             
              class Grouping
         | 
| 5 | 
            -
                attr_reader :namespace, :instrumenters
         | 
| 5 | 
            +
                attr_reader :namespace, :instrumenters, :options
         | 
| 6 6 |  | 
| 7 7 | 
             
                def self.instrument(*args, &block)
         | 
| 8 8 | 
             
                  new(*args, &block).instrumenters
         | 
| 9 9 | 
             
                end
         | 
| 10 10 |  | 
| 11 | 
            -
                def initialize(namespace = nil, &block)
         | 
| 11 | 
            +
                def initialize(namespace = nil, options = {}, &block)
         | 
| 12 12 | 
             
                  @instrumenters = []
         | 
| 13 13 | 
             
                  @namespace     = namespace
         | 
| 14 | 
            +
                  @options       = options
         | 
| 14 15 | 
             
                  block.call(self)
         | 
| 15 16 | 
             
                end
         | 
| 16 17 |  | 
| 17 18 | 
             
                def increment(metric)
         | 
| 18 | 
            -
                  instrument metric, 1, type: 'count'
         | 
| 19 | 
            +
                  instrument metric, 1, options.merge(type: 'count')
         | 
| 19 20 | 
             
                end
         | 
| 20 21 |  | 
| 21 22 | 
             
                def instrument(metric, *args, &block)
         | 
| 22 23 | 
             
                  metric = "#{namespace}.#{metric}" if namespace
         | 
| 23 | 
            -
                  instrumenters.push(Instrumenter.instrument(metric, *args, &block))
         | 
| 24 | 
            +
                  instrumenters.push(Instrumenter.instrument(metric, *merge_options(args), &block))
         | 
| 24 25 | 
             
                end
         | 
| 25 26 |  | 
| 26 | 
            -
                def group(nested_namespace = nil, &block)
         | 
| 27 | 
            +
                def group(nested_namespace = nil, *args, &block)
         | 
| 27 28 | 
             
                  ns = nested_namespace ? "#{namespace}.#{nested_namespace}" : namespace
         | 
| 28 | 
            -
                  instrumenters.push(*Grouping.instrument(ns, &block))
         | 
| 29 | 
            +
                  instrumenters.push(*Grouping.instrument(ns, *merge_options(args), &block))
         | 
| 29 30 | 
             
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              private
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                def merge_options(args)
         | 
| 35 | 
            +
                  opts = extract_options!(args)
         | 
| 36 | 
            +
                  args << options.merge(opts)
         | 
| 37 | 
            +
                  args
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                def extract_options!(options)
         | 
| 41 | 
            +
                  Metrics::Helpers.extract_options!(options)
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
             | 
| 30 44 | 
             
              end
         | 
| 31 45 | 
             
            end
         | 
    
        data/lib/metrics/instrumenter.rb
    CHANGED
    
    | @@ -11,7 +11,7 @@ module Metrics | |
| 11 11 | 
             
              class Instrumenter
         | 
| 12 12 | 
             
                TIME_UNITS = 'ms'.freeze
         | 
| 13 13 |  | 
| 14 | 
            -
                attr_reader :metric
         | 
| 14 | 
            +
                attr_reader :metric, :options
         | 
| 15 15 |  | 
| 16 16 | 
             
                def self.instrument(*args, &block)
         | 
| 17 17 | 
             
                  instrument = new(*args, &block)
         | 
| @@ -53,7 +53,7 @@ module Metrics | |
| 53 53 | 
             
                end
         | 
| 54 54 |  | 
| 55 55 | 
             
              private
         | 
| 56 | 
            -
                attr_reader : | 
| 56 | 
            +
                attr_reader :block
         | 
| 57 57 |  | 
| 58 58 | 
             
                def timing?
         | 
| 59 59 | 
             
                  !block.nil?
         | 
| @@ -68,11 +68,7 @@ module Metrics | |
| 68 68 | 
             
                end
         | 
| 69 69 |  | 
| 70 70 | 
             
                def extract_options!(options)
         | 
| 71 | 
            -
                   | 
| 72 | 
            -
                    options.pop
         | 
| 73 | 
            -
                  else
         | 
| 74 | 
            -
                    {}
         | 
| 75 | 
            -
                  end
         | 
| 71 | 
            +
                  Metrics::Helpers.extract_options!(options)
         | 
| 76 72 | 
             
                end
         | 
| 77 73 | 
             
              end
         | 
| 78 74 | 
             
            end
         | 
| @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            require 'metrics/middleware_helpers'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Metrics
         | 
| 4 | 
            +
              module MiddlewareHelpers
         | 
| 5 | 
            +
                private
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def request_metrics(status, duration, options = {})
         | 
| 8 | 
            +
                  metric = options[:metric]
         | 
| 9 | 
            +
                  source = options[:source]
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  group metric, source: source do |group|
         | 
| 12 | 
            +
                    group.instrument 'time', duration, units: 'ms'
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                    group.group 'status' do |group|
         | 
| 15 | 
            +
                      group.increment status
         | 
| 16 | 
            +
                      group.increment "#{status.to_s[0]}xx"
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                      group.instrument "#{status}.time", duration, units: 'ms'
         | 
| 19 | 
            +
                      group.instrument "#{status.to_s[0]}xx.time", duration, units: 'ms'
         | 
| 20 | 
            +
                    end
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def instrument(*args, &block)
         | 
| 25 | 
            +
                  Metrics.instrument(*args, &block)
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                def group(*args, &block)
         | 
| 29 | 
            +
                  Metrics.group(*args, &block)
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
            end
         | 
    
        data/lib/metrics/version.rb
    CHANGED
    
    
    
        data/lib/rack/instrumentation.rb
    CHANGED
    
    | @@ -1,5 +1,9 @@ | |
| 1 | 
            +
            require 'metrics/middleware_helpers'
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            module Rack
         | 
| 2 4 | 
             
              class Instrumentation
         | 
| 5 | 
            +
                include Metrics::MiddlewareHelpers
         | 
| 6 | 
            +
             | 
| 3 7 | 
             
                def initialize(app)
         | 
| 4 8 | 
             
                  @app = app
         | 
| 5 9 | 
             
                end
         | 
| @@ -12,7 +16,7 @@ module Rack | |
| 12 16 | 
             
                    response = @app.call(env)
         | 
| 13 17 | 
             
                    duration = (Time.now - time) * 1000.0
         | 
| 14 18 |  | 
| 15 | 
            -
                    request_metrics response.first, duration
         | 
| 19 | 
            +
                    request_metrics response.first, duration, metric: 'rack.request'
         | 
| 16 20 |  | 
| 17 21 | 
             
                    response
         | 
| 18 22 | 
             
                  rescue Exception => raised
         | 
| @@ -28,28 +32,6 @@ module Rack | |
| 28 32 |  | 
| 29 33 | 
             
                  instrument 'rack.heroku.queue.wait_time', env['HTTP_X_HEROKU_QUEUE_WAIT_TIME'].to_f, units: 'ms'
         | 
| 30 34 | 
             
                end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                def request_metrics(status, duration)
         | 
| 33 | 
            -
                  group 'rack.request' do |group|
         | 
| 34 | 
            -
                    group.instrument 'time', duration, units: 'ms'
         | 
| 35 | 
            -
             | 
| 36 | 
            -
                    group.group 'status' do |group|
         | 
| 37 | 
            -
                      group.increment status
         | 
| 38 | 
            -
                      group.increment "#{status.to_s[0]}xx"
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                      group.instrument "#{status}.time", duration, units: 'ms'
         | 
| 41 | 
            -
                      group.instrument "#{status.to_s[0]}xx.time", duration, units: 'ms'
         | 
| 42 | 
            -
                    end
         | 
| 43 | 
            -
                  end
         | 
| 44 | 
            -
                end
         | 
| 45 | 
            -
             | 
| 46 | 
            -
                def instrument(*args, &block)
         | 
| 47 | 
            -
                  Metrics.instrument(*args, &block)
         | 
| 48 | 
            -
                end
         | 
| 49 | 
            -
             | 
| 50 | 
            -
                def group(*args, &block)
         | 
| 51 | 
            -
                  Metrics.group(*args, &block)
         | 
| 52 | 
            -
                end
         | 
| 53 35 | 
             
              end
         | 
| 54 36 | 
             
            end
         | 
| 55 37 |  | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
            require 'faraday/instrumentation'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            describe Faraday::Instrumentation do
         | 
| 5 | 
            +
              let(:response) { double('response', status: 200) }
         | 
| 6 | 
            +
              let(:app) { double('app', call: response) }
         | 
| 7 | 
            +
              let(:middleware) { described_class.new(app) }
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              describe '.call' do
         | 
| 10 | 
            +
                let(:uri) { URI.parse('http://google.com/v1/foo?param=1') }
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                it 'returns the response' do
         | 
| 13 | 
            +
                  expect(middleware.call(url: uri)).to eq response
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                it 'sets the source' do
         | 
| 17 | 
            +
                  Metrics.should_receive(:group).with('faraday.request', source: 'get.v1.foo').and_call_original
         | 
| 18 | 
            +
                  expect(middleware.call(method: :get, url: uri)).to eq response
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
| @@ -38,5 +38,23 @@ describe Metrics::Grouping do | |
| 38 38 |  | 
| 39 39 | 
             
                  expect(group.instrumenters.first.metric).to eq 'rack.request.time'
         | 
| 40 40 | 
             
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                it 'allows for options to be passed' do
         | 
| 43 | 
            +
                  group = described_class.new 'rack', source: 'foo' do |group|
         | 
| 44 | 
            +
                    group.instrument 'request.time', 500, units: 'ms'
         | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  expect(group.instrumenters.first.options).to eq(source: 'foo', units: 'ms')
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                it 'allows for top level options to be passed to nested groups' do
         | 
| 51 | 
            +
                  group = described_class.new 'rack', source: 'foo' do |group|
         | 
| 52 | 
            +
                    group.group 'request' do |g|
         | 
| 53 | 
            +
                      g.instrument 'time', 500, units: 'ms'
         | 
| 54 | 
            +
                    end
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  expect(group.instrumenters.first.options).to eq(source: 'foo', units: 'ms')
         | 
| 58 | 
            +
                end
         | 
| 41 59 | 
             
              end
         | 
| 42 60 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: formatted-metrics
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.1. | 
| 4 | 
            +
              version: 1.1.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Eric J. Holmes
         | 
| @@ -52,6 +52,20 @@ dependencies: | |
| 52 52 | 
             
                - - ~>
         | 
| 53 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 54 | 
             
                    version: '2.14'
         | 
| 55 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            +
              name: faraday
         | 
| 57 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - ~>
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: 0.9.0
         | 
| 62 | 
            +
              type: :development
         | 
| 63 | 
            +
              prerelease: false
         | 
| 64 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                requirements:
         | 
| 66 | 
            +
                - - ~>
         | 
| 67 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                    version: 0.9.0
         | 
| 55 69 | 
             
            description: Easily output formatted metrics to stdout
         | 
| 56 70 | 
             
            email:
         | 
| 57 71 | 
             
            - eric@ejholmes.net
         | 
| @@ -67,6 +81,7 @@ files: | |
| 67 81 | 
             
            - README.md
         | 
| 68 82 | 
             
            - Rakefile
         | 
| 69 83 | 
             
            - formatted-metrics.gemspec
         | 
| 84 | 
            +
            - lib/faraday/instrumentation.rb
         | 
| 70 85 | 
             
            - lib/formatted-metrics.rb
         | 
| 71 86 | 
             
            - lib/metrics.rb
         | 
| 72 87 | 
             
            - lib/metrics/configuration.rb
         | 
| @@ -77,10 +92,12 @@ files: | |
| 77 92 | 
             
            - lib/metrics/handler.rb
         | 
| 78 93 | 
             
            - lib/metrics/instrumentable.rb
         | 
| 79 94 | 
             
            - lib/metrics/instrumenter.rb
         | 
| 95 | 
            +
            - lib/metrics/middleware_helpers.rb
         | 
| 80 96 | 
             
            - lib/metrics/railtie.rb
         | 
| 81 97 | 
             
            - lib/metrics/version.rb
         | 
| 82 98 | 
             
            - lib/rack/instrumentation.rb
         | 
| 83 99 | 
             
            - lib/sidekiq/middleware/server/instrumentation.rb
         | 
| 100 | 
            +
            - spec/faraday/instrumentation_spec.rb
         | 
| 84 101 | 
             
            - spec/metrics/formatters/l2met_spec.rb
         | 
| 85 102 | 
             
            - spec/metrics/grouping_spec.rb
         | 
| 86 103 | 
             
            - spec/metrics/instrumentable_spec.rb
         | 
| @@ -113,6 +130,7 @@ signing_key: | |
| 113 130 | 
             
            specification_version: 4
         | 
| 114 131 | 
             
            summary: Easily output formatted metrics to stdout
         | 
| 115 132 | 
             
            test_files:
         | 
| 133 | 
            +
            - spec/faraday/instrumentation_spec.rb
         | 
| 116 134 | 
             
            - spec/metrics/formatters/l2met_spec.rb
         | 
| 117 135 | 
             
            - spec/metrics/grouping_spec.rb
         | 
| 118 136 | 
             
            - spec/metrics/instrumentable_spec.rb
         |