attention 0.0.5 → 0.0.6

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: d854a64d0631d2acc718ee5d310ee1e492e2e2cf
4
- data.tar.gz: c4403ff3290f181ff6f1f7f5fd63225ee54def8b
3
+ metadata.gz: afeb250d478f294f9f153c598f9d198dc25114c5
4
+ data.tar.gz: 86e3566582dbac6d8e738a4c96c7b11630b54c86
5
5
  SHA512:
6
- metadata.gz: 91daaa57e01146e683e8fba37fd3c94c5b1a868ef7602f5aacbdf2ab57397ffd9c1a2f66caab2fc0d4f6d966d45467f55d4c35956e4ccfb3c97c503bc9497fcc
7
- data.tar.gz: dd233e7e2ee479f9f87d0cc361de3c0f4d5fb9865970dfb7668460e42d80f970e35450a1c5aca0823d87995bdda8ef29cbba33ed3d72f88dc73a80c4d921d59d
6
+ metadata.gz: acdbf5c64e70a65ad2e6f76adf8e9e863b564932bafca4700a46776a13091184e919b5fa0ac838d64f5002d1cf5729098d7dd6cf5c255bbf0af359a7a24d911d
7
+ data.tar.gz: fc294d634ea642cc40945192839b996971deb48881d83a71f732308c25ca215b96737dfcc6b7bba2bce77aa295888c4a200d35ffca0b35674b38ec4debb5c0d9
@@ -19,11 +19,13 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ['lib']
21
21
 
22
+ spec.add_runtime_dependency 'concurrent-ruby', '~> 1.0.2'
23
+ spec.add_runtime_dependency 'concurrent-ruby-ext', '~> 1.0.2'
22
24
  spec.add_runtime_dependency 'redis', '~> 3'
23
25
  spec.add_runtime_dependency 'redis-namespace', '~> 1.5'
24
26
  spec.add_runtime_dependency 'connection_pool', '~> 2'
25
27
 
26
- spec.add_development_dependency 'bundler', '~> 1.11'
28
+ spec.add_development_dependency 'bundler', '~> 1.13'
27
29
  spec.add_development_dependency 'rake', '~> 10.0'
28
30
  spec.add_development_dependency 'rspec', '~> 3.4'
29
31
  spec.add_development_dependency 'rspec-its', '~> 1.2'
@@ -4,7 +4,6 @@ require 'attention/redis_pool'
4
4
  require 'attention/subscriber'
5
5
  require 'attention/blocking_subscriber'
6
6
  require 'attention/instance'
7
- require 'attention/timer'
8
7
 
9
8
  # The top-level API
10
9
  #
@@ -1,6 +1,6 @@
1
1
  require 'socket'
2
+ require 'concurrent'
2
3
  require 'attention/publisher'
3
- require 'attention/timer'
4
4
 
5
5
  module Attention
6
6
  # A publishable representation of the current server
@@ -49,10 +49,10 @@ module Attention
49
49
  # Unpublishes this server and stops the {#heartbeat}
50
50
  def unpublish
51
51
  return unless @heartbeat
52
+ @heartbeat.shutdown
52
53
  publisher.publish('instance', removed: info) do |redis|
53
54
  redis.del "instance_#{ @id }"
54
55
  end
55
- @heartbeat.stop
56
56
  @heartbeat = nil
57
57
  end
58
58
 
@@ -67,14 +67,17 @@ module Attention
67
67
 
68
68
  private
69
69
 
70
- # Uses a {Timer} to periodically tell Redis that this
70
+ # Uses a {Concurrent::TimerTask} to periodically tell Redis that this
71
71
  # server is still online
72
72
  # @!visibility public
73
73
  # @api private
74
74
  def heartbeat
75
- @heartbeat ||= Timer.new(heartbeat_frequency) do
76
- Attention.redis.call.expire "instance_#{ @id }", Attention.options[:ttl]
75
+ return @heartbeat if @heartbeat
76
+ @heartbeat = Concurrent::TimerTask.new(execution_interval: heartbeat_frequency) do
77
+ Attention.redis.call.setex "instance_#{ @id }", Attention.options[:ttl], JSON.dump(info)
77
78
  end
79
+ @heartbeat.execute
80
+ @heartbeat
78
81
  end
79
82
 
80
83
  # The frequency of the {#heartbeat} is based on Attention.options[:ttl]
@@ -1,3 +1,3 @@
1
1
  module Attention
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.6'
3
3
  end
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attention
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Parrish
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-02-08 00:00:00.000000000 Z
11
+ date: 2016-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: concurrent-ruby
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: concurrent-ruby-ext
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.2
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.2
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: redis
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +86,14 @@ dependencies:
58
86
  requirements:
59
87
  - - "~>"
60
88
  - !ruby/object:Gem::Version
61
- version: '1.11'
89
+ version: '1.13'
62
90
  type: :development
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
94
  - - "~>"
67
95
  - !ruby/object:Gem::Version
68
- version: '1.11'
96
+ version: '1.13'
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: rake
71
99
  requirement: !ruby/object:Gem::Requirement
@@ -191,7 +219,6 @@ files:
191
219
  - lib/attention/publisher.rb
192
220
  - lib/attention/redis_pool.rb
193
221
  - lib/attention/subscriber.rb
194
- - lib/attention/timer.rb
195
222
  - lib/attention/version.rb
196
223
  homepage: https://github.com/parrish/attention
197
224
  licenses:
@@ -213,7 +240,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
213
240
  version: '0'
214
241
  requirements: []
215
242
  rubyforge_project:
216
- rubygems_version: 2.4.8
243
+ rubygems_version: 2.5.1
217
244
  signing_key:
218
245
  specification_version: 4
219
246
  summary: Redis-based server awareness
@@ -1,52 +0,0 @@
1
- require 'thread'
2
-
3
- module Attention
4
- # Periodic asynchronous code execution
5
- class Timer
6
- attr_reader :frequency
7
-
8
- # @!visibility private
9
- attr_reader :callback, :lock, :thread
10
-
11
- # Creates and {#start}s the timer
12
- # @param frequency [Numeric] How often to execute
13
- # @yield The code to be executed
14
- def initialize(frequency, &callback)
15
- @frequency = frequency
16
- @callback = callback
17
- @lock = Mutex.new
18
- start
19
- end
20
-
21
- # Starts the timer
22
- def start
23
- @thread ||= Thread.new do
24
- loop do
25
- sleep @frequency
26
- lock.synchronize do
27
- callback.call
28
- end
29
- end
30
- end
31
- end
32
-
33
- # @return [Boolean] True if the timer is started
34
- def started?
35
- !!thread
36
- end
37
-
38
- # Stops the timer if it's started
39
- def stop
40
- return if stopped?
41
- lock.synchronize do
42
- thread.kill
43
- @thread = nil
44
- end
45
- end
46
-
47
- # @return [Boolean] True if the timer is stopped
48
- def stopped?
49
- !started?
50
- end
51
- end
52
- end