Sha256: c6d3cab5b26f8996a4ace9a80036e36919785a906630c2ab05c220af1735dc72

Contents?: true

Size: 854 Bytes

Versions: 2

Compression:

Stored size: 854 Bytes

Contents

require 'switch_gear/circuit_breaker'
require 'logger'
require 'redis'

@logger = Logger.new(STDOUT)

handles = ["joe", "jane", "mary", "steve"]

def get_tweets(twitter_handle)
  http_result = ["Success!", "Fail"].sample
  raise RuntimeError.new("Failed to fetch tweets for #{twitter_handle}") if http_result == "Fail"
  @logger.info "#{http_result} getting tweets for #{twitter_handle}"
end

redis = Redis.new

breaker = SwitchGear::CircuitBreaker::Redis.new do |cb|
  cb.circuit = -> (twitter_handle) { get_tweets(twitter_handle) }
  cb.client = redis
  cb.namespace = "get_tweets"
  cb.failure_limit = 2
  cb.reset_timeout = 5
end

handles.each do |handle|
  begin
    breaker.call(handle)
  rescue SwitchGear::CircuitBreaker::OpenError
    @logger.warn "Circuit is open - unable to make calls for #{handle}"
    sleep breaker.reset_timeout
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
switch_gear-0.3.0 examples/example_redis.rb
switch_gear-0.2.0 examples/example_redis.rb