Class: Backnob::Worker
- Inherits:
-
Object
- Object
- Backnob::Worker
- Includes:
- DRb::DRbObservable
- Defined in:
- lib/backnob/worker.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(key, options = {}) ⇒ Worker
constructor
A new instance of Worker.
- #logger ⇒ Object
-
#results(key = nil, value = nil) ⇒ Object
Get or set results.
-
#start ⇒ Object
Start this worker.
Constructor Details
#initialize(key, options = {}) ⇒ Worker
Returns a new instance of Worker.
36 37 38 39 40 41 |
# File 'lib/backnob/worker.rb', line 36 def initialize(key, = {}) @key = key @options = @results = {} @results.extend(MonitorMixin) end |
Class Method Details
.define_attr_method(name, value) ⇒ Object
19 20 21 22 23 24 25 |
# File 'lib/backnob/worker.rb', line 19 def self.define_attr_method(name, value) class_eval do define_method(name) do value end end end |
.define_class_attr(name, default) ⇒ Object
27 28 29 30 31 32 |
# File 'lib/backnob/worker.rb', line 27 def self.define_class_attr(name, default) define_attr_method name, default self.singleton_class.send :define_method, name do |value| define_attr_method name, value end end |
Instance Method Details
#logger ⇒ Object
43 44 45 |
# File 'lib/backnob/worker.rb', line 43 def logger @logger ||= Logger.new($stdout) end |
#results(key = nil, value = nil) ⇒ Object
Get or set results. Workers should access results through this method as it is synchronized
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/backnob/worker.rb', line 78 def results(key = nil,value = nil) res = nil @results.synchronize do if key.nil? res = @results.dup elsif value.nil? res = @results[key] else if value != @results[key] @results[key] = value changed(true) # I've changed # Marshal results into string # for some reason marshal doesn't like hash, so # convert to array and convert back on server side obo = ::Marshal.dump([@key, key, value]) notify_observers(obo) end end end res end |
#start ⇒ Object
Start this worker. Starts a new thread and calls execute for work to be performed.
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/backnob/worker.rb', line 49 def start @thread = Thread.new do Thread.pass logger.debug "Starting #{self.class.name} with key #{@key}" results(:running, true) if rails require 'config/environment' ActiveRecord::Base.logger = logger end # require File.dirname(__FILE__) + "/../../config/environment" # ActiveRecord::Base.logger = logger begin execute rescue Exception => e results(:error, e) ensure results(:running, false) logger.debug "Finished #{self.class.name} with key #{@key}" end end end |