Class: Ecoportal::API::V1::Job::Awaiter::Timer

Inherits:
Struct
  • Object
show all
Defined in:
lib/ecoportal/api/v1/job/awaiter/timer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize {|_self| ... } ⇒ Timer

Returns a new instance of Timer.

Yields:

  • (_self)

Yield Parameters:



17
18
19
20
21
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 17

def initialize(...)
  @timestamp = Time.now
  super
  yield(self) if block_given?
end

Instance Attribute Details

#timestampObject (readonly)

Returns the value of attribute timestamp.



15
16
17
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 15

def timestamp
  @timestamp
end

Instance Method Details

#complete?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 41

def complete?
  status.complete?(total)
end

#increasedObject



57
58
59
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 57

def increased
  status.progress_increase(lstatus)
end

#job_idObject



37
38
39
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 37

def job_id
  status.id
end

#lastObject



29
30
31
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 29

def last
  original_last || start
end

#lwaitedObject



65
66
67
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 65

def lwaited
  timestamp - last
end

#net_waitedObject



69
70
71
72
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 69

def net_waited
  last_delay = ldelay || 0
  waited - (last_delay / 2)
end

#new(**kargs, &block) ⇒ Object



33
34
35
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 33

def new(**kargs, &block)
  self.class.new(**new_kargs.merge(kargs), &block)
end

#on_timeout!(&block) ⇒ Object



106
107
108
109
110
111
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 106

def on_timeout!(&block)
  return start_timeout!(&block) if start_timeout?
  return timeout!(&block)       if timeout?

  false
end

#original_lastObject



28
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 28

alias_method :original_last, :last

#original_startObject



23
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 23

alias_method :original_start, :start

#pendingObject



49
50
51
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 49

def pending
  status.pending(total)
end

#progressObject



53
54
55
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 53

def progress
  status.progress
end

#startObject



24
25
26
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 24

def start
  original_start || timestamp
end

#start_timeout! {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:

Raises:



125
126
127
128
129
130
131
132
133
134
135
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 125

def start_timeout!
  return false unless start_timeout?

  yield(self)

  msg  = "Job '#{job_id}' not started (size: #{total}).\n"
  msg << "  Start timed out after #{max_start_delay} seconds.\n"
  msg << "  Current status: #{status}"

  raise API::Errors::StartTimeOut, msg
end

#start_timeout?Boolean

Returns:

  • (Boolean)


100
101
102
103
104
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 100

def start_timeout?
  return false if status.started?

  !time_left_to_start.positive?
end

#started?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 45

def started?
  status.started?
end

#time_leftObject



74
75
76
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 74

def time_left
  (timeout_in - waited).round(2)
end

#time_left_to_startObject



82
83
84
85
86
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 82

def time_left_to_start
  return max_start_delay if started?

  (max_start_delay - waited).round(2)
end

#time_left_totalObject



78
79
80
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 78

def time_left_total
  (timeout - waited).round(2)
end

#timeout! {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:

Raises:



113
114
115
116
117
118
119
120
121
122
123
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 113

def timeout!
  return false unless timeout?

  yield(self)

  msg  = "Job '#{job_id}' not complete (size: #{total}).\n"
  msg << "  Timed out after #{timeout} seconds.\n"
  msg << "  Current status: #{status}"

  raise API::Errors::TimeOut, msg
end

#timeout?Boolean

Returns:

  • (Boolean)


96
97
98
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 96

def timeout?
  !time_left_total.positive?
end

#timeout_inObject



88
89
90
91
92
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 88

def timeout_in
  return time_left_total if started?

  time_left_to_start
end

#waitedObject



61
62
63
# File 'lib/ecoportal/api/v1/job/awaiter/timer.rb', line 61

def waited
  timestamp - start
end