Module: NetworkResiliency

Extended by:
NetworkResiliency
Included in:
NetworkResiliency
Defined in:
lib/network_resiliency.rb,
lib/network_resiliency/stats.rb,
lib/network_resiliency/version.rb,
lib/network_resiliency/adapter/http.rb,
lib/network_resiliency/adapter/mysql.rb,
lib/network_resiliency/adapter/redis.rb,
lib/network_resiliency/adapter/faraday.rb

Defined Under Namespace

Modules: Adapter Classes: Stats

Constant Summary collapse

IP_ADDRESS_REGEX =

private

Regexp.new(/\d{1,3}(\.\d{1,3}){3}/)
VERSION =
"0.3.0"

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#statsdObject

Returns the value of attribute statsd.



13
14
15
# File 'lib/network_resiliency.rb', line 13

def statsd
  @statsd
end

Instance Method Details

#configure {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:



15
16
17
# File 'lib/network_resiliency.rb', line 15

def configure
  yield self
end

#disable!Object



65
66
67
68
69
70
71
72
# File 'lib/network_resiliency.rb', line 65

def disable!
  original = @enabled
  @enabled = false

  yield if block_given?
ensure
  @enabled = original if block_given?
end

#enable!Object



56
57
58
59
60
61
62
63
# File 'lib/network_resiliency.rb', line 56

def enable!
  original = @enabled
  @enabled = true

  yield if block_given?
ensure
  @enabled = original if block_given?
end

#enabled=(enabled) ⇒ Object



48
49
50
51
52
53
54
# File 'lib/network_resiliency.rb', line 48

def enabled=(enabled)
  unless [ true, false ].include?(enabled) || enabled.is_a?(Proc)
    raise ArgumentError
  end

  @enabled = enabled
end

#enabled?(adapter) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/network_resiliency.rb', line 34

def enabled?(adapter)
  return true if @enabled.nil?

  if @enabled.is_a?(Proc)
    # prevent recursive calls
    enabled = @enabled
    disable! { !!enabled.call(adapter) }
  else
    @enabled
  end
rescue
  false
end

#patch(*adapters) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/network_resiliency.rb', line 19

def patch(*adapters)
  adapters.each do |adapter|
    case adapter
    when :http
      Adapter::HTTP.patch
    when :redis
      Adapter::Redis.patch
    when :mysql
      Adapter::Mysql.patch
    else
      raise NotImplementedError
    end
  end
end

#record(adapter:, action:, destination:, duration:, error: nil) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/network_resiliency.rb', line 83

def record(adapter:, action:, destination:, duration:, error: nil)
  # filter raw IP addresses
  return if IP_ADDRESS_REGEX.match?(destination)

  NetworkResiliency.statsd&.distribution(
    "network_resiliency.#{action}",
    duration,
    tags: {
      adapter: adapter,
      destination: destination,
      error: error,
    }.compact,
  )
end

#resetObject



98
99
100
# File 'lib/network_resiliency.rb', line 98

def reset
  @enabled = nil
end

#timestampObject



74
75
76
77
# File 'lib/network_resiliency.rb', line 74

def timestamp
  # milliseconds
  Process.clock_gettime(Process::CLOCK_MONOTONIC) * 1_000
end