# # 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/plugin' require 'fluent/configurable' require 'fluent/system_config' module Fluent module Plugin class Base include Configurable include SystemConfig::Mixin State = Struct.new(:configure, :start, :after_start, :stop, :before_shutdown, :shutdown, :after_shutdown, :close, :terminate) attr_accessor :under_plugin_development def initialize super @_state = State.new(false, false, false, false, false, false, false, false, false) @_context_router = nil @_fluentd_worker_id = nil @under_plugin_development = false end def has_router? false end def plugin_root_dir nil # override this in plugin_id.rb end def fluentd_worker_id return @_fluentd_worker_id if @_fluentd_worker_id @_fluentd_worker_id = (ENV['SERVERENGINE_WORKER_ID'] || 0).to_i @_fluentd_worker_id end def configure(conf) if conf.respond_to?(:for_this_worker?) && conf.for_this_worker? workers = if conf.target_worker_ids && !conf.target_worker_ids.empty? conf.target_worker_ids.size else 1 end system_config_override(workers: workers) end super @_state ||= State.new(false, false, false, false, false, false, false, false, false) @_state.configure = true self end def multi_workers_ready? true end def string_safe_encoding(str) unless str.valid_encoding? log.info "invalid byte sequence is replaced in `#{str}`" if self.respond_to?(:log) str = str.scrub('?') end yield str end def context_router=(router) @_context_router = router end def context_router @_context_router end def start # By initialization order, plugin logger is created before set log_event_enabled. # It causes '@id' specified plugin, it uses plugin logger instead of global logger, ignores `