Module: LogStats::LineParser
- Defined in:
- lib/log_stats/line_parser.rb
Class Method Summary collapse
- .parse(log_data, config) ⇒ Object
- .parse_field(field, line_string, event_config) ⇒ Object
- .parse_line(line_string, event_config) ⇒ Object
- .parse_numeric(value) ⇒ Object
- .strip_quotes(value) ⇒ Object
Class Method Details
.parse(log_data, config) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 |
# File 'lib/log_stats/line_parser.rb', line 3 def self.parse(log_data, config) data = {} lines = (log_data.is_a?(String) ? log_data.split("\n") : log_data) lines.each do |line_string| config[:events].each do |event, event_config| if event_config[:line_pattern] =~ line_string data[event] ||= [] data[event].push(parse_line(line_string, event_config)) end end end data end |
.parse_field(field, line_string, event_config) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/log_stats/line_parser.rb', line 29 def self.parse_field(field, line_string, event_config) if field[:parse] value = field[:parse].call(line_string) else value = /\b#{field[:name]}=(\S+)/.match(line_string).to_a[1] value = strip_quotes(value) value = parse_numeric(value) if field[:numeric] end puts "Parsing failed field=#{field} line=#{line_string}" unless (value || field[:optional]) value rescue Exception => e puts "Parsing failed field=#{field} line=#{line_string}: #{e.}" nil end |
.parse_line(line_string, event_config) ⇒ Object
44 45 46 47 48 49 50 51 |
# File 'lib/log_stats/line_parser.rb', line 44 def self.parse_line(line_string, event_config) event_config[:fields].reduce({}) do |acc, field| if value = parse_field(field, line_string, event_config) acc[field[:name]] = value end acc end end |
.parse_numeric(value) ⇒ Object
25 26 27 |
# File 'lib/log_stats/line_parser.rb', line 25 def self.parse_numeric(value) value[/\d+/].to_i end |
.strip_quotes(value) ⇒ Object
17 18 19 20 21 22 23 |
# File 'lib/log_stats/line_parser.rb', line 17 def self.strip_quotes(value) if value && value.start_with?('"') value[1..-2] else value end end |