Class: JobInvocationsController

Inherits:
ApplicationController
  • Object
show all
Includes:
Foreman::Controller::AutoCompleteSearch, ForemanTasks::Concerns::Parameters::Triggering, JobInvocationsChartHelper
Defined in:
app/controllers/job_invocations_controller.rb

Instance Method Summary collapse

Methods included from JobInvocationsChartHelper

#job_invocation_cancelled_status, #job_invocation_chart, #job_invocation_data, #job_invocation_failed_status, #job_invocation_pending_status, #job_invocation_status, #job_invocation_success_status, #task_cancelled?, #task_failed?

Instance Method Details

#cancelObject



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'app/controllers/job_invocations_controller.rb', line 102

def cancel
  @job_invocation = resource_base.find(params[:id])
  result = @job_invocation.cancel(params[:force])

  if result
    flash[:info] = if params[:force]
                     _('Trying to abort the job')
                   else
                     _('Trying to cancel the job')
                   end
  else
    flash[:warning] = if params[:force]
                        _('The job cannot be aborted at the moment.')
                      else
                        _('The job cannot be cancelled at the moment.')
                      end
  end
  redirect_back(:fallback_location => job_invocation_path(@job_invocation))
end

#chartObject



77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'app/controllers/job_invocations_controller.rb', line 77

def chart
  find_resource
  render :json => {
    :finished => @job_invocation.finished?,
    :job_invocations => job_invocation_data(@job_invocation)[:columns],
    :statuses => {
      :success => @job_invocation.progress_report[:success],
      :cancelled => @job_invocation.progress_report[:cancelled],
      :failed => @job_invocation.progress_report[:error],
      :pending => @job_invocation.progress_report[:pending],
    },
  }
end

#createObject



43
44
45
46
47
48
49
50
51
# File 'app/controllers/job_invocations_controller.rb', line 43

def create
  @composer = prepare_composer
  if @composer.trigger
    redirect_to job_invocation_path(@composer.job_invocation)
  else
    @composer.job_invocation.description_format = nil if params.fetch(:job_invocation, {}).key?(:description_override)
    render :action => 'new'
  end
end

#indexObject



67
68
69
# File 'app/controllers/job_invocations_controller.rb', line 67

def index
  @job_invocations = resource_base_search_and_page.with_task.order('job_invocations.id DESC')
end

#newObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'app/controllers/job_invocations_controller.rb', line 6

def new
  return @composer = prepare_composer if params[:feature].present?

  ui_params = {
    :host_ids => params[:host_ids],
    :targeting => {
      :targeting_type => Targeting::STATIC_TYPE,
      :bookmark_id => params[:bookmark_id],
    },
  }
  # replace an empty string search with a dummy search query to match all hosts
  # but only if search query was entered (based on presence of :search parameter)
  if params.key?(:search)
    query = params[:search].empty? ? "name != ''" : params[:search]
    ui_params[:targeting].update(:search_query => query)
  end

  if (template = JobTemplate.find_by(id: params[:template_id]))
    ui_params[:job_invocation] = {
      :job_category => template.job_category,
      :providers => {
        template.provider_type => {:job_template_id => template.id},
      },
    }
  end

  @composer = JobInvocationComposer.from_ui_params(ui_params)
end

#preview_hostsObject



91
92
93
94
95
96
97
98
99
100
# File 'app/controllers/job_invocations_controller.rb', line 91

def preview_hosts
  composer = prepare_composer

  @hosts = composer.targeted_hosts.limit(Setting[:entries_per_page])
  @additional = composer.targeted_hosts.count - Setting[:entries_per_page]
  @dynamic = composer.targeting.dynamic?
  @query = composer.displayed_search_query

  render :partial => 'job_invocations/preview_hosts_list'
end

#refreshObject

refreshes the form



72
73
74
75
# File 'app/controllers/job_invocations_controller.rb', line 72

def refresh
  params[:job_invocation].delete :description_format if params[:job_invocation].key?(:description_override)
  @composer = prepare_composer
end

#rerunObject



35
36
37
38
39
40
41
# File 'app/controllers/job_invocations_controller.rb', line 35

def rerun
  job_invocation = resource_base.find(params[:id])
  @composer = JobInvocationComposer.from_job_invocation(job_invocation, params)
  @job_organization = Taxonomy.find_by(id: job_invocation.task.input[:current_organization_id])
  @job_location = Taxonomy.find_by(id: job_invocation.task.input[:current_location_id])
  render :action => 'new'
end

#showObject



53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'app/controllers/job_invocations_controller.rb', line 53

def show
  @job_invocation = resource_base.includes(:template_invocations => :run_host_job_task).find(params[:id])
  @auto_refresh = @job_invocation.task.try(:pending?)
  @resource_base = @job_invocation.targeting.hosts.authorized(:view_hosts, Host)
  # There's no need to do the joining if we're not filtering
  unless params[:search].nil?
    @resource_base = @resource_base.joins(:template_invocations)
                                   .where(:template_invocations => { :job_invocation_id => @job_invocation.id})
  end
  @hosts = resource_base_search_and_page
  @job_organization = Taxonomy.find_by(id: @job_invocation.task.input[:current_organization_id])
  @job_location = Taxonomy.find_by(id: @job_invocation.task.input[:current_location_id])
end