def self.load_config(path, params = {})
pre_loadtime = 0
pre_loadtime = params['pre_loadtime'].to_i if params['pre_loadtime']
pre_config_mtime = nil
pre_config_mtime = params['pre_config_mtime'] if params['pre_config_mtime']
config_mtime = File.mtime(path)
if Time.now - Time.at(pre_loadtime) < 5 and config_mtime == pre_config_mtime
return params['pre_conf']
end
config_fname = File.basename(path)
config_basedir = File.dirname(path)
config_data = File.read(path)
inline_config = params['inline_config']
if inline_config == '-'
config_data << "\n" << STDIN.read
elsif inline_config
config_data << "\n" << inline_config.gsub("\\n","\n")
end
fluentd_conf = Fluent::Config.parse(config_data, config_fname, config_basedir, params['use_v1_config'])
system_config = SystemConfig.create(fluentd_conf)
log_level = system_config.log_level || params['log_level']
suppress_repeated_stacktrace = system_config.suppress_repeated_stacktrace || params['suppress_repeated_stacktrace']
log_path = params['log_path']
chuser = params['chuser']
chgroup = params['chgroup']
log_rotate_age = params['log_rotate_age']
log_rotate_size = params['log_rotate_size']
rpc_endpoint = system_config.rpc_endpoint
enable_get_dump = system_config.enable_get_dump
log_opts = {suppress_repeated_stacktrace: suppress_repeated_stacktrace}
logger_initializer = Supervisor::LoggerInitializer.new(
log_path, log_level, chuser, chgroup, log_opts,
log_rotate_age: log_rotate_age,
log_rotate_size: log_rotate_size
)
logger_initializer.init
logger = $log
command_sender = Fluent.windows? ? "pipe" : "signal"
pid_path = params['daemonize']
daemonize = !!params['daemonize']
main_cmd = params['main_cmd']
signame = params['signame']
se_config = {
worker_type: 'spawn',
workers: 1,
log_stdin: false,
log_stdout: false,
log_stderr: false,
enable_heartbeat: true,
auto_heartbeat: false,
unrecoverable_exit_codes: [2],
stop_immediately_at_unrecoverable_exit: true,
logger: logger,
log: logger.out,
log_path: log_path,
log_level: log_level,
logger_initializer: logger_initializer,
chuser: chuser,
chgroup: chgroup,
chumask: 0,
suppress_repeated_stacktrace: suppress_repeated_stacktrace,
daemonize: daemonize,
rpc_endpoint: rpc_endpoint,
enable_get_dump: enable_get_dump,
windows_daemon_cmdline: [ServerEngine.ruby_bin_path,
File.join(File.dirname(__FILE__), 'daemon.rb'),
ServerModule.name,
WorkerModule.name,
path,
JSON.dump(params)],
command_sender: command_sender,
fluentd_conf: fluentd_conf,
main_cmd: main_cmd,
signame: signame,
}
if daemonize
se_config[:pid_path] = pid_path
end
pre_params = params.dup
params['pre_loadtime'] = Time.now.to_i
params['pre_config_mtime'] = config_mtime
params['pre_conf'] = se_config
pre_params['pre_conf'] = nil
params['pre_conf'][:windows_daemon_cmdline][5] = JSON.dump(pre_params)
return se_config
end