Class: Logical::Naf::ConstructionZone::Boss

Inherits:
Object
  • Object
show all
Includes:
Af::Application::Component
Defined in:
app/models/logical/naf/construction_zone/boss.rb

Instance Method Summary collapse

Constructor Details

#initializeBoss

Returns a new instance of Boss.



6
7
8
# File 'app/models/logical/naf/construction_zone/boss.rb', line 6

def initialize()
  @foreman = Foreman.new()
end

Instance Method Details

#enqueue_ad_hoc_command(parameters) ⇒ Object



75
76
77
78
# File 'app/models/logical/naf/construction_zone/boss.rb', line 75

def enqueue_ad_hoc_command(parameters)
  work_order = AdHocWorkOrder.new(parameters)
  @foreman.enqueue(work_order)
end

#enqueue_application(application, application_run_group_restriction, application_run_group_name, application_run_group_limit = 1, priority = 0, affinities = [], prerequisites = [], enqueue_backlogs = false) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'app/models/logical/naf/construction_zone/boss.rb', line 10

def enqueue_application(application,
                        application_run_group_restriction,
                        application_run_group_name,
                        application_run_group_limit = 1,
                        priority = 0,
                        affinities = [],
                        prerequisites = [],
                        enqueue_backlogs = false)
  work_order = ApplicationWorkOrder.new(application,
                                        application_run_group_restriction,
                                        application_run_group_name,
                                        application_run_group_limit = 1,
                                        priority = 0,
                                        affinities = [],
                                        prerequisites = [],
                                        enqueue_backlogs = false)
  @foreman.enqueue(work_order)
end

#enqueue_application_schedule(application_schedule) ⇒ Object



29
30
31
32
# File 'app/models/logical/naf/construction_zone/boss.rb', line 29

def enqueue_application_schedule(application_schedule)
  work_order = ApplicationScheduleWorkOrder.new(application_schedule)
  @foreman.enqueue(work_order)
end

#enqueue_command(command, application_type = ::Naf::ApplicationType.rails, application_run_group_restriction = ::Naf::ApplicationRunGroupRestriction.limited_per_all_machines, application_run_group_name = :command, application_run_group_limit = 1, priority = 0, affinities = [], prerequisites = [], enqueue_backlogs = false) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'app/models/logical/naf/construction_zone/boss.rb', line 54

def enqueue_command(command,
                    application_type = ::Naf::ApplicationType.rails,
                    application_run_group_restriction = ::Naf::ApplicationRunGroupRestriction.limited_per_all_machines,
                    application_run_group_name = :command,
                    application_run_group_limit = 1,
                    priority = 0,
                    affinities = [],
                    prerequisites = [],
                    enqueue_backlogs = false)
  work_order = WorkOrder.new(command,
                             application_type,
                             application_run_group_restriction,
                             application_run_group_name,
                             application_run_group_limit,
                             priority,
                             affinities,
                             prerequisites,
                             enqueue_backlogs)
  @foreman.enqueue(work_order)
end

#enqueue_n_commands(parameters, number_of_jobs = :from_limit) ⇒ Object



99
100
101
102
103
104
105
106
# File 'app/models/logical/naf/construction_zone/boss.rb', line 99

def enqueue_n_commands(parameters, number_of_jobs = :from_limit)
  number_of_jobs = (parameters[:application_run_group_quantum] || 1) if number_of_jobs == :from_limit
  logger.info "enqueuing #{parameters[:command]} #{number_of_jobs} time(s)"
  (1..number_of_jobs).each do
    work_order = AdHocWorkOrder.new(parameters)
    @foreman.enqueue(work_order)
  end
end

#enqueue_n_commands_on_machines(parameters, number_of_jobs = :from_limit, machines = []) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'app/models/logical/naf/construction_zone/boss.rb', line 80

def enqueue_n_commands_on_machines(parameters, number_of_jobs = :from_limit, machines = [])
  logger.detail "enqueuing #{parameters[:command]} #{number_of_jobs} time(s) on #{machines.length} machine(s)"
  # enqueue the command on each machine
  machines.each do |machine|
    number_of_jobs = (parameters[:application_run_group_quantum] || 1) if number_of_jobs == :from_limit
    logger.info "enqueuing #{parameters[:command]} #{number_of_jobs} time(s) on #{machine}"
    # enqueue the command number_of_jobs times
    (1..number_of_jobs).each do
      machine_parameters = {
        application_run_group_restriction: ::Naf::ApplicationRunGroupRestriction.limited_per_machine
      }.merge(parameters)
      machine_parameters[:affinities] = [machine.affinity] + affinities(machine_parameters)
      work_order = AdHocWorkOrder.new(machine_parameters)

      @foreman.enqueue(work_order)
    end
  end
end

#enqueue_rails_command(command, application_run_group_restriction = ::Naf::ApplicationRunGroupRestriction.limited_per_all_machines, application_run_group_name = :command, application_run_group_limit = 1, priority = 0, affinities = [], prerequisites = [], enqueue_backlogs = false) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'app/models/logical/naf/construction_zone/boss.rb', line 34

def enqueue_rails_command(command,
                          application_run_group_restriction = ::Naf::ApplicationRunGroupRestriction.limited_per_all_machines,
                          application_run_group_name = :command,
                          application_run_group_limit = 1,
                          priority = 0,
                          affinities = [],
                          prerequisites = [],
                          enqueue_backlogs = false)
  work_order = WorkOrder.new(command,
                             ::Naf::ApplicationType.rails,
                             application_run_group_restriction,
                             application_run_group_name,
                             application_run_group_limit,
                             priority,
                             affinities,
                             prerequisites,
                             enqueue_backlogs)
  @foreman.enqueue(work_order)
end

#reenqueue(job) ⇒ Object



108
109
110
111
112
113
114
115
# File 'app/models/logical/naf/construction_zone/boss.rb', line 108

def reenqueue(job)
  enqueue_rails_command(job.command,
                        job.application_run_group_restriction,
                        job.application_run_group_name,
                        job.application_run_group_limit,
                        job.priority,
                        job.historical_job_affinity_tabs.map{|jat| jat.affinity})
end