32 lines
		
	
	
		
			992 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			992 B
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| module Gitlab
 | |
|   class UsageDataMetrics
 | |
|     class << self
 | |
|       # Build the Usage Ping JSON payload from metrics YAML definitions which have instrumentation class set
 | |
|       def uncached_data
 | |
|         ::Gitlab::Usage::MetricDefinition.all.map do |definition|
 | |
|           instrumentation_class = definition.attributes[:instrumentation_class]
 | |
|           options = definition.attributes[:options]
 | |
| 
 | |
|           if instrumentation_class.present?
 | |
|             metric_value = "Gitlab::Usage::Metrics::Instrumentations::#{instrumentation_class}".constantize.new(
 | |
|               time_frame: definition.attributes[:time_frame],
 | |
|               options: options).value
 | |
| 
 | |
|             metric_payload(definition.key_path, metric_value)
 | |
|           else
 | |
|             {}
 | |
|           end
 | |
|         end.reduce({}, :deep_merge)
 | |
|       end
 | |
| 
 | |
|       private
 | |
| 
 | |
|       def metric_payload(key_path, value)
 | |
|         ::Gitlab::Usage::Metrics::KeyPathProcessor.process(key_path, value)
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |