36 lines
		
	
	
		
			900 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			900 B
		
	
	
	
		
			Ruby
		
	
	
	
| module Gitlab
 | |
|   module Prometheus
 | |
|     module AdditionalMetricsParser
 | |
|       extend self
 | |
| 
 | |
|       def load_groups_from_yaml
 | |
|         additional_metrics_raw.map(&method(:group_from_entry))
 | |
|       end
 | |
| 
 | |
|       private
 | |
| 
 | |
|       def validate!(obj)
 | |
|         raise ParsingError.new(obj.errors.full_messages.join('\n')) unless obj.valid?
 | |
|       end
 | |
| 
 | |
|       def group_from_entry(entry)
 | |
|         entry[:name] = entry.delete(:group)
 | |
|         entry[:metrics]&.map! do |entry|
 | |
|           Metric.new(entry).tap(&method(:validate!))
 | |
|         end
 | |
| 
 | |
|         MetricGroup.new(entry).tap(&method(:validate!))
 | |
|       end
 | |
| 
 | |
|       def additional_metrics_raw
 | |
|         load_yaml_file&.map(&:deep_symbolize_keys).freeze
 | |
|       end
 | |
| 
 | |
|       # rubocop:disable Cop/ModuleWithInstanceVariables
 | |
|       def load_yaml_file
 | |
|         @loaded_yaml_file ||= YAML.load_file(Rails.root.join('config/prometheus/additional_metrics.yml'))
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |