lib/prometheus/client/mmaped_value.rb in vinted-prometheus-client-mmap-1.2.2 vs lib/prometheus/client/mmaped_value.rb in vinted-prometheus-client-mmap-1.3.0
- old
+ new
@@ -29,15 +29,11 @@
def increment(amount = 1, exemplar_name = '', exemplar_value = '')
@mutex.synchronize do
initialize_file if pid_changed?
@value += amount
- # TODO(GiedriusS): write exemplars too.
- if @file_prefix != 'gauge'
- puts "#{@name} exemplar name = #{exemplar_name}, exemplar_value = #{exemplar_value}"
- end
- write_value(@key, @value)
+ write_value(@key, @value, exemplar_name, exemplar_value)
@value
end
end
def decrement(amount = 1)
@@ -118,16 +114,22 @@
@pid = Process.pid
unless @@files.has_key?(@file_prefix)
unless @file.nil?
@file.close
end
+ unless @exemplar_file.nil?
+ @exemplar_file.close
+ end
mmaped_file = Helper::MmapedFile.open_exclusive_file(@file_prefix)
+ exemplar_file = Helper::MmapedFile.open_exclusive_file('exemplar')
@@files[@file_prefix] = MmapedDict.new(mmaped_file)
+ @@files['exemplar'] = MmapedDict.new(exemplar_file)
end
@file = @@files[@file_prefix]
+ @exemplar_file = @@files['exemplar']
@key = rebuild_key
@value = read_value(@key)
end
@@ -137,11 +139,15 @@
values = @labels.values_at(*keys)
[@metric_name, @name, keys, values].to_json
end
- def write_value(key, val)
+ def write_value(key, val, exemplar_name = '', exemplar_value = '')
@file.write_value(key, val)
+ # Exemplars are only defined on counters or histograms.
+ if @file_prefix == 'counter' or @file_prefix == 'histogram' and exemplar_name != '' and exemplar_value != ''
+ @exemplar_file.write_exemplar(key, val, exemplar_name, exemplar_value)
+ end
rescue StandardError => e
Prometheus::Client.logger.warn("writing value to #{@file.path} failed with #{e}")
Prometheus::Client.logger.debug(e.backtrace.join("\n"))
end