Class: Flipper::Instrumentation::LogSubscriber

Inherits:
ActiveSupport::LogSubscriber
  • Object
show all
Defined in:
lib/flipper/instrumentation/log_subscriber.rb

Instance Method Summary collapse

Instance Method Details

#adapter_operation(event) ⇒ Object

Logs an adapter operation. If operation is for a feature, then that feature is included in log output.

Example Output

# log output for adapter operation with feature
# Flipper feature(search) adapter(memory) set_add("search/actors") (0.0ms)  [ result=#<Set: {"1"}> value="1" ]

# log output for adapter operation with no feature
# Flipper adapter(memory) set_add("features") (0.0ms)  [ result=#<Set: {"search"}> value="search" ]

Returns nothing.



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/flipper/instrumentation/log_subscriber.rb', line 48

def adapter_operation(event)
  return unless logger.debug?

  adapter_name = event.payload[:adapter_name]
  operation = event.payload[:operation]
  result = event.payload[:result]
  value = event.payload[:value]
  key = event.payload[:key]

  feature_description = if key.respond_to?(:feature_name)
    "Flipper feature(#{key.feature_name})"
  else
    "Flipper"
  end

  adapter_description = "adapter(#{adapter_name})"
  operation_description = "#{operation}(#{key.to_s.inspect})"
  description = "#{feature_description} #{adapter_description} #{operation_description}"
  details = "result=#{result.inspect}"

  if event.payload.key?(:value)
    details += " value=#{value.inspect}"
  end

  name = '%s (%.1fms)' % [description, event.duration]
  debug "  #{color(name, CYAN, true)}  [ #{details} ]"
end

#feature_operation(event) ⇒ Object

Logs a feature operation.

Example Output

flipper[:search].enabled?(user)
# Flipper feature(search) enabled? false (1.2ms)  [ thing=#<struct flipper_id="1"> ]

Returns nothing.



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/flipper/instrumentation/log_subscriber.rb', line 16

def feature_operation(event)
  return unless logger.debug?

  feature_name = event.payload[:feature_name]
  gate_name = event.payload[:gate_name]
  operation = event.payload[:operation]
  result = event.payload[:result]
  thing = event.payload[:thing]

  description = "Flipper feature(#{feature_name}) #{operation} #{result.inspect}"
  details = "thing=#{thing.inspect}"

  unless gate_name.nil?
    details += " gate_name=#{gate_name}"
  end

  name = '%s (%.1fms)' % [description, event.duration]
  debug "  #{color(name, CYAN, true)}  [ #{details} ]"
end

#gate_operation(event) ⇒ Object

Logs a gate operation.

Example Output

flipper[:search].enabled?(user)
# Flipper feature(search) gate(boolean) open false (0.1ms)  [ thing=#<struct flipper_id="1"> ]
# Flipper feature(search) gate(group) open false (0.1ms)  [ thing=#<struct flipper_id="1"> ]
# Flipper feature(search) gate(actor) open false (0.1ms)  [ thing=#<struct flipper_id="1"> ]
# Flipper feature(search) gate(percentage_of_actors) open false (0.1ms)  [ thing=#<struct flipper_id="1"> ]
# Flipper feature(search) gate(percentage_of_random) open false (0.1ms)  [ thing=#<struct flipper_id="1"> ]

Returns nothing.



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/flipper/instrumentation/log_subscriber.rb', line 88

def gate_operation(event)
  return unless logger.debug?

  feature_name = event.payload[:feature_name]
  gate_name = event.payload[:gate_name]
  operation = event.payload[:operation]
  result = event.payload[:result]
  thing = event.payload[:thing]

  description = "Flipper feature(#{feature_name}) gate(#{gate_name}) #{operation} #{result.inspect}"
  details = "thing=#{thing.inspect}"

  name = '%s (%.1fms)' % [description, event.duration]
  debug "  #{color(name, CYAN, true)}  [ #{details} ]"
end