Class: Ci::PipelineProcessing::AtomicProcessingService::StatusCollection
- Inherits:
-
Object
- Object
- Ci::PipelineProcessing::AtomicProcessingService::StatusCollection
- Includes:
- Gitlab::Utils::StrongMemoize
- Defined in:
- app/services/ci/pipeline_processing/atomic_processing_service/status_collection.rb
Instance Attribute Summary collapse
-
#pipeline ⇒ Object
readonly
Returns the value of attribute pipeline.
Instance Method Summary collapse
-
#created_job_ids_in_stage(stage_position) ⇒ Object
This methods gets a list of jobs for a given stage.
-
#initialize(pipeline) ⇒ StatusCollection
constructor
A new instance of StatusCollection.
-
#processing_jobs ⇒ Object
This method returns a list of all job, that are to be processed.
-
#set_job_status(id, status, lock_version) ⇒ Object
This method updates internal status for given ID.
-
#status_of_all ⇒ Object
This methods gets composite status of all jobs.
-
#status_of_jobs(names) ⇒ Object
This methods gets composite status for jobs with given names.
-
#status_of_jobs_prior_to_stage(stage_position) ⇒ Object
This methods gets composite status for jobs before given stage.
-
#status_of_stage(stage_position) ⇒ Object
This methods gets composite status for jobs at a given stage.
-
#stopped_job_names ⇒ Object
This method returns the names of jobs that have a stopped status.
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
#pipeline ⇒ Object (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_jobs ⇒ Object
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_all ⇒ Object
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_names ⇒ Object
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 |