Sha256: a47f9fdf6dfe6d06370d18a34a9b14fa726d6cc8b81a5384d6e7d0c4a52fd7e6

Contents?: true

Size: 1.19 KB

Versions: 4

Compression:

Stored size: 1.19 KB

Contents

require_relative 'log_repository'

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

    def add_log(log_record)
      @semaphore.synchronize { @log_records.push(log_record.dup) }
    end

    def add_log_repository(log_repository)
      return unless log_repository.is_a? RTALogger::LogRepository
      @log_repositories.push(log_repository) unless @log_repositories.include?(log_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

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

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

    def propagate
      @semaphore.synchronize do
        @log_repositories.each do |log_repository|
          log_repository.add_log_records(@log_records)
        end
        @log_records.clear
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
RTALogger-0.1.4 lib/log_propagator.rb
RTALogger-0.1.3 lib/log_propagator.rb
RTALogger-0.1.2 lib/log_propagator.rb
RTALogger-0.1.1 lib/log_propagator.rb