Class: Flipper::Instrumentation::MetriksSubscriber

Inherits:
Object
  • Object
show all
Defined in:
lib/flipper/instrumentation/metriks_subscriber.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, start, ending, transaction_id, payload) ⇒ MetriksSubscriber

Private: Initializes a new event processing instance.



16
17
18
19
20
21
22
23
# File 'lib/flipper/instrumentation/metriks_subscriber.rb', line 16

def initialize(name, start, ending, transaction_id, payload)
  @name = name
  @start = start
  @ending = ending
  @payload = payload
  @duration = ending - start
  @transaction_id = transaction_id
end

Class Method Details

.call(name, start, ending, transaction_id, payload) ⇒ Object

Public: Use this as the subscribed block.



11
12
13
# File 'lib/flipper/instrumentation/metriks_subscriber.rb', line 11

def self.call(name, start, ending, transaction_id, payload)
  new(name, start, ending, transaction_id, payload).update
end

Instance Method Details

#strip_trailing_question_mark(operation) ⇒ Object



87
88
89
# File 'lib/flipper/instrumentation/metriks_subscriber.rb', line 87

def strip_trailing_question_mark(operation)
  operation.to_s.gsub(/\?$/, '')
end

#updateObject



25
26
27
28
29
30
31
32
33
34
# File 'lib/flipper/instrumentation/metriks_subscriber.rb', line 25

def update
  operation_type = @name.split('.').first
  method_name = "update_#{operation_type}_metrics"

  if respond_to?(method_name)
    send(method_name)
  else
    puts "Could not update #{operation_type} metrics as MetriksSubscriber did not respond to `#{method_name}`"
  end
end

#update_adapter_operation_metricsObject



56
57
58
59
60
61
62
63
64
# File 'lib/flipper/instrumentation/metriks_subscriber.rb', line 56

def update_adapter_operation_metrics
  adapter_name = @payload[:adapter_name]
  operation = @payload[:operation]
  result = @payload[:result]
  value = @payload[:value]
  key = @payload[:key]

  Metriks.timer("flipper.adapter.#{adapter_name}.#{operation}").update(@duration)
end

#update_feature_operation_metricsObject



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/flipper/instrumentation/metriks_subscriber.rb', line 36

def update_feature_operation_metrics
  feature_name = @payload[:feature_name]
  gate_name = @payload[:gate_name]
  operation = strip_trailing_question_mark(@payload[:operation])
  result = @payload[:result]
  thing = @payload[:thing]

  Metriks.timer("flipper.feature_operation.#{operation}").update(@duration)

  if @payload[:operation] == :enabled?
    metric_name = if result
      "flipper.feature.#{feature_name}.enabled"
    else
      "flipper.feature.#{feature_name}.disabled"
    end

    Metriks.meter(metric_name).mark
  end
end

#update_gate_operation_metricsObject



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/flipper/instrumentation/metriks_subscriber.rb', line 66

def update_gate_operation_metrics
  feature_name = @payload[:feature_name]
  gate_name = @payload[:gate_name]
  operation = strip_trailing_question_mark(@payload[:operation])
  result = @payload[:result]
  thing = @payload[:thing]

  Metriks.timer("flipper.gate_operation.#{gate_name}.#{operation}").update(@duration)
  Metriks.timer("flipper.feature.#{feature_name}.gate_operation.#{gate_name}.#{operation}").update(@duration)

  if @payload[:operation] == :open?
    metric_name = if result
      "flipper.feature.#{feature_name}.gate.#{gate_name}.open"
    else
      "flipper.feature.#{feature_name}.gate.#{gate_name}.closed"
    end

    Metriks.meter(metric_name).mark
  end
end