Class: ForemanTasks::Task
- Inherits:
-
ApplicationRecord
- Object
- ApplicationRecord
- ForemanTasks::Task
show all
- Extended by:
- Search
- Includes:
- Authorizable
- Defined in:
- app/models/foreman_tasks/task.rb,
app/models/foreman_tasks/task/search.rb
Defined Under Namespace
Modules: Search
Classes: DynflowTask, Jail, StatusExplicator, Summarizer, TaskCancelledException
Constant Summary
Constants included
from Search
Search::SUPPORTED_DURATION_FORMAT
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Search
search_by_duration, search_by_generic_resource, search_by_taxonomy
Class Method Details
.authorized_resource_name ⇒ Object
206
207
208
209
|
# File 'app/models/foreman_tasks/task.rb', line 206
def self.authorized_resource_name
'ForemanTasks::Task'
end
|
.latest_tasks_by_resource_ids(label, resource_type, resource_ids) ⇒ Object
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
|
# File 'app/models/foreman_tasks/task.rb', line 261
def self.latest_tasks_by_resource_ids(label, resource_type, resource_ids)
tasks = arel_table
links = ForemanTasks::Link.arel_table
started_at = tasks[:started_at]
resource_id = links[:resource_id]
base_combined_table = tasks
.join(links).on(tasks[:id].eq(links[:task_id]))
.where(tasks[:label].eq(label)
.and(links[:resource_type].eq(resource_type))
.and(links[:resource_id].in(resource_ids)))
grouped = base_combined_table.project(
started_at.maximum.as('started_at_max'),
resource_id
).group(resource_id).order(resource_id).as('grouped')
max_per_resource_id = tasks
.join(links).on(tasks[:id].eq(links[:task_id]))
.join(grouped).on(grouped[:started_at_max].eq(started_at).and(grouped[:resource_id].eq(resource_id)))
.distinct
.project(tasks[Arel.star], grouped[:resource_id])
find_by_sql(max_per_resource_id.to_sql).index_by(&:resource_id)
end
|
Instance Method Details
#action ⇒ Object
237
238
239
240
|
# File 'app/models/foreman_tasks/task.rb', line 237
def action
return to_label if super.blank?
super
end
|
#action_continuous_output ⇒ Object
255
256
257
258
259
|
# File 'app/models/foreman_tasks/task.rb', line 255
def action_continuous_output
return unless main_action.is_a?(Actions::Helpers::WithContinuousOutput)
main_action.continuous_output.sort!
main_action.continuous_output.raw_outputs
end
|
#add_missing_task_groups(groups) ⇒ Object
211
212
213
214
215
|
# File 'app/models/foreman_tasks/task.rb', line 211
def add_missing_task_groups(groups)
groups = [groups] unless groups.is_a? Array
(groups - task_groups).each { |group| task_groups << group }
save!
end
|
#build_notifications ⇒ Object
#check_permissions_after_save ⇒ Object
10
11
12
13
14
15
|
# File 'app/models/foreman_tasks/task.rb', line 10
def check_permissions_after_save
true
end
|
#cli_example ⇒ Object
140
141
142
|
# File 'app/models/foreman_tasks/task.rb', line 140
def cli_example
''
end
|
#delayed? ⇒ Boolean
returns true if the task was planned to execute in the future
168
169
170
|
# File 'app/models/foreman_tasks/task.rb', line 168
def delayed?
start_at.to_i != started_at.to_i
end
|
#execution_type ⇒ Object
114
115
116
|
# File 'app/models/foreman_tasks/task.rb', line 114
def execution_type
delayed? ? N_('Delayed') : N_('Immediate')
end
|
#get_humanized(method) ⇒ Object
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
# File 'app/models/foreman_tasks/task.rb', line 118
def get_humanized(method)
attr = case method
when :humanized_name
:action
when :humanized_input
:input
when :humanized_output
:output
end
if attr
humanized[attr]
else
_('N/A')
end
end
|
#humanized ⇒ Object
134
135
136
137
138
|
# File 'app/models/foreman_tasks/task.rb', line 134
def humanized
{ action: action,
input: '',
output: '' }
end
|
98
99
100
|
# File 'app/models/foreman_tasks/task.rb', line 98
def input
{}
end
|
#notification_recipients_ids ⇒ Object
used by Foreman notifications framework
179
180
181
|
# File 'app/models/foreman_tasks/task.rb', line 179
def notification_recipients_ids
[owner.id]
end
|
#output ⇒ Object
102
103
104
|
# File 'app/models/foreman_tasks/task.rb', line 102
def output
{}
end
|
#owner ⇒ Object
106
107
108
|
# File 'app/models/foreman_tasks/task.rb', line 106
def owner
user
end
|
#paused? ⇒ Boolean
154
155
156
|
# File 'app/models/foreman_tasks/task.rb', line 154
def paused?
state == 'paused'
end
|
#pending? ⇒ Boolean
Also known as:
pending
returns true if the task is running or waiting to be run
145
146
147
|
# File 'app/models/foreman_tasks/task.rb', line 145
def pending?
state != 'stopped'
end
|
#progress ⇒ Object
195
196
197
198
199
200
201
202
203
204
|
# File 'app/models/foreman_tasks/task.rb', line 195
def progress
case state.to_s
when 'running', 'paused'
0.5
when 'stopped'
1
else
0
end
end
|
#recurring? ⇒ Boolean
163
164
165
|
# File 'app/models/foreman_tasks/task.rb', line 163
def recurring?
!recurring_logic_task_group_ids.empty?
end
|
#resumable? ⇒ Boolean
150
151
152
|
# File 'app/models/foreman_tasks/task.rb', line 150
def resumable?
false
end
|
#scheduled? ⇒ Boolean
returns true if the task is CURRENTLY waiting to be executed in the future
159
160
161
|
# File 'app/models/foreman_tasks/task.rb', line 159
def scheduled?
state == 'scheduled'
end
|
#self_and_parents ⇒ Object
172
173
174
175
176
|
# File 'app/models/foreman_tasks/task.rb', line 172
def self_and_parents
[self].tap do |ret|
ret.concat(parent_task.self_and_parents) if parent_task
end
end
|
#sub_tasks_counts ⇒ Object
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
|
# File 'app/models/foreman_tasks/task.rb', line 217
def sub_tasks_counts
result = %w[cancelled error pending success warning].inject({}) do |hash, state|
hash.update(state => 0)
end
result.update sub_tasks.group(:result).count
sum = result.values.reduce(:+)
if respond_to?(:main_action) && main_action.respond_to?(:total_count)
result[:total] = main_action.total_count
key = state == 'stopped' ? 'cancelled' : 'pending'
result[key] += result[:total] - sum
else
result[:total] = sum
end
result.symbolize_keys
end
|
#to_label ⇒ Object
242
243
244
245
246
247
248
249
250
251
252
253
|
# File 'app/models/foreman_tasks/task.rb', line 242
def to_label
parts = []
parts << get_humanized(:name)
parts << Array(get_humanized(:input)).map do |part|
if part.is_a? Array
part[1][:text]
else
part.to_s
end
end.join('; ')
parts.join(' ').strip
end
|
#username ⇒ Object
110
111
112
|
# File 'app/models/foreman_tasks/task.rb', line 110
def username
owner.try(:login)
end
|