bellbro 0.0.1 → 0.0.2
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 -1
- data/bellbro.gemspec +1 -0
- data/lib/bellbro/bell.rb +7 -0
- data/lib/bellbro/notifier.rb +1 -1
- data/lib/bellbro/service.rb +71 -0
- data/lib/bellbro/settings.rb +33 -0
- data/lib/bellbro/version.rb +1 -1
- data/lib/bellbro/worker.rb +68 -0
- data/lib/bellbro.rb +3 -1
- metadata +20 -2
- /data/lib/bellbro/{validator_redis_pool.rb → redis_pool.rb} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: edc792d460006462bf344e74387ea8a6cf54efbc
|
4
|
+
data.tar.gz: ab1ddb1ffb474a87fec710f702839dd6d7cee328
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b0e9e88dcc3bd3957ed8dc3d27546f19ac15aee3c2240e1eee5c18da756267fbf598a4f8b817d28464687f1580503099ddb4700aedaf7e242bdbfa04bac20db
|
7
|
+
data.tar.gz: 2040b42ff9a2f36076c921f57e4c11c778db8406ea647cfa260f0f2e496fde567d2a8249137304120f2a5355952d9ea4371975b0867224437172ea1c2fc610c7
|
data/.gitignore
CHANGED
data/bellbro.gemspec
CHANGED
data/lib/bellbro/bell.rb
ADDED
data/lib/bellbro/notifier.rb
CHANGED
@@ -8,7 +8,7 @@ module Bellbro
|
|
8
8
|
domain_insert = @domain ? "[#{@domain}]": ""
|
9
9
|
error_insert = (opts[:type] == :error) ? "##ERROR## " : ""
|
10
10
|
complete_logline = "[#{self.class}](#{Thread.current.object_id})#{domain_insert}: #{error_insert}#{logline}"
|
11
|
-
|
11
|
+
Bellbro.logger.info complete_logline
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'digest'
|
2
|
+
|
3
|
+
module Bellbro
|
4
|
+
class Service < Bellbro::Bell
|
5
|
+
include Bellbro::SidekiqUtils
|
6
|
+
include Bellbro::Trackable
|
7
|
+
|
8
|
+
SLEEP_INTERVAL = Rails.env.test? ? 1 : 3600
|
9
|
+
LOG_RECORD_SCHEMA = { jobs_started: Integer }
|
10
|
+
|
11
|
+
attr_reader :thread, :thread_error, :jid
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@done = false
|
15
|
+
@jid = Digest::MD5.hexdigest(Time.now.utc.to_s + Thread.current.object_id.to_s)
|
16
|
+
end
|
17
|
+
|
18
|
+
def start
|
19
|
+
@thread = Thread.new do
|
20
|
+
begin
|
21
|
+
run
|
22
|
+
rescue Exception => @thread_error
|
23
|
+
notify "#{@thread_error.inspect}", type: :error
|
24
|
+
Airbrake.notify(@thread_error)
|
25
|
+
raise @thread_error
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def stop
|
31
|
+
@done = true
|
32
|
+
notify "Stopping #{self.class} service..."
|
33
|
+
@thread.join
|
34
|
+
notify "#{self.class.to_s.capitalize} service stopped."
|
35
|
+
end
|
36
|
+
|
37
|
+
def run
|
38
|
+
notify "Starting #{self.class} service."
|
39
|
+
Service.mutex.synchronize { track }
|
40
|
+
begin
|
41
|
+
start_jobs
|
42
|
+
Service.mutex.synchronize { status_update }
|
43
|
+
sleep self.class::SLEEP_INTERVAL
|
44
|
+
end until @done
|
45
|
+
Service.mutex.synchronize { stop_tracking }
|
46
|
+
end
|
47
|
+
|
48
|
+
def start_jobs
|
49
|
+
each_job do |job|
|
50
|
+
klass = job[:klass].constantize
|
51
|
+
jid = klass.perform_async(job[:arguments])
|
52
|
+
notify "Starting job #{jid} #{job[:klass]} with #{job[:arguments]}."
|
53
|
+
record_incr(:jobs_started)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def each_job
|
58
|
+
# Override
|
59
|
+
[]
|
60
|
+
end
|
61
|
+
|
62
|
+
def running?
|
63
|
+
!@done
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.mutex
|
67
|
+
$mutex ||= Mutex.new
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Bellbro
|
2
|
+
module Settings
|
3
|
+
|
4
|
+
class SettingsData < Struct.new(
|
5
|
+
:logger, :env
|
6
|
+
)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.configure
|
10
|
+
$bellbro_configuration ||= Bellbro::Settings::SettingsData.new
|
11
|
+
yield $bellbro_configuration
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.env
|
15
|
+
return unless configured?
|
16
|
+
$bellbro_configuration.env
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.test?
|
20
|
+
return unless configured?
|
21
|
+
$bellbro_configuration.env == 'test'
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.logger
|
25
|
+
return unless configured?
|
26
|
+
$bellbro_configuration.logger
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.configured?
|
30
|
+
!!$bellbro_configuration
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/bellbro/version.rb
CHANGED
@@ -0,0 +1,68 @@
|
|
1
|
+
module Bellbro
|
2
|
+
class Worker < Bellbro::Bell
|
3
|
+
include Sidekiq::Worker
|
4
|
+
extend Bellbro::SidekiqUtils
|
5
|
+
|
6
|
+
attr_reader :domain
|
7
|
+
|
8
|
+
def init(opts)
|
9
|
+
# override
|
10
|
+
end
|
11
|
+
|
12
|
+
def perform(opts)
|
13
|
+
# override
|
14
|
+
end
|
15
|
+
|
16
|
+
def clean_up
|
17
|
+
# override
|
18
|
+
end
|
19
|
+
|
20
|
+
def transition
|
21
|
+
# override
|
22
|
+
end
|
23
|
+
|
24
|
+
def i_am_alone_with_this_domain?
|
25
|
+
self.class.jobs_with_domain(@domain).select { |j| jid != j[:jid] }.empty? &&
|
26
|
+
self.class.workers_with_domain(@domain).select { |j| jid != j[:jid] }.empty?
|
27
|
+
end
|
28
|
+
|
29
|
+
def self._workers
|
30
|
+
retryable(on: Redis::TimeoutError) do
|
31
|
+
workers_for_class("#{self.name}")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self._jobs
|
36
|
+
retryable(on: Redis::TimeoutError) do
|
37
|
+
jobs_for_class("#{self.name}")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.active_workers
|
42
|
+
_workers.map do |w|
|
43
|
+
{
|
44
|
+
:domain => worker_domain(w),
|
45
|
+
:jid => worker_jid(w),
|
46
|
+
:time => worker_time(w)
|
47
|
+
}
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.queued_jobs
|
52
|
+
_jobs.map { |j| {:domain => job_domain(j), :jid => job_jid(j)} }
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.workers_with_domain(domain)
|
56
|
+
active_workers.select { |w| w[:domain] == domain }
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.jobs_with_domain(domain)
|
60
|
+
queued_jobs.select { |j| j[:domain] == domain }
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.jobs_in_flight_with_domain(domain)
|
64
|
+
jobs_with_domain(domain) + workers_with_domain(domain)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
data/lib/bellbro.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bellbro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Stokes
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
name: airbrake
|
48
|
+
prerelease: false
|
49
|
+
type: :runtime
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
requirement: !ruby/object:Gem::Requirement
|
43
57
|
requirements:
|
@@ -80,12 +94,16 @@ files:
|
|
80
94
|
- Rakefile
|
81
95
|
- bellbro.gemspec
|
82
96
|
- lib/bellbro.rb
|
97
|
+
- lib/bellbro/bell.rb
|
83
98
|
- lib/bellbro/notifier.rb
|
99
|
+
- lib/bellbro/redis_pool.rb
|
84
100
|
- lib/bellbro/retryable.rb
|
101
|
+
- lib/bellbro/service.rb
|
102
|
+
- lib/bellbro/settings.rb
|
85
103
|
- lib/bellbro/sidekiq_utils.rb
|
86
104
|
- lib/bellbro/trackable.rb
|
87
|
-
- lib/bellbro/validator_redis_pool.rb
|
88
105
|
- lib/bellbro/version.rb
|
106
|
+
- lib/bellbro/worker.rb
|
89
107
|
homepage: ''
|
90
108
|
licenses:
|
91
109
|
- MIT
|
File without changes
|