lib/fluent/command/debug.rb
#
# 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 'optparse'
op = OptionParser.new
host = '127.0.0.1'
port = 24230
unix = nil
op.on('-h', '--host HOST', "fluent host (default: #{host})") {|s|
host = s
}
op.on('-p', '--port PORT', "debug_agent tcp port (default: #{port})", Integer) {|i|
port = i
}
op.on('-u', '--unix PATH', "use unix socket instead of tcp") {|b|
unix = b
}
singleton_class.module_eval do
define_method(:usage) do |msg|
puts op.to_s
puts "error: #{msg}" if msg
exit 1
end
end
begin
op.parse!(ARGV)
if ARGV.length != 0
usage nil
end
rescue
usage $!.to_s
end
require 'drb/drb'
if unix
uri = "drbunix:#{unix}"
else
uri = "druby://#{host}:#{port}"
end
require 'fluent/log'
require 'fluent/env'
require 'fluent/engine'
require 'fluent/system_config'
require 'serverengine'
include Fluent::SystemConfig::Mixin
dl_opts = {}
dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
logger = ServerEngine::DaemonLogger.new(STDERR, dl_opts)
$log = Fluent::Log.new(logger)
Fluent::Engine.init(system_config)
DRb::DRbObject.class_eval do
undef_method :methods
undef_method :instance_eval
undef_method :instance_variables
undef_method :instance_variable_get
end
remote_engine = DRb::DRbObject.new_with_uri(uri)
Fluent.module_eval do
remove_const(:Engine)
const_set(:Engine, remote_engine)
end
include Fluent
puts "Connected to #{uri}."
puts "Usage:"
puts " Fluent::Engine.root_agent.event_router.match('some.tag') : get an output plugin instance"
puts " Fluent::Engine.root_agent.inputs[i] : get input plugin instances"
puts " Fluent::Plugin::OUTPUT_REGISTRY.lookup(name) : load output plugin class (use this if you get DRb::DRbUnknown)"
puts ""
Encoding.default_internal = nil if Encoding.respond_to?(:default_internal)
require 'irb'
IRB.start