app/controllers/fluentd/settings/in_tail_controller.rb
class Fluentd::Settings::InTailController < ApplicationController
before_action :login_required
before_action :find_fluentd
def after_file_choose
@setting = Fluentd::Setting::InTail.new({
path: params[:path],
tag: nil
})
end
def after_format
# NOTE: pos_file form field doesn't exists before this action
attrs = setting_params
if attrs[:pos_file].blank?
attrs.merge!(pos_file: "/tmp/fluentd-#{@fluentd.id}-#{Time.now.to_i}.pos")
end
@setting = Fluentd::Setting::InTail.new(attrs)
end
def confirm
@setting = Fluentd::Setting::InTail.new(setting_params)
if params[:back]
return render :after_file_choose
end
unless @setting.valid?
return render :after_format
end
end
def finish
@setting = Fluentd::Setting::InTail.new(setting_params)
if params[:back]
return render :after_format
end
unless @setting.valid?
return render "after_format"
end
if @fluentd.agent.configuration.to_s.include?(@setting.to_config.to_s.strip)
@setting.errors.add(:base, :duplicated_conf)
return render "after_format"
end
@fluentd.agent.config_append @setting.to_config.to_s
@fluentd.agent.restart if @fluentd.agent.running?
redirect_to daemon_setting_path(@fluentd)
end
def target_class
Fluentd::Setting::InTail
end
private
def setting_params
permit_params = target_class._types.keys
permit_params << :parse_type
section_class = Fluentd::Setting.const_get("parser_#{params.dig(:setting, :parse_type)}".classify)
permit_params << { parse: section_class._types.keys + [:type] }
params.require(:setting).permit(*permit_params)
end
end