sidekiq-bus 0.7.0 → 0.8.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: 7117464cbaa51cb865284bd8e97ab9167b9ad530
4
- data.tar.gz: 4c7ba518a5b15db322ec9f62449ec5917aba50e5
3
+ metadata.gz: 060e761bfed32edcda60a412b31777dc734b1305
4
+ data.tar.gz: 37033fd257e5ca11a6b9a1e8cba60ac783403dee
5
5
  SHA512:
6
- metadata.gz: 1aa816cb5624973b6a2bbf7c41ed20871357471439eb9abbf2efbc0ba6287afa25a73e48d0583d3743005ef0840e39b852e055bba7c54959508e2716ead96271
7
- data.tar.gz: 6356a83e2a6793092f6d821cd699c77a66d09ddc4268bed6d6454dcdb27f84bae059f6881cdd3dfff08aeb1b6dd2b194b3975a6736e848d4cc7bc8e081e63464
6
+ metadata.gz: 26e2afaa8f446be37c6ad32bb7f7901bb3553f71dfbe4232211812a24fc694ae65252950adae16e36bc2aebec8864fbbed77675281b148c681acae2dcb2e3a29
7
+ data.tar.gz: a7aba4c5e133877f6ea9bb032e26a852364a7c07c6a4d5fd9ac86026a2f880bbf83a9b05f446f3129ee77a8fa520157243b31e712fbf4f71073a031a694ebb98
data/.gitignore CHANGED
@@ -3,3 +3,4 @@
3
3
  Gemfile.lock
4
4
  pkg/*
5
5
  .DS_Store
6
+ /log/
data/.rubocop.yml ADDED
@@ -0,0 +1,35 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.4
3
+ ExtraDetails: true
4
+
5
+ # http://rubocop.readthedocs.io/en/latest/cops_style/#stylefrozenstringliteralcomment
6
+ Style/FrozenStringLiteralComment:
7
+ Enabled: true
8
+
9
+ # https://rubocop.readthedocs.io/en/latest/cops_style/#styledatetime
10
+ Style/DateTime:
11
+ Enabled: true
12
+
13
+ # http://rubocop.readthedocs.io/en/latest/cops_metrics/#metricslinelength
14
+ Metrics/LineLength:
15
+ Max: 100
16
+
17
+ Metrics/MethodLength:
18
+ Max: 15
19
+
20
+ Metrics/BlockLength:
21
+ Exclude:
22
+ - spec/**/*
23
+
24
+ # https://rubocop.readthedocs.io/en/latest/cops_layout/#layoutdotposition
25
+ Layout/DotPosition:
26
+ Enabled: true
27
+ EnforcedStyle: leading
28
+
29
+ # https://rubocop.readthedocs.io/en/latest/cops_style/#stylehashsyntax
30
+ Style/HashSyntax:
31
+ Enabled: true
32
+
33
+ # https://rubocop-rspec.readthedocs.io/en/latest/cops_rspec/#rspecfocus
34
+ RSpec/Focus:
35
+ Enabled: true
data/CHANGELOG.md CHANGED
@@ -6,6 +6,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.8.0] - 2019-07-31
10
+
11
+ ### Added
12
+ - Adds sidekiq-scheduler as a dependency
13
+ - Sets up the schedule of heartbeats within the adapter.
14
+
9
15
  ## [0.7.0] - 2019-07-29
10
16
 
11
17
  ### Changed
@@ -1,16 +1,22 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module QueueBus
2
4
  module Adapters
5
+ # The sidekiq adapter for queue-bus. It handles enabling, enqueuing, and
6
+ # setting up the heartbeat.
3
7
  class Sidekiq < QueueBus::Adapters::Base
4
8
  def enabled!
5
9
  # know we are using it
6
10
  require 'sidekiq'
7
11
 
8
- #this sidekiq middleware adds in the 'retry' key to the job payload so we ensure sidekiq plays well with resque
12
+ # this sidekiq middleware adds in the 'retry' key to the job payload so
13
+ # we ensure sidekiq plays well with resque.
9
14
  ::Sidekiq.configure_server do |config|
10
15
  config.client_middleware do |chain|
11
16
  chain.prepend ::SidekiqBus::Middleware::Client::Retry
12
17
  end
13
18
  end
19
+
14
20
  ::QueueBus::Worker.include ::Sidekiq::Worker
15
21
  end
16
22
 
@@ -19,16 +25,40 @@ module QueueBus
19
25
  end
20
26
 
21
27
  def enqueue(queue_name, klass, hash)
22
- ::Sidekiq::Client.push('queue' => queue_name, 'class' => klass, 'args' => [hash])
28
+ ::Sidekiq::Client.push('queue' => queue_name,
29
+ 'class' => klass,
30
+ 'args' => [hash])
23
31
  end
24
32
 
25
33
  def enqueue_at(epoch_seconds, queue_name, klass, hash)
26
- ::Sidekiq::Client.push('queue' => queue_name, 'class' => klass, 'args' => [hash], 'at' => epoch_seconds)
34
+ ::Sidekiq::Client.push('queue' => queue_name,
35
+ 'class' => klass,
36
+ 'args' => [hash],
37
+ 'at' => epoch_seconds)
27
38
  end
28
39
 
40
+ # Sets up the heartbeat to be broadcast via sidekiq. Only enable this when
41
+ # you have disabled the resque heart beat schedule as well, as having both
42
+ # may cause issues.
43
+ #
44
+ # While this will work so long as every time sidekiq boots it triggers this
45
+ # set up. You may consider enabling dynamic schedules to keep all nodes up
46
+ # to date if it ever changes.
29
47
  def setup_heartbeat!(queue_name)
30
- # TODO: not sure how to do this or what is means to set this up in Sidekiq
31
- raise NotImplementedError
48
+ require 'sidekiq-scheduler'
49
+
50
+ ::Sidekiq.set_schedule(
51
+ 'sidekiqbus_heartbeat',
52
+ every: '1min',
53
+ class: ::QueueBus::Worker.name,
54
+ args: [
55
+ ::QueueBus::Util.encode('bus_class_proxy' => ::QueueBus::Heartbeat.name)
56
+ ],
57
+ queue: queue_name,
58
+ description: 'Enqueues a heart beat every minute for the queue-bus'
59
+ )
60
+ # Must reload the schedule to make it present in memory
61
+ ::Sidekiq.reload_schedule!
32
62
  end
33
63
  end
34
64
  end
@@ -1,3 +1,3 @@
1
1
  module SidekiqBus
2
- VERSION = "0.7.0"
2
+ VERSION = "0.8.0"
3
3
  end
data/sidekiq-bus.gemspec CHANGED
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
18
18
 
19
19
  s.add_dependency('queue-bus', ['>= 0.7', '< 1'])
20
20
  s.add_dependency('sidekiq', ['>= 3.0.0', '~> 5.0'])
21
+ s.add_dependency('sidekiq-scheduler', '~> 3.0')
21
22
 
22
23
  s.add_development_dependency("rspec")
23
24
  s.add_development_dependency("fakeredis")
@@ -25,4 +26,5 @@ Gem::Specification.new do |s|
25
26
  s.add_development_dependency("pry")
26
27
  s.add_development_dependency("timecop")
27
28
  s.add_development_dependency("json_pure")
29
+ s.add_development_dependency("rubocop")
28
30
  end
data/spec/adapter_spec.rb CHANGED
@@ -1,14 +1,54 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
- describe "adapter is set" do
5
+ describe 'adapter is set' do
4
6
  it "should call it's enabled! method on init" do
5
7
  QueueBus.send(:reset)
6
8
  expect_any_instance_of(adapter_under_test_class).to receive(:enabled!)
7
- instance = adapter_under_test_class.new
9
+ adapter_under_test_class.new
8
10
  QueueBus.send(:reset)
9
11
  end
10
12
 
11
- it "should be defaulting to Data from spec_helper" do
13
+ it 'should be defaulting to Data from spec_helper' do
12
14
  expect(QueueBus.adapter.is_a?(adapter_under_test_class)).to eq(true)
13
15
  end
16
+
17
+ describe '.setup_heartbeat!' do
18
+ context 'when already setup' do
19
+ before { QueueBus.heartbeat! }
20
+
21
+ it 'does not change schedule' do
22
+ expect { QueueBus.heartbeat! }
23
+ .not_to(change { Sidekiq.get_schedule('sidekiqbus_heartbeat') })
24
+ end
25
+
26
+ it 'has the schedule for every minute' do
27
+ expect(Sidekiq.get_schedule('sidekiqbus_heartbeat')['every'])
28
+ .to eq '1min'
29
+ end
30
+
31
+ it 'has scheduled the queue bus worker' do
32
+ expect(Sidekiq.get_schedule('sidekiqbus_heartbeat')['class'])
33
+ .to eq ::QueueBus::Worker.name
34
+ end
35
+
36
+ it 'will run the heartbeat proxy' do
37
+ expect(Sidekiq.get_schedule('sidekiqbus_heartbeat')['args'])
38
+ .to eq [{ bus_class_proxy: 'QueueBus::Heartbeat' }.to_json]
39
+ end
40
+
41
+ it 'will enqueue to bus_incoming' do
42
+ expect(Sidekiq.get_schedule('sidekiqbus_heartbeat')['queue'])
43
+ .to eq 'bus_incoming'
44
+ end
45
+ end
46
+
47
+ context 'when it does not exist' do
48
+ it 'sets the schedule' do
49
+ expect { QueueBus.heartbeat! }
50
+ .to(change { Sidekiq.get_schedule('sidekiqbus_heartbeat') })
51
+ end
52
+ end
53
+ end
14
54
  end
data/spec/spec_helper.rb CHANGED
@@ -8,6 +8,18 @@ reset_test_adapter
8
8
  require 'fakeredis'
9
9
  Sidekiq.redis = ConnectionPool.new { Redis.new(driver: Redis::Connection::Memory) }
10
10
 
11
+ require 'fileutils'
12
+
13
+ # Ensuring log file exist and are ready for running specs.
14
+ log_file = File.join(__dir__, '../log/test.log')
15
+ FileUtils.mkdir_p(File.dirname(log_file))
16
+ FileUtils.touch(log_file)
17
+
18
+ logger = Logger.new(File.open(log_file, 'a'))
19
+
20
+ Sidekiq.logger = logger
21
+ QueueBus.logger = logger
22
+
11
23
  require 'sidekiq/testing'
12
24
 
13
25
  module QueueBus
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-bus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Leonard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-29 00:00:00.000000000 Z
11
+ date: 2019-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: queue-bus
@@ -50,6 +50,20 @@ dependencies:
50
50
  - - "~>"
51
51
  - !ruby/object:Gem::Version
52
52
  version: '5.0'
53
+ - !ruby/object:Gem::Dependency
54
+ name: sidekiq-scheduler
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '3.0'
60
+ type: :runtime
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '3.0'
53
67
  - !ruby/object:Gem::Dependency
54
68
  name: rspec
55
69
  requirement: !ruby/object:Gem::Requirement
@@ -134,6 +148,20 @@ dependencies:
134
148
  - - ">="
135
149
  - !ruby/object:Gem::Version
136
150
  version: '0'
151
+ - !ruby/object:Gem::Dependency
152
+ name: rubocop
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ type: :development
159
+ prerelease: false
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
137
165
  description: A simple event bus on top of Sidekiq. Publish and subscribe to events
138
166
  as they occur through a queue.
139
167
  email:
@@ -145,6 +173,7 @@ files:
145
173
  - ".gitignore"
146
174
  - ".rbenv-version"
147
175
  - ".rspec"
176
+ - ".rubocop.yml"
148
177
  - ".ruby-gemset"
149
178
  - ".ruby-version"
150
179
  - CHANGELOG.md