Add Pipeline metrics worker
This commit is contained in:
		
							parent
							
								
									cb8654e856
								
							
						
					
					
						commit
						9c6c5c79f8
					
				| 
						 | 
				
			
			@ -21,6 +21,7 @@ Please view this file on the master branch, on stable branches it's out of date.
 | 
			
		|||
  - Change user & group landing page routing from /u/:username to /:username
 | 
			
		||||
  - Prevent running GfmAutocomplete setup for each diff note !6569
 | 
			
		||||
  - Added documentation for .gitattributes files
 | 
			
		||||
  - Move Pipeline Metrics to separate worker
 | 
			
		||||
  - AbstractReferenceFilter caches project_refs on RequestStore when active
 | 
			
		||||
  - Replaced the check sign to arrow in the show build view. !6501
 | 
			
		||||
  - Add a /wip slash command to toggle the Work In Progress status of a merge request. !6259 (tbalthazar)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,6 +49,10 @@ module Ci
 | 
			
		|||
        transition any => :canceled
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      # IMPORTANT
 | 
			
		||||
      # Do not add any operations to this state_machine
 | 
			
		||||
      # Create a separate worker for each new operation
 | 
			
		||||
 | 
			
		||||
      before_transition [:created, :pending] => :running do |pipeline|
 | 
			
		||||
        pipeline.started_at = Time.now
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			@ -62,13 +66,11 @@ module Ci
 | 
			
		|||
      end
 | 
			
		||||
 | 
			
		||||
      after_transition [:created, :pending] => :running do |pipeline|
 | 
			
		||||
        MergeRequest::Metrics.where(merge_request_id: pipeline.merge_requests.map(&:id)).
 | 
			
		||||
          update_all(latest_build_started_at: pipeline.started_at, latest_build_finished_at: nil)
 | 
			
		||||
        pipeline.run_after_commit { PipelineMetricsWorker.perform_async(id) }
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      after_transition any => [:success] do |pipeline|
 | 
			
		||||
        MergeRequest::Metrics.where(merge_request_id: pipeline.merge_requests.map(&:id)).
 | 
			
		||||
          update_all(latest_build_finished_at: pipeline.finished_at)
 | 
			
		||||
        pipeline.run_after_commit { PipelineMetricsWorker.perform_async(id) }
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      after_transition [:created, :pending, :running] => :success do |pipeline|
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
class PipelineMetricsWorker
 | 
			
		||||
  include Sidekiq::Worker
 | 
			
		||||
 | 
			
		||||
  sidekiq_options queue: :default
 | 
			
		||||
 | 
			
		||||
  def perform(pipeline_id)
 | 
			
		||||
    Ci::Pipeline.find_by(id: pipeline_id).try do |pipeline|
 | 
			
		||||
      merge_requests = pipeline.merge_requests.map(&:id)
 | 
			
		||||
 | 
			
		||||
      metrics = MergeRequest::Metrics.where(merge_request_id: merge_requests)
 | 
			
		||||
      metrics.update_all(latest_build_started_at: pipeline.started_at) if pipeline.active?
 | 
			
		||||
      metrics.update_all(latest_build_finished_at: pipeline.finished_at) if pipeline.success?
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
		Loading…
	
		Reference in New Issue