Module: QueueMetricTracker

Included in:
WorkerRoulette::BatchSize, WorkerRoulette::QueueDepth, WorkerRoulette::QueueLatency::Tradesman
Defined in:
lib/worker_roulette/stat_calculator.rb,
lib/worker_roulette/queue_metric_tracker.rb

Defined Under Namespace

Classes: StatCalculator

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.calculatorsObject (readonly)

Returns the value of attribute calculators.



38
39
40
# File 'lib/worker_roulette/queue_metric_tracker.rb', line 38

def calculators
  @calculators
end

.configObject (readonly)

Returns the value of attribute config.



38
39
40
# File 'lib/worker_roulette/queue_metric_tracker.rb', line 38

def config
  @config
end

Class Method Details

.configure(options) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/worker_roulette/queue_metric_tracker.rb', line 39

def configure(options)
  @calculators = {}
  @config = {
    server_name: options[:server_name],
    granularity: options[:granularity],
    metric_host: {
      host_ip:   ip_address(options[:metric_host]),
      host_port: options[:metric_host_port]
    }
  }
  @config.merge!({
    metrics: options[:metrics]
  }) if options[:metrics]
end

.included(tracker) ⇒ Object



54
55
56
57
# File 'lib/worker_roulette/queue_metric_tracker.rb', line 54

def included(tracker)
  @trackers ||= []
  @trackers << tracker
end

.ip_address(server_name) ⇒ Object



66
67
68
# File 'lib/worker_roulette/queue_metric_tracker.rb', line 66

def ip_address(server_name)
  server_name == "localhost" ? "127.0.0.1" : Resolv.new.getaddress(server_name).to_s
end

.track_all(options) ⇒ Object



59
60
61
62
63
64
# File 'lib/worker_roulette/queue_metric_tracker.rb', line 59

def track_all(options)
  @trackers.each do |tracker_class|
    tracker = tracker_class.new
    tracker.track(*options) if tracker.respond_to?(:track)
  end
end

Instance Method Details

#calculate_stats(stat_name, value) ⇒ Object



10
11
12
# File 'lib/worker_roulette/queue_metric_tracker.rb', line 10

def calculate_stats(stat_name, value)
  calculator(stat_name).add(value)
end

#calculator(stat_name) ⇒ Object



14
15
16
# File 'lib/worker_roulette/queue_metric_tracker.rb', line 14

def calculator(stat_name)
  QueueMetricTracker.calculators[stat_name] ||= QueueMetricTracker::StatCalculator.new(granularity)
end

#channel(sender) ⇒ Object



18
19
20
# File 'lib/worker_roulette/queue_metric_tracker.rb', line 18

def channel(sender)
  (sender.split ":").first
end

#configObject



22
23
24
# File 'lib/worker_roulette/queue_metric_tracker.rb', line 22

def config
  QueueMetricTracker.config
end

#enabled?Boolean

Returns:

  • (Boolean)


30
31
32
33
34
35
# File 'lib/worker_roulette/queue_metric_tracker.rb', line 30

def enabled?
  return false unless config && config[:metrics]

  klass = self.class.to_s.split("::").last.underscore.to_sym
  config[:metrics][klass] rescue false
end

#granularityObject



6
7
8
# File 'lib/worker_roulette/queue_metric_tracker.rb', line 6

def granularity
  config[:granularity] || 100
end

#message(label, channel, value) ⇒ Object



26
27
28
# File 'lib/worker_roulette/queue_metric_tracker.rb', line 26

def message(label, channel, value)
  "#{label},server_name=#{config[:server_name]},channel=#{channel} value=#{value} #{(Time.now.to_f * 1_000_000_000).to_i}"
end

#tracker_send(msg) ⇒ Object



2
3
4
# File 'lib/worker_roulette/queue_metric_tracker.rb', line 2

def tracker_send(msg)
  UDPSocket.new.send(msg, 0, config[:metric_host][:host_ip], config[:metric_host][:host_port])
end