bellbro 0.2.2 → 0.3.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: 1ddf069f8fb7bf7c4cb1d241cbbaf0071605de1f
4
- data.tar.gz: 1acbf9a7c2014a9c5bd08865555690c73b1b9050
3
+ metadata.gz: 8ab7478116c23d04ae5d103a43267dc6ad90563c
4
+ data.tar.gz: 259f5b67b770f5d6a4fa997eac99c3d2cb17ca92
5
5
  SHA512:
6
- metadata.gz: e9d3ed63c20286ba8dadd89324fadfd0acf4b246bfd60b83df84ff55405c409c89e871b798db87b193acf30279deff3ab36950b74dd1fdff89f54fc3cb23b684
7
- data.tar.gz: 3cfd2c21df9e06166be02c4567e0a64d11b19f92c076e6e502f0df09bffadfa7a096356d0799a60428cbd3fa50f6e18c13a368a356502cde962593fc7cefe366
6
+ metadata.gz: 3d6c331e559941c713cacf0e4325bc5a55742b953c10d5a82494cd8cc8d6b98da78127e262e0877af93e43fae4aeeb4da6dbd112b40fe3f946ff79ac28e6523d
7
+ data.tar.gz: 39a37fb409cf9005de5b7ec609b7f6afb382e519eda35ec8bf1716e51c199c504c074a0764c72c36d7c9b5e90cdf5df59c6a289cd31dc6401dcff32d995434e4
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ gem 'shout', path: '../shout'
4
+
3
5
  # Specify your gem's dependencies in bellbro.gemspec
4
6
  gemspec
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency "sidekiq"
22
22
  spec.add_dependency "redis"
23
23
  spec.add_dependency "airbrake"
24
-
24
+ spec.add_dependency 'retryable'
25
25
 
26
26
  spec.add_development_dependency "bundler", "~> 1.7"
27
27
  spec.add_development_dependency "rake", "~> 10.0"
@@ -6,26 +6,15 @@ require 'yaml'
6
6
  require 'digest'
7
7
  require 'sidekiq'
8
8
  require 'airbrake'
9
+ require 'retryable'
10
+ require 'shout'
9
11
 
10
12
  %w(
11
- bellbro/settings.rb
12
13
  bellbro/hooks.rb
13
- bellbro/keyable.rb
14
- bellbro/retryable.rb
15
- bellbro/ringable.rb
16
14
  bellbro/trackable.rb
17
- bellbro/redis_pool.rb
18
15
  bellbro/sidekiq_utils.rb
19
- bellbro/bell.rb
20
16
  bellbro/service.rb
21
17
  bellbro/worker.rb
22
- bellbro/initialize.rb
23
18
  ).each do |path|
24
19
  require File.join(File.dirname(__FILE__),path)
25
- end
26
-
27
- module Bellbro
28
- def self.logger
29
- Bellbro::Settings.logger
30
- end
31
20
  end
@@ -1,9 +1,10 @@
1
1
  require 'digest'
2
2
 
3
3
  module Bellbro
4
- class Service < Bellbro::Bell
4
+ class Service
5
5
  include Bellbro::SidekiqUtils
6
6
  include Bellbro::Trackable
7
+ include Shout
7
8
 
8
9
  attr_reader :thread, :thread_error, :jid
9
10
 
@@ -36,7 +37,7 @@ module Bellbro
36
37
  begin
37
38
  run
38
39
  rescue Exception => @thread_error
39
- ring "#{@thread_error.inspect}", type: :error
40
+ log "#{@thread_error.inspect}", type: :error
40
41
  Airbrake.notify(@thread_error)
41
42
  raise @thread_error
42
43
  end
@@ -45,13 +46,13 @@ module Bellbro
45
46
 
46
47
  def stop
47
48
  @done = true
48
- ring "Stopping #{self.class} service..."
49
+ log "Stopping #{self.class} service..."
49
50
  @thread.join
50
- ring "#{self.class.to_s.capitalize} service stopped."
51
+ log "#{self.class.to_s.capitalize} service stopped."
51
52
  end
52
53
 
53
54
  def run
54
- ring "Starting #{self.class} service."
55
+ log "Starting #{self.class} service."
55
56
  self.class.mutex.synchronize { track }
56
57
  begin
57
58
  self.class.mutex.synchronize { start_jobs }
@@ -64,7 +65,7 @@ module Bellbro
64
65
  def start_jobs
65
66
  each_job do |job|
66
67
  jid = worker_class.perform_async(job)
67
- ring "Starting job #{jid} #{worker_class.name} with #{job.inspect}."
68
+ log "Starting job #{jid} #{worker_class.name} with #{job.inspect}."
68
69
  record_incr(:jobs_started)
69
70
  end
70
71
  end
@@ -1,14 +1,16 @@
1
+ require 'retryable'
2
+
1
3
  module Bellbro
2
4
  module SidekiqUtils
3
5
 
4
6
  def _workers
5
- retryable(on: Redis::TimeoutError) do
7
+ Retryable.retryable(on: Redis::TimeoutError) do
6
8
  workers_for_class("#{self.name}")
7
9
  end
8
10
  end
9
11
 
10
12
  def _jobs
11
- retryable(on: Redis::TimeoutError) do
13
+ Retryable.retryable(on: Redis::TimeoutError) do
12
14
  jobs_for_class("#{self.name}")
13
15
  end
14
16
  end
@@ -1,7 +1,5 @@
1
1
  module Bellbro
2
2
  module Trackable
3
- include Bellbro::Retryable
4
-
5
3
  attr_reader :record
6
4
 
7
5
  def self.included(base)
@@ -32,13 +30,13 @@ module Bellbro
32
30
  end
33
31
 
34
32
  def status_update(force = false)
35
- return unless @log_record_schema && Bellbro.logger
33
+ return unless @log_record_schema && Shout.logger
36
34
  return unless force || ((@count += 1) % @write_interval) == 0
37
- retryable { write_log(@record.to_json) }
35
+ Retryable.retryable { write_log(@record.to_json) }
38
36
  end
39
37
 
40
38
  def write_log(line)
41
- Bellbro.logger.info line
39
+ Shout.logger.info line
42
40
  end
43
41
 
44
42
  def record_set(attr, value)
@@ -1,3 +1,3 @@
1
1
  module Bellbro
2
- VERSION = '0.2.2'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -1,5 +1,6 @@
1
1
  module Bellbro
2
- class Worker < Bellbro::Bell
2
+ class Worker
3
+ include Shout
3
4
  include Sidekiq::Worker
4
5
  include Bellbro::Trackable
5
6
  include Bellbro::Hooks
@@ -2,6 +2,6 @@ logger = Yell.new do |l|
2
2
  l.level = [:debug, :info, :warn, :error]
3
3
  end
4
4
 
5
- Bellbro::Settings.configure do |config|
5
+ Shout::Settings.configure do |config|
6
6
  config.logger = logger
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bellbro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Stokes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-14 00:00:00.000000000 Z
11
+ date: 2015-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - '>='
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ name: retryable
76
+ prerelease: false
77
+ type: :runtime
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  requirement: !ruby/object:Gem::Requirement
71
85
  requirements:
@@ -136,21 +150,14 @@ files:
136
150
  - Rakefile
137
151
  - bellbro.gemspec
138
152
  - lib/bellbro.rb
139
- - lib/bellbro/bell.rb
140
153
  - lib/bellbro/hooks.rb
141
- - lib/bellbro/initialize.rb
142
- - lib/bellbro/keyable.rb
143
- - lib/bellbro/redis_pool.rb
144
- - lib/bellbro/retryable.rb
145
- - lib/bellbro/ringable.rb
146
154
  - lib/bellbro/service.rb
147
- - lib/bellbro/settings.rb
148
155
  - lib/bellbro/sidekiq_utils.rb
149
156
  - lib/bellbro/trackable.rb
150
157
  - lib/bellbro/version.rb
151
158
  - lib/bellbro/worker.rb
152
159
  - spec/spec_helper.rb
153
- - spec/support/bellbro.rb
160
+ - spec/support/shout.rb
154
161
  - spec/support/sidekiq.rb
155
162
  - spec/trackable_spec.rb
156
163
  - spec/worker_spec.rb
@@ -174,13 +181,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
174
181
  version: '0'
175
182
  requirements: []
176
183
  rubyforge_project:
177
- rubygems_version: 2.4.5
184
+ rubygems_version: 2.1.9
178
185
  signing_key:
179
186
  specification_version: 4
180
187
  summary: Helps with sidekiq.
181
188
  test_files:
182
189
  - spec/spec_helper.rb
183
- - spec/support/bellbro.rb
190
+ - spec/support/shout.rb
184
191
  - spec/support/sidekiq.rb
185
192
  - spec/trackable_spec.rb
186
193
  - spec/worker_spec.rb
@@ -1,7 +0,0 @@
1
- module Bellbro
2
- class Bell
3
- include Bellbro::Retryable
4
- include Bellbro::Ringable
5
- end
6
- end
7
-
@@ -1,61 +0,0 @@
1
- module Bellbro
2
- def self.initialize_redis!
3
- return unless defined?(Rails)
4
- filename = "#{Rails.root}/config/redis.yml"
5
- return unless File.exists?(filename)
6
- config = YAML.load_file(filename)[Rails.env].symbolize_keys
7
- configure_bellbro(config)
8
- setup_pool(config)
9
- end
10
-
11
- def self.configure_bellbro(config)
12
- redis_config = ThreadSafe::Cache.new
13
-
14
- config.each do |name, c|
15
- base_url = Figaro.env.send c['url'].downcase
16
- db = c['database']
17
- url = generate_full_url(base_url, db)
18
-
19
- redis_config[name] = {
20
- size: c['pool'],
21
- url: url,
22
- database: db,
23
- timeout: c['timeout'] || 5,
24
- network_timeout: c['network_timeout'] || 5
25
- }
26
- end
27
-
28
- Bellbro::Settings.configure do |con|
29
- con.redis_config = redis_config
30
- end
31
- end
32
-
33
- def self.setup_pool(config)
34
- redis_pool = ThreadSafe::Cache.new
35
- redis_config = Bellbro::Settings.redis_config
36
-
37
- config.each_key do |name|
38
- next if name == :sidekiq
39
- puts "# Configuring pool #{name} with size #{redis_config[name][:size]} on #{redis_config[name][:url]}"
40
- redis_pool[name] = ConnectionPool.new(
41
- redis_config[name].slice(:size, :timeout)
42
- ) do
43
- Redis.new(
44
- redis_config[name].slice(:url, :network_timeout)
45
- )
46
- end
47
- end
48
-
49
- Bellbro::Settings.configure do |con|
50
- con.redis_pool = redis_pool
51
- end
52
- end
53
-
54
- def self.generate_full_url(base_url, db)
55
- if base_url[-1,1] == "/"
56
- "#{base_url}#{db}"
57
- else
58
- "#{base_url}/#{db}"
59
- end
60
- end
61
- end
@@ -1,70 +0,0 @@
1
- module Bellbro
2
- module Keyable
3
- def self.included(base)
4
- base.class_eval do
5
- extend ClassMethods
6
- end
7
- end
8
-
9
- def respond_to?(method)
10
- return true if @respond_to && @respond_to.include?(method.to_sym)
11
- super
12
- end
13
-
14
- module ClassMethods
15
- def delegate_all_keys(*methods)
16
- delegate_getter_keys(*methods)
17
- delegate_setter_keys(*methods)
18
- delegate_status_keys(*methods)
19
- end
20
-
21
- def delegate_getter_keys(*methods)
22
- options = extract_methods(methods)
23
- options[:methods].each do |key|
24
- @respond_to << key
25
- define_method key do
26
- send(options[:to])[key]
27
- end
28
- end
29
- end
30
-
31
- def delegate_setter_keys(*methods)
32
- options = extract_methods(methods)
33
- options[:methods].each do |key|
34
- @respond_to << "#{key}="
35
- define_method "#{key}=" do |value|
36
- send(options[:to])[key] = value
37
- end
38
- end
39
- end
40
-
41
- def delegate_status_keys(*methods)
42
- options = extract_methods(methods)
43
- options[:methods].each do |key|
44
- @respond_to << "#{key}?"
45
- define_method "#{key}?" do
46
- !!send(options[:to])[key]
47
- end
48
- end
49
- end
50
-
51
- private
52
-
53
- def extract_methods(methods)
54
- options = methods.pop
55
- unless options.is_a?(Hash) && to = options[:to].try(:to_sym)
56
- raise ArgumentError, 'Delegation needs a target. Supply an options hash with a :to key as the last argument (e.g. delegate :hello, to: :greeter).'
57
- end
58
-
59
- # Set up the data hash, if needed
60
- if respond_to?(to) && !send(to).respond_to?(:[]) && !send(to).respond_to?(:[]=)
61
- raise ArgumentError, 'Target must be a hash-like object.'
62
- end
63
-
64
- @respond_to ||= []
65
- { methods: methods.map(&:to_sym), to: to }
66
- end
67
-
68
- end
69
- end
70
- end
@@ -1,31 +0,0 @@
1
- module Bellbro
2
- module RedisPool
3
- def with_connection
4
- self.class.with_connection do |c|
5
- yield c
6
- end
7
- end
8
-
9
- def self.included(klass)
10
- class << klass
11
-
12
- def set_db(default)
13
- @default_db_name = default.to_sym
14
- end
15
-
16
- def with_connection
17
- retryable(sleep: 0.5) do
18
- model_pool.with do |c|
19
- yield c
20
- end
21
- end
22
- end
23
-
24
- def model_pool
25
- @model_pool ||= Bellbro::Settings.redis_pool[@default_db_name]
26
- end
27
- end
28
-
29
- end
30
- end
31
- end
@@ -1,67 +0,0 @@
1
- module Bellbro
2
- module Retryable
3
- def self.included(klass)
4
- klass.extend(self)
5
- end
6
-
7
- # Options:
8
- # * :tries - Number of retries to perform. Defaults to 1.
9
- # * :on - The Exception on which a retry will be performed. Defaults to Exception, which retries on any Exception.
10
- #
11
- # Example
12
- # =======
13
- # retryable(:tries => 1, :on => OpenURI::HTTPError) do
14
- # # your code here
15
- # end
16
- #
17
-
18
- def retryable(options = {}, &block)
19
- opts = { :tries => 5, :on => Exception, :sleep => 1 }.merge(options)
20
- retry_exception, retries, interval = opts[:on], opts[:tries], opts[:sleep]
21
-
22
- begin
23
- return yield
24
- rescue retry_exception
25
- sleep interval
26
- retry unless (retries -= 1).zero?
27
- end
28
- yield
29
- end
30
-
31
- def retryable_with_success(options = {}, &block)
32
- opts = { :tries => 5, :on => Exception, :sleep => 1 }.merge(options)
33
- retry_exception, retries, interval = opts[:on], opts[:tries], opts[:sleep]
34
-
35
- success = false
36
- begin
37
- yield
38
- success = true
39
- rescue retry_exception
40
- sleep interval
41
- retry unless (retries -= 1).zero?
42
- end
43
- success
44
- end
45
-
46
- def retryable_with_aws(options = {}, &block)
47
- # This is for use with AWS-based models. I find I get a lot of these timeouts and
48
- # OpenSSL errors, and sometimes the connection dies and I need to create a new
49
- # connection object. I put this in a method called aws_connect!.
50
- #
51
- opts = { :tries => 10, :on => Exception, :sleep => 1 }.merge(options)
52
- retry_exception, retries, interval = opts[:on], opts[:tries], opts[:sleep]
53
-
54
- begin
55
- return yield
56
- rescue OpenSSL::SSL::SSLError, Timeout::Error
57
- sleep interval
58
- aws_connect!
59
- retry unless (retries -= 1).zero?
60
- rescue retry_exception
61
- sleep interval
62
- retry unless (retries -= 1).zero?
63
- end
64
- yield
65
- end
66
- end
67
- end
@@ -1,14 +0,0 @@
1
- module Bellbro
2
- module Ringable
3
- def self.included(klass)
4
- klass.extend(self)
5
- end
6
-
7
- def ring(logline, opts={})
8
- domain_insert = @domain ? "[#{@domain}]": ""
9
- error_insert = (opts[:type] == :error) ? "##ERROR## " : ""
10
- complete_logline = "[#{self.class}](#{Thread.current.object_id})#{domain_insert}: #{error_insert}#{logline}"
11
- Bellbro.logger.info complete_logline
12
- end
13
- end
14
- end
@@ -1,46 +0,0 @@
1
- module Bellbro
2
- module Settings
3
-
4
- class SettingsData < Struct.new(
5
- :logger, :env, :redis_config, :redis_pool
6
- )
7
- end
8
-
9
- def self.configuration
10
- @configuration ||= Bellbro::Settings::SettingsData.new
11
- end
12
-
13
- def self.configure
14
- yield configuration
15
- end
16
-
17
- def self.env
18
- return unless configured?
19
- configuration.env
20
- end
21
-
22
- def self.test?
23
- return unless configured?
24
- configuration.env == 'test'
25
- end
26
-
27
- def self.redis_pool
28
- return unless configured?
29
- configuration.redis_pool
30
- end
31
-
32
- def self.redis_config
33
- return unless configured?
34
- configuration.redis_config
35
- end
36
-
37
- def self.logger
38
- return unless configured?
39
- configuration.logger
40
- end
41
-
42
- def self.configured?
43
- !!configuration
44
- end
45
- end
46
- end