Class: Heimdall::Task

Inherits:
Model show all
Defined in:
lib/heimdall/heimdall_model_task.rb

Instance Method Summary collapse

Instance Method Details

#exportObject



104
105
106
107
108
109
110
111
112
113
114
# File 'lib/heimdall/heimdall_model_task.rb', line 104

def export
  data = to_h
  data['log']  = data['log'].to_s.split($/)
  data['info'] = {
    name: name,
    status: full_text_status,
    run_time: run_time,
    has_error: has_error?
  }
  data
end

#full_color_statusObject



41
42
43
44
# File 'lib/heimdall/heimdall_model_task.rb', line 41

def full_color_status
  @colorize = true
  full_text_status
end

#full_statusObject



36
37
38
39
# File 'lib/heimdall/heimdall_model_task.rb', line 36

def full_status
  @colorize = false
  full_text_status
end

#full_text_statusObject



46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/heimdall/heimdall_model_task.rb', line 46

def full_text_status
  if status_sid == 'd'
    colorize 'Finished', :green
  elsif status_sid == 'e'
      colorize "Failed after #{self[:total_runs]} tries", :red
  elsif status_sid == 'a'
      colorize 'In que', :gray
  elsif status_sid == 'r'
    diff = (Time.now - self[:started_at]).to_i
    'Running for %s sec' % diff
  else
    'Unknow: %s' % status_sid
  end
end

#has_error?Boolean

Returns:

  • (Boolean)


24
25
26
# File 'lib/heimdall/heimdall_model_task.rb', line 24

def has_error?
  self[:status_sid] == 'e'
end

#job_classObject



20
21
22
# File 'lib/heimdall/heimdall_model_task.rb', line 20

def job_class
  self[:job].constantize
end

#logger(msg) ⇒ Object



96
97
98
99
100
101
102
# File 'lib/heimdall/heimdall_model_task.rb', line 96

def logger msg
  return if Heimdall::CONFIG.silent

  status = msg.to_s.downcase.include?('error') ? :error : :info
  message = "#{self.class}[#{self.id}] (#{self.job}) - #{msg}"
  Heimdall.logger.send status, message
end

#nameObject



3
4
5
6
7
8
9
10
11
12
13
14
# File 'lib/heimdall/heimdall_model_task.rb', line 3

def name
  if job == 'HeimdallProxyWorker'
    begin
      parts = Marshal.load Base64.decode64 opts['b64']
      '%s#%s (ProxyWorker)' % parts
    rescue
      'HeimdallProxyWorker (?)'
    end
  else
    job
  end
end

#next_runObject



69
70
71
72
73
74
75
76
77
78
79
# File 'lib/heimdall/heimdall_model_task.rb', line 69

def next_run
  if ['d', 'r'].include?(status_sid) || (status_sid == 'a' && remaining_runs == 0)
    '-'
  else
    if scheduled_at > Time.now
      Time.ago scheduled_at
    else
      'now'
    end
  end
end

#optsObject



28
29
30
31
32
33
34
# File 'lib/heimdall/heimdall_model_task.rb', line 28

def opts
  if self[:opts].class == Hash
    self[:opts]
  else
    @opts ||= JSON.load self[:opts]
  end
end

#run_timeObject



61
62
63
64
65
66
67
# File 'lib/heimdall/heimdall_model_task.rb', line 61

def run_time
  if self[:started_at] && self[:finished_at]
    '%s sec' % (self[:finished_at] - self[:started_at]).to_i
  else
    '-'
  end
end

#set_done(log_data) ⇒ Object



81
82
83
84
# File 'lib/heimdall/heimdall_model_task.rb', line 81

def set_done log_data
  self.update status_sid: 'd', log: log_data, remaining_runs: 0, finished_at: Time.now
  logger 'DONE'
end

#set_fail(log_data) ⇒ Object



86
87
88
89
90
91
92
93
94
# File 'lib/heimdall/heimdall_model_task.rb', line 86

def set_fail log_data
  self.update status_sid: 'e',
    log: log_data,
    finished_at: Time.now,
    scheduled_at: Time.now + Heimdall::CONFIG.repeat_after,
    remaining_runs: remaining_runs - 1

  logger :error
end

#statusObject



16
17
18
# File 'lib/heimdall/heimdall_model_task.rb', line 16

def status
  Heimdall::Database::STATUS[self[:status_sid]] || 'Unknown'
end

#to_jsonObject



116
117
118
# File 'lib/heimdall/heimdall_model_task.rb', line 116

def to_json
  JSON.pretty_generate export
end