sidekiq-bus 0.7.0 → 0.8.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 +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +35 -0
- data/CHANGELOG.md +6 -0
- data/lib/sidekiq_bus/adapter.rb +35 -5
- data/lib/sidekiq_bus/version.rb +1 -1
- data/sidekiq-bus.gemspec +2 -0
- data/spec/adapter_spec.rb +43 -3
- data/spec/spec_helper.rb +12 -0
- metadata +31 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 060e761bfed32edcda60a412b31777dc734b1305
|
4
|
+
data.tar.gz: 37033fd257e5ca11a6b9a1e8cba60ac783403dee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 26e2afaa8f446be37c6ad32bb7f7901bb3553f71dfbe4232211812a24fc694ae65252950adae16e36bc2aebec8864fbbed77675281b148c681acae2dcb2e3a29
|
7
|
+
data.tar.gz: a7aba4c5e133877f6ea9bb032e26a852364a7c07c6a4d5fd9ac86026a2f880bbf83a9b05f446f3129ee77a8fa520157243b31e712fbf4f71073a031a694ebb98
|
data/.gitignore
CHANGED
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
|
data/lib/sidekiq_bus/adapter.rb
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
|
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,
|
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,
|
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
|
-
|
31
|
-
|
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
|
data/lib/sidekiq_bus/version.rb
CHANGED
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
|
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
|
-
|
9
|
+
adapter_under_test_class.new
|
8
10
|
QueueBus.send(:reset)
|
9
11
|
end
|
10
12
|
|
11
|
-
it
|
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.
|
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-
|
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
|