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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b21e5d9564b1e2716490f84775bf00d5381d89259ffd4d5f5ebf5df90390e29
4
- data.tar.gz: be86e7ffbc8f9fba9c0b50200625b9c62c66b2ff8196d279e5072796149c50b8
3
+ metadata.gz: 3a5ff992ee06f786d08c62136e9c793d3c0810ce19b70feefadf298004d83d58
4
+ data.tar.gz: 36882deddbc956bcfc5baa29326f03a713c27de09cd00f833d88da6acf722ae4
5
5
  SHA512:
6
- metadata.gz: a3120f5ecf09523ac2a02a34a35bb80fc43fb2fa4b34d094606bb4c371542f57294a769bc0f743c62827ec6baf9059807267a54a57bda5d22baed79a606ede75
7
- data.tar.gz: b41f1de2cdad17844289822ac761d4e2f057fd776f34432d166e8e6eea31492e1b26c7c9e0220e3024187833fbc01e3094facab2581d0f43dc2d658b6aadf535
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 :events, :subscribers, :data, :exceptions
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.define_instrumented_method(group[:object], method, group[:private], group[:protected], group[:singleton])
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
- events.each do |event|
27
- subscribers << ActiveSupport::Notifications.subscribe(event) do |_, started_at, finished_at, _, _|
28
- data[key][event] = [] unless data[key].has_key?(event)
29
- data[key][event] << (finished_at - started_at)
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
- @measurement ||= begin
42
- data.collect 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
- }
56
- end
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 instrument_method?(method, event_name)
70
- !exceptions.include?(method) && !events.include?(event_name) && (event_name =~ /_profiling/).nil?
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 define_instrumented_method(object, method, is_private, is_protected, is_singleton)
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
- event_name = DefinedMethods.fqmn(object.to_s, method, is_singleton)
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.instrument_method?(method, event_name)
82
+ return unless MethodMeter.meter_method?(method_name)
79
83
 
80
- MethodMeter.events << event_name
84
+ MethodMeter.metered_methods << method_name
81
85
 
82
86
  define_method(method_with_profiling) do |*args, &block|
83
- ActiveSupport::Notifications.instrument(event_name, args) do
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.events = [] if events.nil?
100
- self.exceptions = [] if exceptions.nil?
101
- self.exceptions |= excepted_methods
102
- self.subscribers = []
103
- self.data = {} if data.blank?
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
@@ -1,3 +1,3 @@
1
1
  module MethodMeter
2
- VERSION = '0.4.0'
2
+ VERSION = '0.4.3'
3
3
  end
data/method_meter.gemspec CHANGED
@@ -26,4 +26,5 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency 'bundler'
27
27
  spec.add_development_dependency 'rake', '>= 12.3.3'
28
28
  spec.add_development_dependency 'rspec', '~> 3.0'
29
+ spec.add_development_dependency 'pry'
29
30
  end
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.0
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-01-31 00:00:00.000000000 Z
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: