fluentd-ui/app/controllers/api_controller.rb
Kouhei Sutou 8e8c95fce3 in_tail: Fix error on setting page for binary file
How to reproduce:

  * Create a binary file by the following command:

        "ruby -e 'puts "\u3042"' > /tmp/xxx"

  * Open /daemon/setting/in_tail
  * Select "/tmp/xxx"
  * Error page is rendered
  * log/production.log says:

        ActionView::Template::Error (undefined method `join' for nil:NilClass):
            12:     = f.text_field :path, class: "form-control", disabled: true
            13:   = render partial: "shared/vue/in_tail_format", locals: { file: f.object.path, formats: @setting.known_formats, initialSelected: f.object.format || @setting.guess_format }
            14:
            15:   %pre= file_tail(@setting.path).join("\n")
            16:
            17:   %p
            18:     = f.submit t('terms.next'), class: "btn btn-lg btn-primary pull-right"
          app/views/fluentd/settings/in_tail/after_file_choose.html.haml:15:in `block in _app_views_fluentd_settings_in_tail_after_file_choose_html_haml___1713159989942914940_40548520'
2014-08-06 17:34:23 +09:00

38 lines
890 B
Ruby

class ApiController < ApplicationController
def tree
render json: Treeview.tree(params[:path])
end
def file_preview
file = params[:file]
unless File.exists?(file)
return render json: [], status: 404
end
unless File.file?(file) && File.readable?(file)
return render json: [], status: 403
end
render json: file_tail(file)
end
def empty_json
render json: []
end
def regexp_preview
preview = RegexpPreview.new(params[:file], params[:format], regexp: params[:regexp], time_format: params[:time_format])
matches = preview.matches
render json: {
regexp: preview.regexp.try(:source),
time_format: preview.time_format,
matches: matches.compact,
}
end
def grok_to_regexp
grok = GrokConverter.new
grok.load_patterns
render text: grok.convert_to_regexp(params[:grok_str]).source
end
end