| Module | OpenWFE::TimeoutMixin |
| In: |
lib/openwfe/expressions/timeout.rb
|
The timeout behaviour is implemented here, making it easy to mix it in into ParticipantExpression and WhenExpression.
| timeout_at | [RW] | |
| timeout_job_id | [RW] |
Looks for the "timeout" attribute in its process definition and then sets the @timeout_at field (if there is a timeout).
# File lib/openwfe/expressions/timeout.rb, line 64
64: def determine_timeout (timeout_attname=:timeout)
65:
66: #@timeout_at = nil
67: #@timeout_job_id = nil
68:
69: timeout = lookup_attribute(timeout_attname, @applied_workitem)
70: return unless timeout
71:
72: timeout = Rufus::parse_time_string(timeout)
73: @timeout_at = Time.new.to_f + timeout
74: end
Removes any "timed_out" field in the workitem.
# File lib/openwfe/expressions/timeout.rb, line 118
118: def remove_timedout_flag (workitem)
119:
120: workitem.attributes.delete("__timed_out__")
121: end
Providing a default reschedule() implementation for the expressions that use this mixin. This default implementation just reschedules the timeout.
# File lib/openwfe/expressions/timeout.rb, line 81
81: def reschedule (scheduler)
82: to_reschedule(scheduler)
83: end
Combines a call to determine_timeout and to reschedule.
# File lib/openwfe/expressions/timeout.rb, line 88
88: def schedule_timeout (timeout_attname=:timeout)
89:
90: determine_timeout(timeout_attname)
91: to_reschedule(get_scheduler)
92: end
Places a "timed_out" field in the workitem.
# File lib/openwfe/expressions/timeout.rb, line 110
110: def set_timedout_flag (workitem)
111:
112: workitem.attributes["__timed_out__"] = "true"
113: end
prefixed with "to_" for easy mix in
# File lib/openwfe/expressions/timeout.rb, line 128
128: def to_reschedule (scheduler)
129:
130: #return if @timeout_job_id
131: #
132: # already rescheduled
133:
134: return unless @timeout_at
135: #
136: # no need for a timeout
137:
138: @timeout_job_id = "timeout_#{self.fei.to_s}"
139:
140: scheduler.schedule_at(
141: @timeout_at,
142: { :schedulable => self,
143: :job_id => @timeout_job_id,
144: :do_timeout! => true,
145: :tags => [ "timeout", self.class.name ] })
146:
147: ldebug do
148: "to_reschedule() will timeout at " +
149: "#{Rufus::to_iso8601_date(@timeout_at)}" +
150: " @timeout_job_id is #{@timeout_job_id}" +
151: " (oid #{object_id})"
152: end
153:
154: #store_itself()
155: #
156: # done in the including expression
157: end
Unschedules the timeout
# File lib/openwfe/expressions/timeout.rb, line 162
162: def unschedule_timeout ()
163:
164: ldebug do
165: "unschedule_timeout() " +
166: "@timeout_job_id is #{@timeout_job_id}" +
167: " (oid #{object_id})"
168: end
169:
170: #ldebug_callstack "unschedule_timeout()"
171:
172: get_scheduler.unschedule(@timeout_job_id) \
173: if @timeout_job_id
174: end