class GroongaQueryLog::Command::CheckCrash::ProcessEnumerator
Public Class Methods
new(general_log_paths)
click to toggle source
# File lib/groonga-query-log/command/check-crash.rb, line 304 def initialize(general_log_paths) @general_log_paths = general_log_paths @running_processes = {} end
Public Instance Methods
each() { |process| ... }
click to toggle source
# File lib/groonga-query-log/command/check-crash.rb, line 309 def each(&block) general_log_parser = GroongaLog::Parser.new general_log_parser.parse_paths(@general_log_paths) do |entry| check_general_log_entry(general_log_parser.current_path, entry, &block) end @running_processes.each_value do |process| yield(process) end end
Private Instance Methods
check_general_log_entry(path, entry) { |process| ... }
click to toggle source
# File lib/groonga-query-log/command/check-crash.rb, line 322 def check_general_log_entry(path, entry, &block) # p [path, entry] case entry.log_level when :emergency, :alert, :critical, :error, :warning # p [entry.log_level, entry.message, entry.timestamp.iso8601] end case entry.message when /\Agrn_init: <(.+?)>/, /\Amroonga (\d+\.\d+) started\.\z/ version = $1 process = @running_processes[entry.pid] if process process.finished = true process.crashed = true yield(process) @running_processes.delete(entry.pid) end process = GroongaProcess.new(version, entry.pid, entry.timestamp, path) @running_processes[entry.pid] = process when /\Agrn_fin \((\d+)\)\z/ n_leaks = $1.to_i @running_processes[entry.pid] ||= GroongaProcess.new(nil, entry.pid, Time.at(0), path) process = @running_processes[entry.pid] process.n_leaks = n_leaks process.end_time = entry.timestamp process.end_log_path = path process.finished = true yield(process) @running_processes.delete(entry.pid) else @running_processes[entry.pid] ||= GroongaProcess.new(nil, entry.pid, Time.at(0), path) process = @running_processes[entry.pid] case entry.log_level when :notice case entry.message when /lock/ process.important_entries << entry end when :emergency, :alert, :critical, :error process.important_entries << entry end process.end_time = entry.timestamp process.end_log_path = path case entry.message when "-- CRASHED!!! --" process.crashed = true process.finished = true when "----------------" if process.crashed? yield(process) @running_processes.delete(entry.pid) end end end end