Sha256: e29fca2aaf0e07fd2aae7e85936fb28c69e70423ad13f93e597b1b4e3b23f224

Contents?: true

Size: 1.31 KB

Versions: 1

Compression:

Stored size: 1.31 KB

Contents

# frozen_string_literal: true

require_relative 'intervals'

module Flagsmith
  # Manager to asynchronously fetch the environment
  class EnvironmentDataPollingManager
    include Flagsmith::SDK::Intervals

    attr_reader :failures_since_last_update

    def initialize(main, refresh_interval_seconds, polling_manager_failure_limit)
      @main = main
      @refresh_interval_seconds = refresh_interval_seconds
      @polling_manager_failure_limit = polling_manager_failure_limit
      @failures_since_last_update = 0
    end

    # rubocop:disable Metrics/MethodLength
    def start
      update_environment = lambda {
        stop
        @interval = set_interval(@refresh_interval_seconds) do
          @main.update_environment
          @failures_since_last_update = 0
        rescue StandardError => e
          @failures_since_last_update += 1
          @main.config.logger.warn "Failure to update the environment due to an error: #{e}"
          raise e if @failures_since_last_update > @polling_manager_failure_limit
        end
      }

      # TODO: this call should be awaited for getIdentityFlags/getEnvironmentFlags when enableLocalEvaluation is true
      update_environment.call
    end
    # rubocop:enable Metrics/MethodLength

    def stop
      return unless @interval

      clear_interval(@interval)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
flagsmith-4.3.0 lib/flagsmith/sdk/pooling_manager.rb