Class: Utility::ErrorMonitor
- Inherits:
-
Object
- Object
- Utility::ErrorMonitor
- Defined in:
- lib/utility/error_monitor.rb
Defined Under Namespace
Classes: MaxErrorsExceededError, MaxErrorsInWindowExceededError, MaxSuccessiveErrorsExceededError, MonitoringError
Instance Attribute Summary collapse
-
#consecutive_error_count ⇒ Object
readonly
Returns the value of attribute consecutive_error_count.
-
#error_queue ⇒ Object
readonly
Returns the value of attribute error_queue.
-
#success_count ⇒ Object
readonly
Returns the value of attribute success_count.
-
#total_error_count ⇒ Object
readonly
Returns the value of attribute total_error_count.
Instance Method Summary collapse
- #finalize ⇒ Object
-
#initialize(max_errors: 1000, max_consecutive_errors: 10, max_error_ratio: 0.15, window_size: 100, error_queue_size: 20) ⇒ ErrorMonitor
constructor
A new instance of ErrorMonitor.
- #note_error(error, id: Time.now.to_i) ⇒ Object
- #note_success ⇒ Object
Constructor Details
#initialize(max_errors: 1000, max_consecutive_errors: 10, max_error_ratio: 0.15, window_size: 100, error_queue_size: 20) ⇒ ErrorMonitor
Returns a new instance of ErrorMonitor.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/utility/error_monitor.rb', line 30 def initialize( max_errors: 1000, max_consecutive_errors: 10, max_error_ratio: 0.15, window_size: 100, error_queue_size: 20 ) @max_errors = max_errors @max_consecutive_errors = max_consecutive_errors @max_error_ratio = max_error_ratio @window_size = window_size @total_error_count = 0 @success_count = 0 @consecutive_error_count = 0 @window_errors = Array.new(window_size) { false } @window_index = 0 @last_error = nil @error_queue_size = error_queue_size @error_queue = [] end |
Instance Attribute Details
#consecutive_error_count ⇒ Object (readonly)
Returns the value of attribute consecutive_error_count.
28 29 30 |
# File 'lib/utility/error_monitor.rb', line 28 def consecutive_error_count @consecutive_error_count end |
#error_queue ⇒ Object (readonly)
Returns the value of attribute error_queue.
28 29 30 |
# File 'lib/utility/error_monitor.rb', line 28 def error_queue @error_queue end |
#success_count ⇒ Object (readonly)
Returns the value of attribute success_count.
28 29 30 |
# File 'lib/utility/error_monitor.rb', line 28 def success_count @success_count end |
#total_error_count ⇒ Object (readonly)
Returns the value of attribute total_error_count.
28 29 30 |
# File 'lib/utility/error_monitor.rb', line 28 def total_error_count @total_error_count end |
Instance Method Details
#finalize ⇒ Object
72 73 74 75 76 77 |
# File 'lib/utility/error_monitor.rb', line 72 def finalize total_documents = @total_error_count + @success_count if total_documents > 0 && @total_error_count.to_f / total_documents > @max_error_ratio raise_with_last_cause(MaxErrorsInWindowExceededError.new("There were #{@total_error_count} errors out of #{total_documents} total documents", :tripped_by => @last_error)) end end |
#note_error(error, id: Time.now.to_i) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/utility/error_monitor.rb', line 57 def note_error(error, id: Time.now.to_i) stack_trace = Utility::ExceptionTracking.generate_stack_trace(error) = Utility::ExceptionTracking.(error, nil, nil) Utility::Logger.debug("Message id: #{id} - #{}\n#{stack_trace}") @total_error_count += 1 @consecutive_error_count += 1 @window_errors[@window_index] = true @error_queue << DocumentError.new(error.class.name, , stack_trace, id) @error_queue = @error_queue.drop(1) if @error_queue.size > @error_queue_size increment_window_index @last_error = error raise_if_necessary end |
#note_success ⇒ Object
51 52 53 54 55 |
# File 'lib/utility/error_monitor.rb', line 51 def note_success @consecutive_error_count = 0 @success_count += 1 increment_window_index end |