Class: RailsLogParser::Parser
- Inherits:
-
Object
- Object
- RailsLogParser::Parser
- Defined in:
- lib/rails_log_parser/parser.rb
Class Attribute Summary collapse
Instance Attribute Summary collapse
-
#last_action ⇒ Object
readonly
Returns the value of attribute last_action.
-
#not_parseable_lines ⇒ Object
readonly
Returns the value of attribute not_parseable_lines.
Class Method Summary collapse
Instance Method Summary collapse
- #action(type, params) ⇒ Object
- #actions ⇒ Object
- #active_job(params) ⇒ Object
- #add_message(params) ⇒ Object
- #delayed_job(params) ⇒ Object
- #empty_line(params) ⇒ Object
-
#initialize ⇒ Parser
constructor
A new instance of Parser.
- #puts(line) ⇒ Object
- #request(params) ⇒ Object
- #summary(last_minutes: nil) ⇒ Object
- #without_request(params) ⇒ Object
Constructor Details
#initialize ⇒ Parser
Returns a new instance of Parser.
40 41 42 43 44 45 46 |
# File 'lib/rails_log_parser/parser.rb', line 40 def initialize config_file = File.join(Dir.pwd,'config/rails_log_parser.rb') require config_file if File.file?(config_file) @actions = {} @not_parseable_lines = RailsLogParser::NotParseableLines.new end |
Class Attribute Details
.log_path ⇒ Object
7 8 9 |
# File 'lib/rails_log_parser/parser.rb', line 7 def log_path @log_path || ENV['LOG_PATH'] || raise('no log_path given') end |
Instance Attribute Details
#last_action ⇒ Object (readonly)
Returns the value of attribute last_action.
38 39 40 |
# File 'lib/rails_log_parser/parser.rb', line 38 def last_action @last_action end |
#not_parseable_lines ⇒ Object (readonly)
Returns the value of attribute not_parseable_lines.
38 39 40 |
# File 'lib/rails_log_parser/parser.rb', line 38 def not_parseable_lines @not_parseable_lines end |
Class Method Details
.from_file(path) ⇒ Object
21 22 23 24 25 |
# File 'lib/rails_log_parser/parser.rb', line 21 def from_file(path) File.open(path, 'r') do |file| from_io(file) end end |
.from_io(io) ⇒ Object
11 12 13 14 15 16 17 18 19 |
# File 'lib/rails_log_parser/parser.rb', line 11 def from_io(io) parser = new io.each_line do |line| parser.puts(line) end parser end |
.from_journalctl(unit:, since: nil) ⇒ Object
27 28 29 30 31 32 33 34 35 |
# File 'lib/rails_log_parser/parser.rb', line 27 def from_journalctl(unit:, since: nil) cmd = ["journalctl", "-u", unit, "-o", "cat"] cmd += ["--since", since] if since IO.popen(cmd, err: [:child, :out]) do |io| from_io(io) end end |
Instance Method Details
#action(type, params) ⇒ Object
83 84 85 86 87 88 89 |
# File 'lib/rails_log_parser/parser.rb', line 83 def action(type, params) @actions[params['id']] ||= RailsLogParser::Action.new(type, params['id']) @actions[params['id']].severity = params['severity_label'] @actions[params['id']].datetime = params['datetime'] @actions[params['id']].(params['message']) unless params['message'].nil? @last_action = @actions[params['id']] end |
#actions ⇒ Object
75 76 77 |
# File 'lib/rails_log_parser/parser.rb', line 75 def actions @actions.values end |
#active_job(params) ⇒ Object
107 108 109 |
# File 'lib/rails_log_parser/parser.rb', line 107 def active_job(params) action(:active_job, params) end |
#add_message(params) ⇒ Object
115 116 117 118 |
# File 'lib/rails_log_parser/parser.rb', line 115 def (params) @actions[params['id']] ||= RailsLogParser::Action.new(type, params['id']) @actions[params['id']].(params['message']) end |
#delayed_job(params) ⇒ Object
111 112 113 |
# File 'lib/rails_log_parser/parser.rb', line 111 def delayed_job(params) action(:delayed_job, params) end |
#empty_line(params) ⇒ Object
95 96 97 98 99 |
# File 'lib/rails_log_parser/parser.rb', line 95 def empty_line(params) params = params.named_captures params['message'] = nil action(:request, params) end |
#puts(line) ⇒ Object
79 80 81 |
# File 'lib/rails_log_parser/parser.rb', line 79 def puts(line) RailsLogParser::Line.new(self, line.encode('UTF-8', invalid: :replace)) end |
#request(params) ⇒ Object
91 92 93 |
# File 'lib/rails_log_parser/parser.rb', line 91 def request(params) action(:request, params) end |
#summary(last_minutes: nil) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/rails_log_parser/parser.rb', line 49 def summary(last_minutes: nil) relevant = actions if last_minutes.present? from = last_minutes.to_i.minutes.ago relevant = relevant.select { |a| a.after?(from) } end summary_output = [] if @not_parseable_lines.lines.present? summary_output.push('Not parseable lines:') summary_output += @not_parseable_lines.lines.map { |line| " #{line}" } summary_output.push("\n\n") @not_parseable_lines.save end %i[warn error fatal].each do |severity| selected = relevant.select { |a| a.public_send("#{severity}?") }.reject(&:known_exception?).reject(&:ignore?) next if selected.blank? summary_output.push("#{selected.count} lines with #{severity}:") summary_output += selected.map(&:headline).map { |line| " #{line}" } summary_output.push("\n\n") end summary_output.join("\n") end |
#without_request(params) ⇒ Object
101 102 103 104 105 |
# File 'lib/rails_log_parser/parser.rb', line 101 def without_request(params) params = params.named_captures params['id'] = SecureRandom.uuid action(:without_request, params) end |