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