Sha256: 3365ff41282273269e0e16159ec9a6c75a95bf3f10cf1f6c1d06468dd727d9c4

Contents?: true

Size: 1.15 KB

Versions: 2

Compression:

Stored size: 1.15 KB

Contents

require_relative 'log_repository'

module RTALogger
  # propagate log records to multiple log repositories
  class LogPropagator
    def initialize
      @semaphore = Mutex.new
      @records = []
      @repositories = []
    end

    attr_reader :repositories

    def add_log(record)
      @semaphore.synchronize { @records.push(record.dup) }
    end

    def add_log_repository(repository)
      return unless repository.is_a? RTALogger::LogRepository
      @repositories.push(repository) unless @repositories.include?(repository)
    end

    def load_log_repository(config_json)
      type = config_json['type']
      return if type.to_s.strip.empty?
      enable = config_json['enable'].nil? ? true : config_json['enable']
      return unless enable

      repository = ::RTALogger::LogFactory.create_repository(type, config_json)
      add_log_repository(repository)
    end

    def drop_all_repositories
      @semaphore.synchronize { @repositories.clear }
    end

    def propagate
      @semaphore.synchronize do
        @repositories.each do |repository|
          repository.add_log_records(@records)
        end
        @records.clear
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
RTALogger-1.1.1 lib/log_propagator.rb
RTALogger-1.1.0 lib/log_propagator.rb