class Resilient::CircuitBreaker::Metrics
Constants
- StorageFailureKeys
- StorageKeys
- StorageSuccessKeys
Attributes
bucket_size_in_seconds[R]
buckets[R]
storage[R]
window_size_in_seconds[R]
Public Class Methods
new(options = {})
click to toggle source
# 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
Public Instance Methods
failure()
click to toggle source
# File lib/resilient/circuit_breaker/metrics.rb, line 47 def failure @storage.increment(current_bucket, StorageFailureKeys) prune_buckets nil end
reset()
click to toggle source
# File lib/resilient/circuit_breaker/metrics.rb, line 53 def reset @storage.prune(@buckets, StorageKeys) nil end
success()
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# File lib/resilient/circuit_breaker/metrics.rb, line 33 def under_request_volume_threshold?(request_volume_threshold) requests < request_volume_threshold end
Private Instance Methods
current_bucket(timestamp = Time.now.to_i)
click to toggle source
# File lib/resilient/circuit_breaker/metrics.rb, line 82 def current_bucket(timestamp = Time.now.to_i) bucket = @buckets.detect { |bucket| bucket.include?(timestamp) } return bucket if bucket bucket = @bucket_size.bucket(timestamp) @buckets.push bucket bucket end
error_percentage()
click to toggle source
# File lib/resilient/circuit_breaker/metrics.rb, line 69 def error_percentage prune_buckets result = @storage.sum(@buckets, StorageKeys) successes = result[:successes] failures = result[:failures] requests = successes + failures return 0 if failures == 0 || requests == 0 (failures / requests.to_f) * 100 end
prune_buckets(timestamp = Time.now.to_i)
click to toggle source
# File lib/resilient/circuit_breaker/metrics.rb, line 92 def prune_buckets(timestamp = Time.now.to_i) pruned_buckets = [] bucket_range = BucketRange.generate(timestamp, @window_size, @bucket_size) @buckets.delete_if { |bucket| if bucket_range.prune?(bucket) pruned_buckets << bucket true end } if pruned_buckets.any? @storage.prune(pruned_buckets, StorageKeys) end end
requests()
click to toggle source
# File lib/resilient/circuit_breaker/metrics.rb, line 60 def requests prune_buckets requests = 0 @storage.sum(@buckets, StorageKeys).each do |key, value| requests += value end requests end