Sha256: 8eaf2e126facd496e55efe1b44b4efa0795cb193af4bccfbfb6ddca0edb4537b

Contents?: true

Size: 630 Bytes

Versions: 10

Compression:

Stored size: 630 Bytes

Contents

require 'concurrent/map'
require 'concurrent/atomic/atomic_fixnum'

module Flipper
  module Cloud
    class Telemetry
      class MetricStorage
        def initialize
          @storage = Concurrent::Map.new { |h, k| h[k] = Concurrent::AtomicFixnum.new(0) }
        end

        def increment(metric)
          @storage[metric].increment
        end

        def drain
          metrics = {}
          @storage.keys.each do |metric|
            metrics[metric] = @storage.delete(metric).value
          end
          metrics.freeze
        end

        def empty?
          @storage.empty?
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
flipper-1.3.2 lib/flipper/cloud/telemetry/metric_storage.rb
flipper-1.3.1 lib/flipper/cloud/telemetry/metric_storage.rb
flipper-1.3.0 lib/flipper/cloud/telemetry/metric_storage.rb
flipper-1.3.0.pre lib/flipper/cloud/telemetry/metric_storage.rb
flipper-1.2.2 lib/flipper/cloud/telemetry/metric_storage.rb
flipper-1.2.1 lib/flipper/cloud/telemetry/metric_storage.rb
flipper-1.2.0 lib/flipper/cloud/telemetry/metric_storage.rb
flipper-1.1.2 lib/flipper/cloud/telemetry/metric_storage.rb
flipper-1.1.1 lib/flipper/cloud/telemetry/metric_storage.rb
flipper-1.1.0 lib/flipper/cloud/telemetry/metric_storage.rb