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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5f5c30f13ccf46c9dd3ab5f9cf072da6fcbfb37e
4
- data.tar.gz: 44a25b8367eaa4b1e5a32a9f6546784e96dd9b79
3
+ metadata.gz: edc792d460006462bf344e74387ea8a6cf54efbc
4
+ data.tar.gz: ab1ddb1ffb474a87fec710f702839dd6d7cee328
5
5
  SHA512:
6
- metadata.gz: ee77afd18e299eded56c87e06209d3b34eb9e2984c96c7ee0e00de4ecb98fd35836e0da04bee7f9b45596bbf38640b1744963f86d04e1c7028b89218849cb783
7
- data.tar.gz: cf0a2c25af94a25d6e7ed6e0ec8fb992b7577adeb6674d0293c378278a688e9c306b81caa295476e96c986c94a954fe50ff5a134b4ad27f9c969ea4e728e5ed9
6
+ metadata.gz: 0b0e9e88dcc3bd3957ed8dc3d27546f19ac15aee3c2240e1eee5c18da756267fbf598a4f8b817d28464687f1580503099ddb4700aedaf7e242bdbfa04bac20db
7
+ data.tar.gz: 2040b42ff9a2f36076c921f57e4c11c778db8406ea647cfa260f0f2e496fde567d2a8249137304120f2a5355952d9ea4371975b0867224437172ea1c2fc610c7
data/.gitignore CHANGED
@@ -12,5 +12,5 @@
12
12
  *.o
13
13
  *.a
14
14
  mkmf.log
15
-
15
+ *.gem
16
16
  /.idea/
data/bellbro.gemspec CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.add_dependency "sidekiq"
21
21
  spec.add_dependency "redis"
22
+ spec.add_dependency "airbrake"
22
23
 
23
24
 
24
25
  spec.add_development_dependency "bundler", "~> 1.7"
@@ -0,0 +1,7 @@
1
+ module Bellbro
2
+ class Bell
3
+ include Bellbro::Retryable
4
+ include Bellbro::Notifier
5
+ end
6
+ end
7
+
@@ -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
- $log.info complete_logline
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
@@ -1,3 +1,3 @@
1
1
  module Bellbro
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -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
@@ -1,5 +1,7 @@
1
1
  require "bellbro/version"
2
2
 
3
3
  module Bellbro
4
- # Your code goes here...
4
+ def self.logger
5
+ Bellbro::Settings.logger
6
+ end
5
7
  end
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.1
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