@@ -16,7 +16,7 @@ module Fluent
1616 Struct . new ( 'Rule' , :from_states , :pattern , :to_state )
1717
1818 # Configuration of the state machine that detects exceptions.
19- module ExceptionDetectorConfig
19+ module ExceptionDetectorConfig # rubocop:disable Metrics/ModuleLength
2020 # Rule for a state transition: if pattern matches go to the given state.
2121 class RuleTarget
2222 attr_accessor :pattern , :to_state
@@ -106,13 +106,59 @@ def self.supported
106106 rule ( :go_frame_2 , /^\s / , :go_frame_1 )
107107 ] . freeze
108108
109- RUBY_RULES = [
109+ RUBY_ERROR_RULES = [
110110 rule ( :start_state , /Error \( .*\) :$/ , :ruby_before_rails_trace ) ,
111111 rule ( :ruby_before_rails_trace , /^ $/ , :ruby ) ,
112112 rule ( :ruby_before_rails_trace , /^[\t ]+.*?\. rb:\d +:in `/ , :ruby ) ,
113113 rule ( :ruby , /^[\t ]+.*?\. rb:\d +:in `/ , :ruby )
114114 ] . freeze
115115
116+ RUBY_SEGFAULT_RULES = [
117+ rule ( :start_state ,
118+ /:\d +:\s \[ BUG\] Segmentation fault/ , :ruby_description ) ,
119+ rule ( :ruby_description , /^ruby\n */ , :ruby_description_end ) ,
120+ rule ( :ruby_description_end , /\n $/ , :ruby_control_frame_begin ) ,
121+ rule ( :ruby_control_frame_begin ,
122+ /^-- Control frame information --/ , :ruby_control_frames ) ,
123+ rule ( :ruby_control_frames , /^c:/ , :ruby_control_frames ) ,
124+ rule ( :ruby_control_frames , /^\n $/ , :ruby_level_backtrace_frame_start ) ,
125+ rule ( :ruby_level_backtrace_frame_start ,
126+ /-- Ruby level backtrace information --/ ,
127+ :ruby_level_backtrace_frames ) ,
128+ rule ( :ruby_level_backtrace_frames , /:\d +:in / ,
129+ :ruby_level_backtrace_frames ) ,
130+ rule ( :ruby_level_backtrace_frames , /^\n $/ , :ruby_level_backtrace_end ) ,
131+ rule ( :ruby_level_backtrace_end ,
132+ /^-- Machine register context --/ , :ruby_machine_registers ) ,
133+ rule ( :ruby_machine_registers , /: / , :ruby_machine_registers ) ,
134+ rule ( :ruby_machine_registers , /^\n $/ , :ruby_machine_registers_end ) ,
135+ rule ( :ruby_machine_registers_end ,
136+ /^-- C level backtrace information --/ ,
137+ :ruby_c_level_backtrace_frames ) ,
138+ rule ( :ruby_c_level_backtrace_frames , /\[ .*\] / ,
139+ :ruby_c_level_backtrace_frames ) ,
140+ rule ( :ruby_c_level_backtrace_frames , /^\n $/ ,
141+ :ruby_c_level_backtrace_end ) ,
142+ rule ( :ruby_c_level_backtrace_end ,
143+ /^-- Other runtime information/ , :ruby_other_runtime_info ) ,
144+ rule ( :ruby_other_runtime_info , /^\n $/ , :ruby_other_runtime_info ) ,
145+ rule ( :ruby_other_runtime_info , /^* Loaded script:/ , :ruby_loaded_script ) ,
146+ rule ( :ruby_loaded_script , /^\n $/ , :ruby_loaded_features ) ,
147+ rule ( :ruby_loaded_features , /^* Loaded features:/ , :ruby_loaded_features ) ,
148+ rule ( :ruby_loaded_features , /^\n $/ , :ruby_loaded_features_frames ) ,
149+ rule ( :ruby_loaded_features_frames ,
150+ /\d / , :ruby_loaded_features_frames ) ,
151+ rule ( :ruby_loaded_features_frames ,
152+ /^\n $/ , :ruby_process_memory_map ) ,
153+ rule ( :ruby_process_memory_map ,
154+ /^* Process memory map:/ , :ruby_process_memory_map ) ,
155+ rule ( :ruby_process_memory_map ,
156+ /^\n $/ , :ruby_process_memory_map_frames ) ,
157+ rule ( :ruby_process_memory_map_frames ,
158+ /\- / , :ruby_process_memory_map_frames ) ,
159+ rule ( :ruby_process_memory_map_frames , /^\n $/ , :start_state )
160+ ] . freeze
161+
116162 DART_RULES = [
117163 rule ( :start_state , /^Unhandled exception:$/ , :dart_exc ) ,
118164 rule ( :dart_exc , /^Instance of/ , :dart_stack ) ,
@@ -149,6 +195,10 @@ def self.supported
149195 rule ( :dart_stack , /^<asynchronous suspension>$/ , :dart_stack )
150196 ] . freeze
151197
198+ RUBY_RULES = (
199+ RUBY_ERROR_RULES + RUBY_SEGFAULT_RULES
200+ ) . freeze
201+
152202 ALL_RULES = (
153203 JAVA_RULES + PYTHON_RULES + PHP_RULES + GO_RULES + RUBY_RULES + DART_RULES
154204 ) . freeze
0 commit comments