From c5096bf86ea33c8149082479a63a2fc4de8843ba Mon Sep 17 00:00:00 2001 From: uu59 Date: Mon, 23 Jun 2014 15:26:13 +0900 Subject: [PATCH] Support grok format (still work in progress) --- .../fluentd/settings_controller.rb | 3 +- app/models/fluentd/setting.rb | 56 ++++++++++++++----- app/views/fluentd/settings/_form.html.haml | 15 +++-- app/views/shared/vue/_in_tail_format.html.erb | 36 +++++++++--- 4 files changed, 84 insertions(+), 26 deletions(-) diff --git a/app/controllers/fluentd/settings_controller.rb b/app/controllers/fluentd/settings_controller.rb index dd45c9f..6ac3a1b 100644 --- a/app/controllers/fluentd/settings_controller.rb +++ b/app/controllers/fluentd/settings_controller.rb @@ -65,8 +65,9 @@ class Fluentd::SettingsController < ApplicationController private def setting_params + setting_params = params.require(:setting).permit(:path, :format, :regexp, *Fluentd::Setting::InTail.known_formats, :tag, :rotate_wait, :pos_file, :read_from_head, :refresh_interval) { :pos_file => "/tmp/fluentd-#{@fluentd.id}-#{Time.now.to_i}.pos", - }.merge params.require(:setting).permit(:path, :format, *Fluentd::Setting::InTail.known_formats, :tag, :rotate_wait, :pos_file, :read_from_head, :refresh_interval) + }.merge setting_params end end diff --git a/app/models/fluentd/setting.rb b/app/models/fluentd/setting.rb index 0c1b718..083489f 100644 --- a/app/models/fluentd/setting.rb +++ b/app/models/fluentd/setting.rb @@ -2,7 +2,7 @@ class Fluentd module Setting class InTail include ActiveModel::Model - attr_accessor :path, :tag, :format, :time_format, :rotate_wait, :pos_file, :read_from_head, :refresh_interval + attr_accessor :path, :tag, :format, :regexp, :time_format, :rotate_wait, :pos_file, :read_from_head, :refresh_interval validates :path, presence: true validates :tag, presence: true @@ -10,7 +10,6 @@ class Fluentd def self.known_formats { - :regexp => [], :apache2 => [:time_format], :nginx => [:time_format], :syslog => [:time_format], @@ -18,6 +17,7 @@ class Fluentd :csv => [:keys, :time_key], :ltsv => [:delimiter, :time_key], :json => [:time_key], + :grok => [:grok_str], } end attr_accessor *known_formats.values.flatten.compact @@ -43,21 +43,51 @@ class Fluentd when %r|/var/log| :syslog else - :regexp + :grok + end + end + + def extra_format_options + self.class.known_formats[format.to_sym] || [] + end + + def format_specific_conf + return "" if %w(grok regexp).include?(format) + + indent = " " * 2 + format_specific_conf = "" + extra_format_options.each do |key| + format_specific_conf << "#{indent}#{key} #{send(key)}\n" + end + format_specific_conf + end + + def certain_format_line + case format + when "grok" + "format #{grok_str} # grok: #{grok_str}" # TODO: convert to regexp + when "regexp" + "format #{regexp}" + else + "format #{format}" end end def to_conf - <<-XML.strip_heredoc.gsub(/^[ ]+\n/m, "") - - type tail - path #{path} - tag #{tag} - #{read_from_head.to_i.zero? ? "" : "read_from_head true"} - #{pos_file.present? ? "pos_file #{pos_file}" : ""} - #{rotate_wait.present? ? "rotate_wait #{rotate_wait}" : ""} - #{refresh_interval.present? ? "refresh_interval #{refresh_interval}" : ""} - + # NOTE: Using strip_heredoc makes more complex for format_specific_conf indent + <<-XML.gsub(/^[ ]*\n/m, "") + + type tail + path #{path} + tag #{tag} + #{certain_format_line} +#{format_specific_conf} + + #{read_from_head.to_i.zero? ? "" : "read_from_head true"} + #{pos_file.present? ? "pos_file #{pos_file}" : ""} + #{rotate_wait.present? ? "rotate_wait #{rotate_wait}" : ""} + #{refresh_interval.present? ? "refresh_interval #{refresh_interval}" : ""} + XML end end diff --git a/app/views/fluentd/settings/_form.html.haml b/app/views/fluentd/settings/_form.html.haml index da8dc68..8e1c488 100644 --- a/app/views/fluentd/settings/_form.html.haml +++ b/app/views/fluentd/settings/_form.html.haml @@ -10,11 +10,16 @@ = f.label :format = f.hidden_field :format = f.text_field :format, class: "form-control", disabled: true -- @setting.known_formats[@setting.format.to_sym].each do |key| - %label= key - = f.hidden_field key - = @setting.send(key) - %br +- if @setting.known_formats[@setting.format.to_sym] + - @setting.known_formats[@setting.format.to_sym].each do |key| + %label= key + = f.hidden_field key + = @setting.send(key) + %br +- else + %label= @setting.format + = f.hidden_field :regexp + = @setting.regexp %div.form-group = f.label :tag = f.text_field :tag, class: "form-control" diff --git a/app/views/shared/vue/_in_tail_format.html.erb b/app/views/shared/vue/_in_tail_format.html.erb index 02b4db9..a567098 100644 --- a/app/views/shared/vue/_in_tail_format.html.erb +++ b/app/views/shared/vue/_in_tail_format.html.erb @@ -1,13 +1,35 @@
- - + +
-
- - + +
+
+ + +
+
+ + +
+
+ TODO: grok reference +
+
+ +
+
+ + + +