Class: Ci::PipelineProcessing::AtomicProcessingService::StatusCollection

Inherits:
Object
  • Object
show all
Includes:
Gitlab::Utils::StrongMemoize
Defined in:
app/services/ci/pipeline_processing/atomic_processing_service/status_collection.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(pipeline) ⇒ StatusCollection

Returns a new instance of StatusCollection.



11
12
13
14
15
# File 'app/services/ci/pipeline_processing/atomic_processing_service/status_collection.rb', line 11

def initialize(pipeline)
  @pipeline = pipeline
  @stage_jobs = {}
  @prior_stage_jobs = {}
end

Instance Attribute Details

#pipelineObject (readonly)

Returns the value of attribute pipeline.



9
10
11
# File 'app/services/ci/pipeline_processing/atomic_processing_service/status_collection.rb', line 9

def pipeline
  @pipeline
end

Instance Method Details

#created_job_ids_in_stage(stage_position) ⇒ Object

This methods gets a list of jobs for a given stage



58
59
60
61
62
63
# File 'app/services/ci/pipeline_processing/atomic_processing_service/status_collection.rb', line 58

def created_job_ids_in_stage(stage_position)
  all_jobs_grouped_by_stage_position[stage_position]
    .to_a
    .select { |job| job[:status] == 'created' }
    .map { |job| job[:id] }
end

#processing_jobsObject

This method returns a list of all job, that are to be processed



66
67
68
# File 'app/services/ci/pipeline_processing/atomic_processing_service/status_collection.rb', line 66

def processing_jobs
  all_jobs.lazy.reject { |job| job[:processed] }
end

#set_job_status(id, status, lock_version) ⇒ Object

This method updates internal status for given ID



18
19
20
21
22
23
24
# File 'app/services/ci/pipeline_processing/atomic_processing_service/status_collection.rb', line 18

def set_job_status(id, status, lock_version)
  job = all_jobs_by_id[id]
  return unless job

  job[:status] = status
  job[:lock_version] = lock_version
end

#status_of_allObject

This methods gets composite status of all jobs



27
28
29
# File 'app/services/ci/pipeline_processing/atomic_processing_service/status_collection.rb', line 27

def status_of_all
  status_for_array(all_jobs)
end

#status_of_jobs(names) ⇒ Object

This methods gets composite status for jobs with given names



41
42
43
44
45
# File 'app/services/ci/pipeline_processing/atomic_processing_service/status_collection.rb', line 41

def status_of_jobs(names)
  jobs = all_jobs_by_name.slice(*names)

  status_for_array(jobs.values, dag: true)
end

#status_of_jobs_prior_to_stage(stage_position) ⇒ Object

This methods gets composite status for jobs before given stage



48
49
50
51
52
53
54
55
# File 'app/services/ci/pipeline_processing/atomic_processing_service/status_collection.rb', line 48

def status_of_jobs_prior_to_stage(stage_position)
  strong_memoize("status_of_jobs_prior_to_stage_#{stage_position}") do
    stage_jobs = all_jobs_grouped_by_stage_position
      .select { |position, _| position < stage_position }

    status_for_array(stage_jobs.values.flatten)
  end
end

#status_of_stage(stage_position) ⇒ Object

This methods gets composite status for jobs at a given stage



32
33
34
35
36
37
38
# File 'app/services/ci/pipeline_processing/atomic_processing_service/status_collection.rb', line 32

def status_of_stage(stage_position)
  strong_memoize("status_of_stage_#{stage_position}") do
    stage_jobs = all_jobs_grouped_by_stage_position[stage_position].to_a

    status_for_array(stage_jobs.flatten)
  end
end

#stopped_job_namesObject

This method returns the names of jobs that have a stopped status



71
72
73
# File 'app/services/ci/pipeline_processing/atomic_processing_service/status_collection.rb', line 71

def stopped_job_names
  all_jobs.select { |job| job[:status].in?(Ci::HasStatus::STOPPED_STATUSES) }.pluck(:name) # rubocop: disable CodeReuse/ActiveRecord
end