# # Fluentd # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # require 'fluent/config' require 'fluent/event' require 'fluent/event_router' require 'fluent/msgpack_factory' require 'fluent/root_agent' require 'fluent/time' require 'fluent/system_config' require 'fluent/plugin' module Fluent class EngineClass # For compat. remove it in fluentd v2 include Fluent::MessagePackFactory::Mixin def initialize @root_agent = nil @default_loop = nil @engine_stopped = false @_worker_id = nil @log_event_router = nil @log_emit_thread = nil @log_event_loop_stop = false @log_event_loop_graceful_stop = false @log_event_queue = [] @log_event_verbose = false @suppress_config_dump = false @system_config = SystemConfig.new @dry_run_mode = false end MAINLOOP_SLEEP_INTERVAL = 0.3 MATCH_CACHE_SIZE = 1024 LOG_EMIT_INTERVAL = 0.1 attr_reader :root_agent attr_reader :matches, :sources attr_reader :system_config attr_accessor :dry_run_mode def init(system_config) @system_config = system_config @suppress_config_dump = system_config.suppress_config_dump unless system_config.suppress_config_dump.nil? @without_source = system_config.without_source unless system_config.without_source.nil? @log_event_verbose = system_config.log_event_verbose unless system_config.log_event_verbose.nil? @root_agent = RootAgent.new(log: log, system_config: @system_config) self end def log $log end def parse_config(io, fname, basepath = Dir.pwd, v1_config = false) if fname =~ /\.rb$/ require 'fluent/config/dsl' Config::DSL::Parser.parse(io, File.join(basepath, fname)) else Config.parse(io, fname, basepath, v1_config) end end def run_configure(conf) configure(conf) conf.check_not_fetched { |key, e| parent_name, plugin_name = e.unused_in if parent_name message = if plugin_name "section <#{e.name}> is not used in <#{parent_name}> of #{plugin_name} plugin" else "section <#{e.name}> is not used in <#{parent_name}>" end if e.for_every_workers? $log.warn :worker0, message elsif e.for_this_worker? $log.warn message end next end unless e.name == 'system' unless @without_source && e.name == 'source' message = "parameter '#{key}' in #{e.to_s.strip} is not used." if e.for_every_workers? $log.warn :worker0, message elsif e.for_this_worker? $log.warn message end end end } end def configure(conf) # plugins / configuration dumps Gem::Specification.find_all.select{|x| x.name =~ /^fluent(d|-(plugin|mixin)-.*)$/}.each do |spec| $log.info :worker0, "gem '#{spec.name}' version '#{spec.version}'" end @root_agent.configure(conf) begin log_event_agent = @root_agent.find_label(Fluent::Log::LOG_EVENT_LABEL) log_event_router = log_event_agent.event_router # suppress mismatched tags only for