Class: Resilient::CircuitBreaker::Metrics

Inherits:
Object
  • Object
show all
Defined in:
lib/resilient/circuit_breaker/metrics.rb,
lib/resilient/circuit_breaker/metrics/bucket.rb,
lib/resilient/circuit_breaker/metrics/bucket_size.rb,
lib/resilient/circuit_breaker/metrics/window_size.rb,
lib/resilient/circuit_breaker/metrics/bucket_range.rb,
lib/resilient/circuit_breaker/metrics/storage/memory.rb

Defined Under Namespace

Modules: Storage Classes: Bucket, BucketRange, BucketSize, WindowSize

Constant Summary collapse

StorageSuccessKeys =
[
  :successes,
].freeze
StorageFailureKeys =
[
  :failures,
].freeze
StorageKeys =
(StorageSuccessKeys + StorageFailureKeys).freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Metrics

Returns a new instance of Metrics.



24
25
26
27
28
29
30
31
# File 'lib/resilient/circuit_breaker/metrics.rb', line 24

def initialize(options = {})
  @window_size_in_seconds = options.fetch(:window_size_in_seconds, 60)
  @bucket_size_in_seconds = options.fetch(:bucket_size_in_seconds, 10)
  @window_size = WindowSize.new(@window_size_in_seconds)
  @bucket_size = BucketSize.new(@bucket_size_in_seconds)
  @storage = options.fetch(:storage) { Storage::Memory.new }
  @buckets = []
end

Instance Attribute Details

#bucket_size_in_secondsObject (readonly)

Returns the value of attribute bucket_size_in_seconds.



10
11
12
# File 'lib/resilient/circuit_breaker/metrics.rb', line 10

def bucket_size_in_seconds
  @bucket_size_in_seconds
end

#bucketsObject (readonly)

Returns the value of attribute buckets.



11
12
13
# File 'lib/resilient/circuit_breaker/metrics.rb', line 11

def buckets
  @buckets
end

#storageObject (readonly)

Returns the value of attribute storage.



12
13
14
# File 'lib/resilient/circuit_breaker/metrics.rb', line 12

def storage
  @storage
end

#window_size_in_secondsObject (readonly)

Returns the value of attribute window_size_in_seconds.



9
10
11
# File 'lib/resilient/circuit_breaker/metrics.rb', line 9

def window_size_in_seconds
  @window_size_in_seconds
end

Instance Method Details

#failureObject



47
48
49
50
51
# File 'lib/resilient/circuit_breaker/metrics.rb', line 47

def failure
  @storage.increment(current_bucket, StorageFailureKeys)
  prune_buckets
  nil
end

#resetObject



53
54
55
56
# File 'lib/resilient/circuit_breaker/metrics.rb', line 53

def reset
  @storage.prune(@buckets, StorageKeys)
  nil
end

#successObject



41
42
43
44
45
# File 'lib/resilient/circuit_breaker/metrics.rb', line 41

def success
  @storage.increment(current_bucket, StorageSuccessKeys)
  prune_buckets
  nil
end

#under_error_threshold_percentage?(error_threshold_percentage) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/resilient/circuit_breaker/metrics.rb', line 37

def under_error_threshold_percentage?(error_threshold_percentage)
  error_percentage < error_threshold_percentage
end

#under_request_volume_threshold?(request_volume_threshold) ⇒ Boolean

Returns:

  • (Boolean)


33
34
35
# File 'lib/resilient/circuit_breaker/metrics.rb', line 33

def under_request_volume_threshold?(request_volume_threshold)
  requests < request_volume_threshold
end