overall_request_times 0.4.1 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a88359fad7231f21acf8e61bd40debe33bc7f9be
4
- data.tar.gz: ab4ec3e028f4e324fe8d72ce28512152d8cef0df
3
+ metadata.gz: 6cfb784b756679539fbcc5f3b86bad33a3fde701
4
+ data.tar.gz: af6e82fa47bc035370942cad03a944693742518a
5
5
  SHA512:
6
- metadata.gz: 3543abc8635f44540fb722be6312d2a36c8174a4475a1d61db7c404088a9ab68b45c0c78f339fb8e791b35e13ed6e7c3dc8fef7730c11be8b83146b9358e29ba
7
- data.tar.gz: f647517b2f00643c96c683184ab2fbb7c352127cb6fa3b6bffe50e6333784d0454ecd5cd8f3f23c3f7eaa5828361be65c7cac34fcd2f60c3ece125e6c74b63f1
6
+ metadata.gz: 6b409c978b34f335ddd57eea9a0c33eb91a1f259d765b4511d707e80d15b6b1a5e37c2d843aaaf9946619fb12be05f8c462ded50bce0b292736a12469af775dc
7
+ data.tar.gz: 7bf0ab514ed14e6231418b8fc337695986b9648aa849b3db717d030b2533cdc7116946ba188ce27b265634acc41c5697b323fc69d93687b19629daa91915a2c8
data/README.md CHANGED
@@ -10,9 +10,9 @@ time.
10
10
  Includes a [Faraday](https://github.com/lostisland/faraday) middleware and
11
11
  generic implimentation.
12
12
 
13
- ## WARNING
13
+ ## Threadsafety
14
14
 
15
- I do not know if this is threadsafe yet. Assume it is not.
15
+ It's got mutexes, so it might be threadsafe. No guarantees.
16
16
 
17
17
  ## Installation
18
18
 
@@ -2,8 +2,8 @@ module OverallRequestTimes
2
2
  class GenericTimer
3
3
  include Timer
4
4
 
5
- def initialize(remote_app_name)
6
- timer_setup(remote_app_name)
5
+ def initialize(remote_app_name, in_mutex = false)
6
+ timer_setup(remote_app_name, in_mutex)
7
7
  end
8
8
  end
9
9
  end
@@ -0,0 +1,71 @@
1
+ require "thread"
2
+ module OverallRequestTimes
3
+ class Registry
4
+ def initialize
5
+ @registry = {}
6
+ @mutex = Mutex.new
7
+ end
8
+
9
+ def size
10
+ @mutex.synchronize do
11
+ @registry.size
12
+ end
13
+ end
14
+
15
+ def reset!
16
+ @mutex.synchronize do
17
+ @registry.each { |_, timer| timer.reset! }
18
+ end
19
+ end
20
+
21
+ def register(timer)
22
+ @mutex.synchronize do
23
+ @registry[timer.remote_app_name] ||= timer
24
+ end
25
+ end
26
+
27
+ def total_for(remote_app_name)
28
+ @mutex.synchronize do
29
+ timer = @registry[remote_app_name]
30
+ timer ? timer.total : 0
31
+ end
32
+ end
33
+
34
+ def totals
35
+ @mutex.synchronize do
36
+ @registry.each_with_object({}) do |(remote_app_name, timer), acc|
37
+ acc[remote_app_name] = timer.total
38
+ end
39
+ end
40
+ end
41
+
42
+ def bm(remote_app_name, &block)
43
+ start(remote_app_name)
44
+ begin
45
+ block.call
46
+ ensure
47
+ stop(remote_app_name)
48
+ end
49
+ end
50
+
51
+ def start(remote_app_name)
52
+ @mutex.synchronize do
53
+ @registry[remote_app_name] ||= GenericTimer.new(remote_app_name, true)
54
+ @registry[remote_app_name].start
55
+ end
56
+ end
57
+
58
+ def stop(remote_app_name)
59
+ @mutex.synchronize do
60
+ @registry[remote_app_name] && @registry[remote_app_name].stop
61
+ end
62
+ end
63
+
64
+ def add_duration(remote_app_name, duration_in_seconds)
65
+ @mutex.synchronize do
66
+ @registry[remote_app_name] ||= GenericTimer.new(remote_app_name, true)
67
+ @registry[remote_app_name].add(duration_in_seconds)
68
+ end
69
+ end
70
+ end
71
+ end
@@ -1,23 +1,31 @@
1
+ require "thread"
1
2
  module OverallRequestTimes
2
3
  module Timer
3
4
  attr_reader :remote_app_name
4
5
 
5
- def timer_setup(remote_app_name)
6
+ def timer_setup(remote_app_name, in_mutex = false)
6
7
  @remote_app_name = remote_app_name
8
+ @timer_mutex = Mutex.new
7
9
  reset!
8
- OverallRequestTimes.register(self)
10
+ OverallRequestTimes.register(self) unless in_mutex
9
11
  end
10
12
 
11
13
  def total
12
- @total
14
+ @timer_mutex.synchronize do
15
+ @total
16
+ end
13
17
  end
14
18
 
15
19
  def reset!
16
- @total = 0
20
+ @timer_mutex.synchronize do
21
+ @total = 0
22
+ end
17
23
  end
18
24
 
19
25
  def add(some_time)
20
- @total += some_time
26
+ @timer_mutex.synchronize do
27
+ @total += some_time
28
+ end
21
29
  end
22
30
 
23
31
  def start
@@ -27,7 +35,7 @@ module OverallRequestTimes
27
35
  def stop
28
36
  return unless @started_at
29
37
  ended_at = Time.now
30
- add(ended_at - @started_at)
38
+ add(ended_at.to_f - @started_at.to_f)
31
39
  end
32
40
  end
33
41
  end
@@ -1,3 +1,3 @@
1
1
  module OverallRequestTimes
2
- VERSION = "0.4.1"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -6,54 +6,47 @@ module OverallRequestTimes
6
6
  autoload :FaradayMiddleware, "overall_request_times/faraday_middleware"
7
7
  autoload :GenericTimer, "overall_request_times/generic_timer"
8
8
  autoload :RailsMiddleware, "overall_request_times/rails_middleware"
9
+ autoload :Registry, "overall_request_times/registry"
9
10
 
10
- def self.wipeout_registry
11
- @registry = nil
11
+ def self.registry
12
+ @registry
12
13
  end
13
14
 
14
- def self.registry
15
- @registry ||= {}
15
+ def self.wipeout_registry
16
+ @registry = Registry.new
16
17
  end
17
18
 
18
19
  def self.reset!
19
- registry.each { |_, timer| timer.reset! }
20
+ registry.reset!
20
21
  end
21
22
 
22
23
  def self.register(timer)
23
- registry[timer.remote_app_name] ||= timer
24
+ registry.register(timer)
24
25
  end
25
26
 
26
27
  def self.total_for(remote_app_name)
27
- timer = registry[remote_app_name]
28
- timer ? timer.total : 0
28
+ registry.total_for(remote_app_name)
29
29
  end
30
30
 
31
31
  def self.totals
32
- registry.each_with_object({}) do |(remote_app_name, timer), acc|
33
- acc[remote_app_name] = timer.total
34
- end
32
+ registry.totals
35
33
  end
36
34
 
37
35
  def self.bm(remote_app_name, &block)
38
- start(remote_app_name)
39
- begin
40
- block.call
41
- ensure
42
- stop(remote_app_name)
43
- end
36
+ registry.bm(remote_app_name, &block)
44
37
  end
45
38
 
46
39
  def self.start(remote_app_name)
47
- registry[remote_app_name] ||= GenericTimer.new(remote_app_name)
48
- registry[remote_app_name].start
40
+ registry.start(remote_app_name)
49
41
  end
50
42
 
51
43
  def self.stop(remote_app_name)
52
- registry[remote_app_name] && registry[remote_app_name].stop
44
+ registry.stop(remote_app_name)
53
45
  end
54
46
 
55
47
  def self.add_duration(remote_app_name, duration_in_seconds)
56
- registry[remote_app_name] ||= GenericTimer.new(remote_app_name)
57
- registry[remote_app_name].add(duration_in_seconds)
48
+ registry.add_duration(remote_app_name, duration_in_seconds)
58
49
  end
59
50
  end
51
+
52
+ OverallRequestTimes.wipeout_registry
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: overall_request_times
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Donald Plummer
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-05-27 00:00:00.000000000 Z
11
+ date: 2016-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -115,6 +115,7 @@ files:
115
115
  - lib/overall_request_times/generic_timer.rb
116
116
  - lib/overall_request_times/rails_middleware.rb
117
117
  - lib/overall_request_times/railtie.rb
118
+ - lib/overall_request_times/registry.rb
118
119
  - lib/overall_request_times/timer.rb
119
120
  - lib/overall_request_times/version.rb
120
121
  - overall_request_times.gemspec