bellbro 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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