Sha256: 3b4b1f1b455651e5ac7f08aa44e8455570f4d2dc014b5eb7fa405397e047cf0b

Contents?: true

Size: 1.13 KB

Versions: 2

Compression:

Stored size: 1.13 KB

Contents

# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2023-2024, by Samuel Williams.

require_relative "../metric"

module Metrics
	module Backend
		module Capture
			class Metric < Metrics::Metric
				def initialize(...)
					super
					
					@values = []
					@tags = Set.new
					@sample_rates = []
				end
				
				attr :values
				attr :tags
				attr :sample_rates
				
				def emit(value, tags: nil, sample_rate: 1.0)
					@values << value
					@tags.merge(tags) if tags
					@sample_rates << sample_rate
				end
				
				def as_json
					{
						name: @name,
						type: @type,
						description: @description,
						unit: @unit,
						values: @values,
						tags: @tags.to_a.sort,
						sample_rates: @sample_rates.sort.uniq
					}
				end
				
				def to_json(...)
					as_json.to_json(...)
				end
			end
			
			def self.metrics
				@metrics ||= []
			end
			
			module Interface
				def metric(name, type, description: nil, unit: nil, &block)
					metric = Metric.new(name, type, description, unit)
					
					Capture.metrics << metric
					
					return metric
				end
			end
		end
		
		Interface = Capture::Interface
	end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
metrics-0.12.2 lib/metrics/backend/capture.rb
metrics-0.12.1 lib/metrics/backend/capture.rb