Module: TengineRailsPlugin::Progress

Defined in:
lib/tengine_rails_plugin/progress.rb

Defined Under Namespace

Modules: Driveable

Constant Summary collapse

STATUS_TYPES =
SelectableAttr::Enum.new do
  name "Tengine進捗状態"
  entry 0, :initial,          "初期状態"
  entry 1, :sended,           "送信済み"
  entry 2, :send_failure,     "送信失敗"
  entry 3, :starting,         "実行中"
  entry 4, :starting_failure, "実行開始失敗"
  entry 5, :error,            "実行失敗"
  entry 6, :success,          "実行成功"
end
EVENT_NAME_PREFIX =
"tengine.progress."

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.run(model, event) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/tengine_rails_plugin/progress.rb', line 53

def self.run(model, event)
  progress = model.find(event[:batch_id])
  progress.extend(self)
  progress.add_logs("#{Time.zone.now.rfc2822} Starting")
  progress.set_status(STATUS_TYPES.id_by_key(:starting))
  progress.save!
  begin
    yield(progress) if block_given?
  rescue
    progress.add_logs("#{Time.zone.now.rfc2822} [#{$!.class.name}] #{$!.message}\n  " + $!.backtrace.join("\n  "))
    progress.set_status(STATUS_TYPES.id_by_key(:error))
    progress.save!
    raise
  else
    progress.add_logs("#{Time.zone.now.rfc2822} SUCCESS")
    progress.set_status(STATUS_TYPES.id_by_key(:success))
    progress.save!
  end
end

Instance Method Details

#add_logs(*logs) ⇒ Object



24
25
26
27
28
29
# File 'lib/tengine_rails_plugin/progress.rb', line 24

def add_logs(*logs)
  if self.respond_to?(:tengine_logs) and self.respond_to?(:tengine_logs=)
    self.tengine_logs ||= []
    self.tengine_logs += logs
  end
end

#event_name(name) ⇒ Object



20
21
22
# File 'lib/tengine_rails_plugin/progress.rb', line 20

def event_name(name)
  "#{EVENT_NAME_PREFIX}#{name}"
end

#fire(batch_name, options = {}, &block) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/tengine_rails_plugin/progress.rb', line 37

def fire(batch_name, options={}, &block)
  add_logs("#{Time.zone.now.rfc2822} sending the event to start")
  set_status(STATUS_TYPES.id_by_key(:sended))
  begin
    properties = { batch_id: self.id, batch_name: batch_name }.update(options || {})
    EventMachine.run do
      Tengine::Event.fire(event_name(batch_name), properties: properties)
    end
  rescue Exception
    add_logs("#{Time.zone.now.rfc2822} #{$!.class.name} #{$!.message}\n  " + $!.backtrace.join("\n  "))
    set_status(STATUS_TYPES.id_by_key(:send_failure))
    self.save!
    raise
  end
end

#set_status(status) ⇒ Object



31
32
33
34
35
# File 'lib/tengine_rails_plugin/progress.rb', line 31

def set_status(status)
  if self.respond_to?(:status_cd=)
    self.status_cd = status
  end
end