method_meter 0.4.0 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
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: