overall_request_times 0.4.1 → 0.5.0

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
  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