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