Class: Julewire::Core::Integration::DestinationHealth

Inherits:
Object
  • Object
show all
Defined in:
lib/julewire/core/integration/destination_health.rb

Instance Method Summary collapse

Constructor Details

#initialize(counter_keys:, callback_failure_counter: nil, failure_counter: :failures) ⇒ DestinationHealth

Returns a new instance of DestinationHealth.



8
9
10
11
12
13
14
15
# File 'lib/julewire/core/integration/destination_health.rb', line 8

def initialize(counter_keys:, callback_failure_counter: nil, failure_counter: :failures)
  @failure_counter = failure_counter
  @state = Diagnostics::Health.new(
    callback_failure_counter: callback_failure_counter,
    counter_keys: counter_keys,
    track_failures: failure_counter == :failures
  )
end

Instance Method Details

#clear_degradation_if_unchanged(marker) ⇒ Object



35
# File 'lib/julewire/core/integration/destination_health.rb', line 35

def clear_degradation_if_unchanged(marker) = @state.clear_degradation_if_unchanged(marker)

#clear_failures!Object



44
# File 'lib/julewire/core/integration/destination_health.rb', line 44

def clear_failures! = @state.clear_failures!

#degradation_markerObject



33
# File 'lib/julewire/core/integration/destination_health.rb', line 33

def degradation_marker = @state.degradation_marker

#degraded?Boolean

Returns:

  • (Boolean)


46
# File 'lib/julewire/core/integration/destination_health.rb', line 46

def degraded? = @state.degraded?

#increment(key, by: 1) ⇒ Object



17
18
19
# File 'lib/julewire/core/integration/destination_health.rb', line 17

def increment(key, by: 1)
  @state.increment(key, by: by)
end

#last_callback_failureObject



48
# File 'lib/julewire/core/integration/destination_health.rb', line 48

def last_callback_failure = @state.last_callback_failure

#last_failureObject



52
# File 'lib/julewire/core/integration/destination_health.rb', line 52

def last_failure = @state.last_failure

#last_lossObject



50
# File 'lib/julewire/core/integration/destination_health.rb', line 50

def last_loss = @state.last_loss

#record_callback_failure(callback_failure) ⇒ Object



29
30
31
# File 'lib/julewire/core/integration/destination_health.rb', line 29

def record_callback_failure(callback_failure)
  @state.record_callback_failure(callback_failure)
end

#record_failure(error, counter: @failure_counter, **metadata) ⇒ Object



21
22
23
# File 'lib/julewire/core/integration/destination_health.rb', line 21

def record_failure(error, counter: @failure_counter, **)
  @state.record_failure(error, counter: counter, **)
end

#record_loss(reason:, counter: reason, **metadata) ⇒ Object



25
26
27
# File 'lib/julewire/core/integration/destination_health.rb', line 25

def record_loss(reason:, counter: reason, **)
  @state.record_loss(reason: reason, counter: counter, **)
end

#recover_if_successfulObject



37
38
39
40
41
42
# File 'lib/julewire/core/integration/destination_health.rb', line 37

def recover_if_successful
  marker = degradation_marker
  result = yield
  clear_degradation_if_unchanged(marker) unless result == false
  result
end

#snapshot(status: nil, **fields) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/julewire/core/integration/destination_health.rb', line 54

def snapshot(status: nil, **fields)
  snapshot = @state.snapshot(status: status, include_loss: true, **fields)
  callback_failure = last_callback_failure
  return snapshot unless callback_failure

  snapshot.merge(last_callback_failure: callback_failure).freeze
end