mirror of
https://github.com/fluent/fluentd-ui.git
synced 2025-08-09 15:57:05 +02:00
Refactoring: dependent model file
This commit is contained in:
parent
0a453f15df
commit
5f3a5c6b65
@ -1,107 +1,4 @@
|
||||
class Fluentd
|
||||
module Setting
|
||||
class InTail
|
||||
include ActiveModel::Model
|
||||
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
|
||||
#validates :format, presence: true
|
||||
|
||||
def self.known_formats
|
||||
{
|
||||
:apache2 => [:time_format],
|
||||
:nginx => [:time_format],
|
||||
:syslog => [:time_format],
|
||||
:tsv => [:keys, :time_key],
|
||||
:csv => [:keys, :time_key],
|
||||
:ltsv => [:delimiter, :time_key],
|
||||
:json => [:time_key],
|
||||
:regexp => [:time_format],
|
||||
# TODO: Grok could generate Regexp including \d, \s, etc. fluentd config parser raise error with them for escape sequence check.
|
||||
# TBD How to handle Grok/Regexp later, just comment out for hide
|
||||
# :grok => [:grok_str],
|
||||
}
|
||||
end
|
||||
attr_accessor *known_formats.values.flatten.compact
|
||||
|
||||
def known_formats
|
||||
self.class.known_formats
|
||||
end
|
||||
|
||||
def guess_format
|
||||
case path
|
||||
when /\.json$/
|
||||
:json
|
||||
when /\.csv$/
|
||||
:csv
|
||||
when /\.tsv$/
|
||||
:tsv
|
||||
when /\.ltsv$/
|
||||
:ltsv
|
||||
when /nginx/
|
||||
:nginx
|
||||
when /apache/
|
||||
:apache2
|
||||
when %r|/var/log|
|
||||
:syslog
|
||||
else
|
||||
: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.convert_to_regexp(grok_str).source.gsub("/", "\\/")}/ # grok: '#{grok_str}'"
|
||||
when "regexp"
|
||||
"format /#{regexp}/"
|
||||
else
|
||||
"format #{format}"
|
||||
end
|
||||
end
|
||||
|
||||
def grok
|
||||
@grok ||=
|
||||
begin
|
||||
grok = GrokConverter.new
|
||||
grok.load_patterns
|
||||
grok
|
||||
end
|
||||
end
|
||||
|
||||
def to_conf
|
||||
# NOTE: Using strip_heredoc makes more complex for format_specific_conf indent
|
||||
<<-XML.gsub(/^[ ]*\n/m, "")
|
||||
<source>
|
||||
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}" : ""}
|
||||
</source>
|
||||
XML
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
107
app/models/fluentd/setting/in_tail.rb
Normal file
107
app/models/fluentd/setting/in_tail.rb
Normal file
@ -0,0 +1,107 @@
|
||||
class Fluentd
|
||||
module Setting
|
||||
class InTail
|
||||
include ActiveModel::Model
|
||||
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
|
||||
#validates :format, presence: true
|
||||
|
||||
def self.known_formats
|
||||
{
|
||||
:apache2 => [:time_format],
|
||||
:nginx => [:time_format],
|
||||
:syslog => [:time_format],
|
||||
:tsv => [:keys, :time_key],
|
||||
:csv => [:keys, :time_key],
|
||||
:ltsv => [:delimiter, :time_key],
|
||||
:json => [:time_key],
|
||||
:regexp => [:time_format],
|
||||
# TODO: Grok could generate Regexp including \d, \s, etc. fluentd config parser raise error with them for escape sequence check.
|
||||
# TBD How to handle Grok/Regexp later, just comment out for hide
|
||||
# :grok => [:grok_str],
|
||||
}
|
||||
end
|
||||
attr_accessor *known_formats.values.flatten.compact
|
||||
|
||||
def known_formats
|
||||
self.class.known_formats
|
||||
end
|
||||
|
||||
def guess_format
|
||||
case path
|
||||
when /\.json$/
|
||||
:json
|
||||
when /\.csv$/
|
||||
:csv
|
||||
when /\.tsv$/
|
||||
:tsv
|
||||
when /\.ltsv$/
|
||||
:ltsv
|
||||
when /nginx/
|
||||
:nginx
|
||||
when /apache/
|
||||
:apache2
|
||||
when %r|/var/log|
|
||||
:syslog
|
||||
else
|
||||
: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.convert_to_regexp(grok_str).source.gsub("/", "\\/")}/ # grok: '#{grok_str}'"
|
||||
when "regexp"
|
||||
"format /#{regexp}/"
|
||||
else
|
||||
"format #{format}"
|
||||
end
|
||||
end
|
||||
|
||||
def grok
|
||||
@grok ||=
|
||||
begin
|
||||
grok = GrokConverter.new
|
||||
grok.load_patterns
|
||||
grok
|
||||
end
|
||||
end
|
||||
|
||||
def to_conf
|
||||
# NOTE: Using strip_heredoc makes more complex for format_specific_conf indent
|
||||
<<-XML.gsub(/^[ ]*\n/m, "")
|
||||
<source>
|
||||
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}" : ""}
|
||||
</source>
|
||||
XML
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user