class RTALogger::LogPropagator

propagate log records to multiple log repositories

Attributes

repositories[R]

Public Class Methods

new() click to toggle source
# File lib/log_propagator.rb, line 6
def initialize
  @semaphore = Mutex.new
  @records = []
  @repositories = {}
end

Public Instance Methods

add_log(record) click to toggle source
# File lib/log_propagator.rb, line 14
def add_log(record)
  @semaphore.synchronize { @records.push(record.dup) }
end
add_log_repository(repository) click to toggle source
# File lib/log_propagator.rb, line 18
def add_log_repository(repository)
  return if repository.nil? || repository.title.to_s.empty?
  return unless repository.is_a? RTALogger::LogRepository
  @semaphore.synchronize { @repositories[repository.title.to_sym] = repository unless @repositories[repository.title.to_sym].present? }
end
apply_run_time_config(config_json) click to toggle source
# File lib/log_propagator.rb, line 63
def apply_run_time_config(config_json)
  return unless config_json
  apply_run_time_config_repositories(config_json)
end
drop_all_repositories() click to toggle source
# File lib/log_propagator.rb, line 47
def drop_all_repositories
  @semaphore.synchronize { @repositories.clear }
end
load_log_repository(config_json) click to toggle source
# File lib/log_propagator.rb, line 24
def load_log_repository(config_json)
  type = config_json['type']
  return if type.to_s.strip.empty?

  repository = ::RTALogger::LogFactory.create_repository(type, config_json)
  add_log_repository(repository)
end
load_repositories(config_json) click to toggle source
# File lib/log_propagator.rb, line 32
def load_repositories(config_json)
  return if config_json.nil?

  @semaphore.synchronize do
    @repositories.clear
    config_json['repositories']&.each do |repository_config|
      type = repository_config['type']
      next if type.to_s.strip.empty?

      repository = ::RTALogger::LogFactory.create_repository(type, repository_config)
      @repositories[repository.title.to_sym] = repository unless @repositories[repository.title.to_sym].present?
    end
  end
end
propagate() click to toggle source
# File lib/log_propagator.rb, line 68
def propagate
  @semaphore.synchronize do
    @repositories.keys.each do |repository_key|
      @repositories[repository_key.to_sym].add_log_records(@records)
    end
    @records.clear
  end
end
repository_by_title(title) click to toggle source
# File lib/log_propagator.rb, line 51
def repository_by_title(title)
  result = nil
  @semaphore.synchronize do
    @repositories.keys.each do |repository_key|
      result = @repositories[repository_key.to_sym] if repository_key.to_s.casecmp(title).zero?
      break if result
    end
  end

  return result
end
to_builder() click to toggle source
# File lib/log_propagator.rb, line 77
def to_builder
  result = nil
  @semaphore.synchronize do
    result = @repositories&.keys.collect { |repository_key| @repositories[repository_key].to_builder.attributes! }
  end

  return result
end

Private Instance Methods

apply_run_time_config_repositories(config_json) click to toggle source
# File lib/log_propagator.rb, line 88
def apply_run_time_config_repositories(config_json)
  config_json['repositories']&.each do |repository_config|
    next if repository_config['title'].nil?
    repository = repository_by_title(repository_config['title'])
    if repository.present?
      repository.apply_run_time_config(repository_config)
    else
      repository = ::RTALogger::LogFactory.create_repository(repository_config['type'], repository_config)
      add_log_repository(repository)
    end
  end
end