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