Class: Eco::API::Session::Batch::Jobs

Inherits:
Common::Session::BaseSession show all
Includes:
Enumerable
Defined in:
lib/eco/api/session/batch/jobs.rb

Instance Attribute Summary collapse

Attributes inherited from Common::Session::BaseSession

#api, #config, #environment, #file_manager, #logger, #session

Instance Method Summary collapse

Methods inherited from Common::Session::BaseSession

#enviro=, #fatal, #fm, #mailer, #mailer?, #s3uploader, #s3uploader?, #sftp, #sftp?

Constructor Details

#initialize(e, name:) ⇒ Jobs

Returns a new instance of Jobs.



9
10
11
12
13
# File 'lib/eco/api/session/batch/jobs.rb', line 9

def initialize(e, name:)
  super(e)
  @name = name
  reset
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



7
8
9
# File 'lib/eco/api/session/batch/jobs.rb', line 7

def name
  @name
end

Instance Method Details

#[](name) ⇒ Object



37
38
39
# File 'lib/eco/api/session/batch/jobs.rb', line 37

def [](name)
  @jobs[name]
end

#add(job) {|job, status| ... } ⇒ Eco::API::Session::Batch::Job

Parameters:

Yields:

  • (job, status)

    callback after launching the batch job request against the server.

Yield Parameters:

Returns:



75
76
77
78
79
# File 'lib/eco/api/session/batch/jobs.rb', line 75

def add(job)
  fatal "Expected Eco::API::Session::Batch::Job object. Given #{job.class}" unless job.is_a?(Eco::API::Session::Batch::Job)
  @jobs[job.name] = job
  @callbacks[job] = Proc.new if block_given?
end

#each(&block) ⇒ Object



28
29
30
31
# File 'lib/eco/api/session/batch/jobs.rb', line 28

def each(&block)
  return to_enum(:each) unless block
  items.each(&block)
end

#empty?Boolean

Returns:

  • (Boolean)


24
25
26
# File 'lib/eco/api/session/batch/jobs.rb', line 24

def empty?
  count == 0
end

#errors?Boolean

Returns:

  • (Boolean)


118
119
120
# File 'lib/eco/api/session/batch/jobs.rb', line 118

def errors?
  any? {|job| job.errors?}
end

#exists?(name) ⇒ Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/eco/api/session/batch/jobs.rb', line 41

def exists?(name)
  @jobs.key?(name)
end

#find_jobs(type:) ⇒ Object



101
102
103
104
105
# File 'lib/eco/api/session/batch/jobs.rb', line 101

def find_jobs(type:)
  each_with_object([]) do |job, jbs|
    jbs.push(job) if job.type == type
  end
end

#itemsObject



33
34
35
# File 'lib/eco/api/session/batch/jobs.rb', line 33

def items
  @jobs.values
end

#job(name, type: nil, sets: nil, usecase: nil, &block) ⇒ Eco::API::Session::Batch::Job

Note:
  • the block should only be passed when creating the job

It retrieves an existing job named name or creates it if it doesn't exist.



50
51
52
53
54
# File 'lib/eco/api/session/batch/jobs.rb', line 50

def job(name, type: nil, sets: nil, usecase: nil, &block)
  fatal "Can't give a job post-launch callback &block to an already existing job" if exists?(name)
  new(name, type: type, sets: sets, usecase: usecase, &block) unless exists?(name)
  self[name]
end

#launch(simulate: false) ⇒ Hash<Eco::API::Session::Batch::Job, Eco::API::Session::Batch::Status>

Note:
  • if there was post-launch callback for a Batch::Job, it calls it.

Launches every Batch::Job in the group.



89
90
91
92
93
94
95
96
97
98
99
# File 'lib/eco/api/session/batch/jobs.rb', line 89

def launch(simulate: false)
  each do |job|
    if job.pending?
      status[job] = job_status = job.launch(simulate: simulate)
      callback    = @callbacks[job]
      callback.call(job, job_status) if callback
    end
  end
  launch(simulate: simulate) if pending?
  return status
end

#lengthObject



20
21
22
# File 'lib/eco/api/session/batch/jobs.rb', line 20

def length
  count
end

#new(name, type:, sets:, usecase: nil) {|job, status| ... } ⇒ Eco::API::Session::Batch::Job

Creates a new Batch::Job included as part of this Batch::Jobs.

Parameters:

  • (see Eco::API::Session::Job#new)

Yields:

  • (job, status)

    callback after launching the batch job request against the server.

Yield Parameters:

Returns:



62
63
64
65
66
67
68
# File 'lib/eco/api/session/batch/jobs.rb', line 62

def new(name, type:, sets:, usecase: nil, &block)
  fatal "Can't create job named '#{name}' because it already exists." if exists?(name)

  Batch::Job.new(enviro, name: name, type: type, sets: sets, usecase: usecase).tap do |job|
    add(job, &block)
  end
end

#pending?Boolean

Returns:

  • (Boolean)


81
82
83
# File 'lib/eco/api/session/batch/jobs.rb', line 81

def pending?
  any? {|job| job.pending?}
end

#resetObject



15
16
17
18
# File 'lib/eco/api/session/batch/jobs.rb', line 15

def reset
  @jobs = {}
  @callbacks = {}
end

#statusObject



107
108
109
110
111
112
113
114
115
116
# File 'lib/eco/api/session/batch/jobs.rb', line 107

def status
  if block_given?
    status.each do |job, job_status|
      yield(job, job_status)
    end
    self
  else
    @jobs_status ||= {}
  end
end

#summaryObject



122
123
124
125
126
# File 'lib/eco/api/session/batch/jobs.rb', line 122

def summary
  [].tap do |msg|
    map {|job| msg << job.summary}
  end.join("\n")
end