Sha256: 7dfdceac0097e1a9440ac74fd50bd392c00e2501043544890c8a84aba1663e63

Contents?: true

Size: 877 Bytes

Versions: 2

Compression:

Stored size: 877 Bytes

Contents

# frozen_string_literal: true

require_relative 'periodic_sync'

module Prefab
  class EvaluatedKeysAggregator
    include Prefab::PeriodicSync

    attr_reader :data

    def initialize(client:, max_keys:, sync_interval:)
      @max_keys = max_keys
      @client = client
      @name = 'evaluated_keys_aggregator'

      @data = Concurrent::Set.new

      start_periodic_sync(sync_interval)
    end

    def push(key)
      return if @data.size >= @max_keys

      @data.add(key)
    end

    private

    def flush(to_ship, _)
      @pool.post do
        log_internal "Uploading evaluated keys for #{to_ship.size}"

        keys = PrefabProto::EvaluatedKeys.new(keys: to_ship.to_a, namespace: @client.namespace)

        result = @client.post('/api/v1/evaluated-keys', keys)

        log_internal "Uploaded #{to_ship.size} keys: #{result.status}"
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
prefab-cloud-ruby-0.24.5 lib/prefab/evaluated_keys_aggregator.rb
prefab-cloud-ruby-0.24.4 lib/prefab/evaluated_keys_aggregator.rb