lib/phobos.rb in phobos-1.8.0 vs lib/phobos.rb in phobos-1.8.1

- old
+ new

@@ -1,5 +1,7 @@ +# frozen_string_literal: true + require 'ostruct' require 'securerandom' require 'yaml' require 'active_support/core_ext/hash/keys' @@ -11,10 +13,12 @@ require 'logging' require 'erb' require 'phobos/deep_struct' require 'phobos/version' +require 'phobos/constants' +require 'phobos/log' require 'phobos/instrumentation' require 'phobos/errors' require 'phobos/listener' require 'phobos/actions/process_batch' require 'phobos/actions/process_message' @@ -29,20 +33,19 @@ class << self attr_reader :config, :logger attr_accessor :silence_log def configure(configuration) - @config = DeepStruct.new(fetch_settings(configuration)) + @config = fetch_configuration(configuration) @config.class.send(:define_method, :producer_hash) { Phobos.config.producer&.to_hash } @config.class.send(:define_method, :consumer_hash) { Phobos.config.consumer&.to_hash } @config.listeners ||= [] configure_logger - logger.info { Hash(message: 'Phobos configured', env: ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'N/A') } end - def add_listeners(listeners_configuration) - listeners_config = DeepStruct.new(fetch_settings(listeners_configuration)) + def add_listeners(configuration) + listeners_config = fetch_configuration(configuration) @config.listeners += listeners_config.listeners end def create_kafka_client Kafka.new(config.kafka.to_hash.merge(logger: @ruby_kafka_logger)) @@ -53,63 +56,90 @@ min = backoff_config[:min_ms] / 1000.0 max = backoff_config[:max_ms] / 1000.0 ExponentialBackoff.new(min, max).tap { |backoff| backoff.randomize_factor = rand } end + def deprecate(message) + warn "DEPRECATION WARNING: #{message} #{Kernel.caller.first}" + end + # :nodoc: def configure_logger - ruby_kafka = config.logger.ruby_kafka - Logging.backtrace(true) Logging.logger.root.level = silence_log ? :fatal : config.logger.level - appenders = logger_appenders - @ruby_kafka_logger = nil + configure_ruby_kafka_logger + configure_phobos_logger - if config.custom_kafka_logger - @ruby_kafka_logger = config.custom_kafka_logger - elsif ruby_kafka - @ruby_kafka_logger = Logging.logger['RubyKafka'] - @ruby_kafka_logger.appenders = appenders - @ruby_kafka_logger.level = silence_log ? :fatal : ruby_kafka.level + logger.info do + Hash(message: 'Phobos configured', env: ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'N/A') end + end + private + + def fetch_configuration(configuration) + DeepStruct.new(read_configuration(configuration)) + end + + def read_configuration(configuration) + return configuration.to_h if configuration.respond_to?(:to_h) + + YAML.safe_load( + ERB.new( + File.read(File.expand_path(configuration)) + ).result, + [Symbol], + [], + true + ) + end + + def configure_phobos_logger if config.custom_logger @logger = config.custom_logger else @logger = Logging.logger[self] - @logger.appenders = appenders + @logger.appenders = logger_appenders end end - def logger_appenders - date_pattern = '%Y-%m-%dT%H:%M:%S:%L%zZ' - json_layout = Logging.layouts.json(date_pattern: date_pattern) - log_file = config.logger.file - stdout_layout = if config.logger.stdout_json == true - json_layout - else - Logging.layouts.pattern(date_pattern: date_pattern) - end + def configure_ruby_kafka_logger + if config.custom_kafka_logger + @ruby_kafka_logger = config.custom_kafka_logger + elsif config.logger.ruby_kafka + @ruby_kafka_logger = Logging.logger['RubyKafka'] + @ruby_kafka_logger.appenders = logger_appenders + @ruby_kafka_logger.level = silence_log ? :fatal : config.logger.ruby_kafka.level + else + @ruby_kafka_logger = nil + end + end + def logger_appenders appenders = [Logging.appenders.stdout(layout: stdout_layout)] if log_file FileUtils.mkdir_p(File.dirname(log_file)) appenders << Logging.appenders.file(log_file, layout: json_layout) end + appenders end - def deprecate(message) - warn "DEPRECATION WARNING: #{message} #{Kernel.caller.first}" + def log_file + config.logger.file end - private + def json_layout + Logging.layouts.json(date_pattern: Constants::LOG_DATE_PATTERN) + end - def fetch_settings(configuration) - return configuration.to_h if configuration.respond_to?(:to_h) - - YAML.load(ERB.new(File.read(File.expand_path(configuration))).result) + def stdout_layout + if config.logger.stdout_json == true + json_layout + else + Logging.layouts.pattern(date_pattern: Constants::LOG_DATE_PATTERN) + end end end end