class Fluent::Plugin::Base

Constants

State

Attributes

under_plugin_development[RW]

Public Class Methods

new() click to toggle source
Calls superclass method Fluent::Configurable::new
# File lib/fluent/plugin/base.rb, line 31
def initialize
  @log = nil
  super
  @fluentd_lock_dir = ENV['FLUENTD_LOCK_DIR']
  @_state = State.new(false, false, false, false, false, false, false, false, false)
  @_context_router = nil
  @_fluentd_worker_id = nil
  @under_plugin_development = false
end

Public Instance Methods

acquire_worker_lock(name) { || ... } click to toggle source
# File lib/fluent/plugin/base.rb, line 77
def acquire_worker_lock(name)
  if @fluentd_lock_dir.nil?
    raise InvalidLockDirectory, "can't acquire lock because FLUENTD_LOCK_DIR isn't set"
  end
  lock_path = get_lock_path(name)
  File.open(lock_path, "w") do |f|
    f.flock(File::LOCK_EX)
    yield
  end
  # Update access time to prevent tmpwatch from deleting a lock file.
  FileUtils.touch(lock_path);
end
after_shutdown() click to toggle source
# File lib/fluent/plugin/base.rb, line 137
def after_shutdown
  @_state.after_shutdown = true
  self
end
after_shutdown?() click to toggle source
# File lib/fluent/plugin/base.rb, line 176
def after_shutdown?
  @_state.after_shutdown
end
after_start() click to toggle source
# File lib/fluent/plugin/base.rb, line 117
def after_start
  @_state.after_start = true
  self
end
after_started?() click to toggle source
# File lib/fluent/plugin/base.rb, line 160
def after_started?
  @_state.after_start
end
before_shutdown() click to toggle source
# File lib/fluent/plugin/base.rb, line 127
def before_shutdown
  @_state.before_shutdown = true
  self
end
before_shutdown?() click to toggle source
# File lib/fluent/plugin/base.rb, line 168
def before_shutdown?
  @_state.before_shutdown
end
called_in_test?() click to toggle source
# File lib/fluent/plugin/base.rb, line 188
def called_in_test?
  caller_locations.each do |location|
    # Thread::Backtrace::Location#path returns base filename or absolute path.
    # #absolute_path returns absolute_path always.
    # https://bugs.ruby-lang.org/issues/12159
    if /\/test_[^\/]+\.rb$/.match?(location.absolute_path) # location.path =~ /test_.+\.rb$/
      return true
    end
  end
  false
end
close() click to toggle source
# File lib/fluent/plugin/base.rb, line 142
def close
  @_state.close = true
  self
end
closed?() click to toggle source
# File lib/fluent/plugin/base.rb, line 180
def closed?
  @_state.close
end
configure(conf) click to toggle source
Calls superclass method Fluent::Configurable#configure
# File lib/fluent/plugin/base.rb, line 55
def configure(conf)
  raise ArgumentError, "BUG: type of conf must be Fluent::Config::Element, but #{conf.class} is passed." unless conf.is_a?(Fluent::Config::Element)

  if conf.for_this_worker? || (Fluent::Engine.supervisor_mode && !conf.for_every_workers?)
    system_config_override(workers: conf.target_worker_ids.size)
  end

  super(conf, system_config.strict_config_value)
  @_state ||= State.new(false, false, false, false, false, false, false, false, false)
  @_state.configure = true
  self
end
configured?() click to toggle source
# File lib/fluent/plugin/base.rb, line 152
def configured?
  @_state.configure
end
context_router() click to toggle source
# File lib/fluent/plugin/base.rb, line 102
def context_router
  @_context_router
end
context_router=(router) click to toggle source
# File lib/fluent/plugin/base.rb, line 98
def context_router=(router)
  @_context_router = router
end
fluentd_worker_id() click to toggle source
# File lib/fluent/plugin/base.rb, line 49
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
get_lock_path(name) click to toggle source
# File lib/fluent/plugin/base.rb, line 72
def get_lock_path(name)
  name = name.gsub(/[^a-zA-Z0-9]/, "_")
  File.join(@fluentd_lock_dir, "fluentd-#{name}.lock")
end
has_router?() click to toggle source
# File lib/fluent/plugin/base.rb, line 41
def has_router?
  false
end
inspect() click to toggle source
# File lib/fluent/plugin/base.rb, line 200
def inspect
  # Plugin instances are sometimes too big to dump because it may have too many thins (buffer,storage, ...)
  # Original commit comment says that:
  #   To emulate normal inspect behavior `ruby -e'o=Object.new;p o;p (o.__id__<<1).to_s(16)'`.
  #   https://github.com/ruby/ruby/blob/trunk/gc.c#L788
  "#<%s:%014x>" % [self.class.name, '0x%014x' % (__id__ << 1)]
end
multi_workers_ready?() click to toggle source
# File lib/fluent/plugin/base.rb, line 68
def multi_workers_ready?
  true
end
plugin_root_dir() click to toggle source
# File lib/fluent/plugin/base.rb, line 45
def plugin_root_dir
  nil # override this in plugin_id.rb
end
reloadable_plugin?() click to toggle source
# File lib/fluent/plugin/base.rb, line 208
def reloadable_plugin?
  # Engine can't capture all class variables. so it's forbbiden to use class variables in each plugins if enabling reload.
  self.class.class_variables.empty?
end
shutdown() click to toggle source
# File lib/fluent/plugin/base.rb, line 132
def shutdown
  @_state.shutdown = true
  self
end
shutdown?() click to toggle source
# File lib/fluent/plugin/base.rb, line 172
def shutdown?
  @_state.shutdown
end
start() click to toggle source
# File lib/fluent/plugin/base.rb, line 106
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 `<label @FLUENT_LOG>` setting.
  # This is adhoc approach but impact is minimal.
  if @log.is_a?(Fluent::PluginLogger) && $log.respond_to?(:log_event_enabled) # log_event_enabled check for tests
    @log.log_event_enabled = $log.log_event_enabled
  end
  @_state.start = true
  self
end
started?() click to toggle source
# File lib/fluent/plugin/base.rb, line 156
def started?
  @_state.start
end
stop() click to toggle source
# File lib/fluent/plugin/base.rb, line 122
def stop
  @_state.stop = true
  self
end
stopped?() click to toggle source
# File lib/fluent/plugin/base.rb, line 164
def stopped?
  @_state.stop
end
string_safe_encoding(str) { |str| ... } click to toggle source
# File lib/fluent/plugin/base.rb, line 90
def string_safe_encoding(str)
  unless str.valid_encoding?
    str = str.scrub('?')
    log.info "invalid byte sequence is replaced in `#{str}`" if self.respond_to?(:log)
  end
  yield str
end
terminate() click to toggle source
# File lib/fluent/plugin/base.rb, line 147
def terminate
  @_state.terminate = true
  self
end
terminated?() click to toggle source
# File lib/fluent/plugin/base.rb, line 184
def terminated?
  @_state.terminate
end