method_meter 0.4.0 → 0.4.3
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/lib/method_meter.rb +41 -37
- data/lib/method_meter/version.rb +1 -1
- data/method_meter.gemspec +1 -0
- metadata +16 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 3a5ff992ee06f786d08c62136e9c793d3c0810ce19b70feefadf298004d83d58
         | 
| 4 | 
            +
              data.tar.gz: 36882deddbc956bcfc5baa29326f03a713c27de09cd00f833d88da6acf722ae4
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: bb17a7e2982862a37acdadaf2adc7f981b06be55b57188a6e1ecb31cdcb1301ba9ad70f01fb21e06ca764931c4a3305bf7a01e88ba5897c9750b7dad2ffe2ccf
         | 
| 7 | 
            +
              data.tar.gz: 41c3ed52140bbe3260f12152385261ac6360f8de87479674277277c146e81ea3589162b1cc35cddf1c442fd946fa05496ec670a09282f217f82076b0ab430686
         | 
    
        data/lib/method_meter.rb
    CHANGED
    
    | @@ -1,11 +1,10 @@ | |
| 1 1 | 
             
            require 'method_meter/version'
         | 
| 2 2 |  | 
| 3 3 | 
             
            require 'active_support'
         | 
| 4 | 
            -
            require 'active_support/core_ext/string'
         | 
| 5 4 | 
             
            require 'defined_methods'
         | 
| 6 5 |  | 
| 7 6 | 
             
            module MethodMeter
         | 
| 8 | 
            -
              mattr_accessor : | 
| 7 | 
            +
              mattr_accessor :metered_methods, :subscribers, :data, :exceptions
         | 
| 9 8 |  | 
| 10 9 | 
             
              class << self
         | 
| 11 10 | 
             
                def observe(object, excepted_methods=[])
         | 
| @@ -14,7 +13,7 @@ module MethodMeter | |
| 14 13 | 
             
                  DefinedMethods.in(object).each do |group|
         | 
| 15 14 | 
             
                    group[:object].module_eval do
         | 
| 16 15 | 
             
                      group[:methods].each do |method|
         | 
| 17 | 
            -
                        MethodMeter. | 
| 16 | 
            +
                        MethodMeter.define_metering_method(group[:object], method, group[:private], group[:protected], group[:singleton])
         | 
| 18 17 | 
             
                      end
         | 
| 19 18 | 
             
                    end
         | 
| 20 19 | 
             
                  end
         | 
| @@ -23,10 +22,10 @@ module MethodMeter | |
| 23 22 | 
             
                def measure!(key)
         | 
| 24 23 | 
             
                  data[key] = {}
         | 
| 25 24 |  | 
| 26 | 
            -
                   | 
| 27 | 
            -
                    subscribers << ActiveSupport::Notifications.subscribe( | 
| 28 | 
            -
                      data[key][ | 
| 29 | 
            -
                      data[key][ | 
| 25 | 
            +
                  metered_methods.each do |metered_method|
         | 
| 26 | 
            +
                    subscribers << ActiveSupport::Notifications.subscribe(metered_method) do |_, started_at, finished_at, _, _|
         | 
| 27 | 
            +
                      data[key][metered_method] = [] unless data[key].has_key?(metered_method)
         | 
| 28 | 
            +
                      data[key][metered_method] << (finished_at - started_at)
         | 
| 30 29 | 
             
                    end
         | 
| 31 30 | 
             
                  end
         | 
| 32 31 |  | 
| @@ -38,26 +37,28 @@ module MethodMeter | |
| 38 37 | 
             
                end
         | 
| 39 38 |  | 
| 40 39 | 
             
                def measurement
         | 
| 41 | 
            -
                   | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
                         | 
| 56 | 
            -
                       | 
| 57 | 
            -
             | 
| 58 | 
            -
                      { key => _measurement }
         | 
| 40 | 
            +
                  measurement = {}
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  data.each do |key, measurement_records|
         | 
| 43 | 
            +
                    _measurement = measurement_records.collect do |method_name, records|
         | 
| 44 | 
            +
                      total_calls   = records.size
         | 
| 45 | 
            +
                      total_runtime = records.reduce(:+) * 1000
         | 
| 46 | 
            +
                      average       = total_runtime / total_calls
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                      {
         | 
| 49 | 
            +
                        method: method_name,
         | 
| 50 | 
            +
                        min: records.min * 1000,
         | 
| 51 | 
            +
                        max: records.max * 1000,
         | 
| 52 | 
            +
                        average: average,
         | 
| 53 | 
            +
                        total_runtime: total_runtime,
         | 
| 54 | 
            +
                        total_calls: total_calls,
         | 
| 55 | 
            +
                      }
         | 
| 59 56 | 
             
                    end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                    measurement[key] = _measurement
         | 
| 60 59 | 
             
                  end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                  measurement
         | 
| 61 62 | 
             
                end
         | 
| 62 63 |  | 
| 63 64 | 
             
                def profiling_method_names(method)
         | 
| @@ -66,21 +67,24 @@ module MethodMeter | |
| 66 67 | 
             
                  [method_with_profiling, method_without_profiling]
         | 
| 67 68 | 
             
                end
         | 
| 68 69 |  | 
| 69 | 
            -
                def  | 
| 70 | 
            -
                   | 
| 70 | 
            +
                def meter_method?(method_name)
         | 
| 71 | 
            +
                  object_name, method = method_name.split('#')
         | 
| 72 | 
            +
                  object_name, method = method_name.split('.') if method.nil?
         | 
| 73 | 
            +
                  !exceptions.include?(method.to_sym) && !metered_methods.include?(method_name) && (method_name =~ /_profiling/).nil?
         | 
| 71 74 | 
             
                end
         | 
| 72 75 |  | 
| 73 | 
            -
                def  | 
| 76 | 
            +
                def define_metering_method(object, method, is_private, is_protected, is_singleton)
         | 
| 74 77 | 
             
                  object.module_eval do
         | 
| 75 78 | 
             
                    method_with_profiling, method_without_profiling = MethodMeter.profiling_method_names(method)
         | 
| 76 | 
            -
                     | 
| 79 | 
            +
                    object_name = is_singleton ? object.to_s.split(':').last.gsub('>', '') : object.to_s
         | 
| 80 | 
            +
                    method_name = DefinedMethods.fqmn(object_name, method, is_singleton)
         | 
| 77 81 |  | 
| 78 | 
            -
                    return unless MethodMeter. | 
| 82 | 
            +
                    return unless MethodMeter.meter_method?(method_name)
         | 
| 79 83 |  | 
| 80 | 
            -
                    MethodMeter. | 
| 84 | 
            +
                    MethodMeter.metered_methods << method_name
         | 
| 81 85 |  | 
| 82 86 | 
             
                    define_method(method_with_profiling) do |*args, &block|
         | 
| 83 | 
            -
                      ActiveSupport::Notifications.instrument( | 
| 87 | 
            +
                      ActiveSupport::Notifications.instrument(method_name, args) do
         | 
| 84 88 | 
             
                        send(method_without_profiling, *args, &block)
         | 
| 85 89 | 
             
                      end
         | 
| 86 90 | 
             
                    end
         | 
| @@ -96,11 +100,11 @@ module MethodMeter | |
| 96 100 | 
             
                private
         | 
| 97 101 |  | 
| 98 102 | 
             
                def init(excepted_methods)
         | 
| 99 | 
            -
                  self. | 
| 100 | 
            -
                  self.exceptions  | 
| 101 | 
            -
                  self.exceptions  | 
| 102 | 
            -
                  self.subscribers | 
| 103 | 
            -
                  self.data | 
| 103 | 
            +
                  self.metered_methods = [] if metered_methods.nil?
         | 
| 104 | 
            +
                  self.exceptions      = [] if exceptions.nil?
         | 
| 105 | 
            +
                  self.exceptions     |= excepted_methods
         | 
| 106 | 
            +
                  self.subscribers     = []
         | 
| 107 | 
            +
                  self.data            = {} if data.blank?
         | 
| 104 108 | 
             
                end
         | 
| 105 109 | 
             
              end
         | 
| 106 110 | 
             
            end
         | 
    
        data/lib/method_meter/version.rb
    CHANGED
    
    
    
        data/method_meter.gemspec
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: method_meter
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.4. | 
| 4 | 
            +
              version: 0.4.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Wilfrido T. Nuqui Jr.
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2021- | 
| 11 | 
            +
            date: 2021-02-14 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         | 
| @@ -94,6 +94,20 @@ dependencies: | |
| 94 94 | 
             
                - - "~>"
         | 
| 95 95 | 
             
                  - !ruby/object:Gem::Version
         | 
| 96 96 | 
             
                    version: '3.0'
         | 
| 97 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 98 | 
            +
              name: pry
         | 
| 99 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 100 | 
            +
                requirements:
         | 
| 101 | 
            +
                - - ">="
         | 
| 102 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 103 | 
            +
                    version: '0'
         | 
| 104 | 
            +
              type: :development
         | 
| 105 | 
            +
              prerelease: false
         | 
| 106 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 107 | 
            +
                requirements:
         | 
| 108 | 
            +
                - - ">="
         | 
| 109 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 110 | 
            +
                    version: '0'
         | 
| 97 111 | 
             
            description: MethodMeter is a library module that instruments methods defined in a
         | 
| 98 112 | 
             
              given object.
         | 
| 99 113 | 
             
            email:
         |