41 lines
		
	
	
		
			665 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			665 B
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| module Gitlab
 | |
|   module CorrelationId
 | |
|     LOG_KEY = 'correlation_id'.freeze
 | |
| 
 | |
|     class << self
 | |
|       def use_id(correlation_id, &blk)
 | |
|         # always generate a id if null is passed
 | |
|         correlation_id ||= new_id
 | |
| 
 | |
|         ids.push(correlation_id || new_id)
 | |
| 
 | |
|         begin
 | |
|           yield(current_id)
 | |
|         ensure
 | |
|           ids.pop
 | |
|         end
 | |
|       end
 | |
| 
 | |
|       def current_id
 | |
|         ids.last
 | |
|       end
 | |
| 
 | |
|       def current_or_new_id
 | |
|         current_id || new_id
 | |
|       end
 | |
| 
 | |
|       private
 | |
| 
 | |
|       def ids
 | |
|         Thread.current[:correlation_id] ||= []
 | |
|       end
 | |
| 
 | |
|       def new_id
 | |
|         SecureRandom.uuid
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |