Class: Librato::Metrics::Queue

Inherits:
Object
  • Object
show all
Includes:
Processor
Defined in:
lib/librato/metrics/queue.rb

Constant Summary

Constants included from Processor

Processor::MEASUREMENTS_PER_REQUEST

Instance Attribute Summary collapse

Attributes included from Processor

#last_submit_time, #per_request

Instance Method Summary collapse

Methods included from Processor

#client, #persister, #submit, #time

Constructor Details

#initialize(options = {}) ⇒ Queue

Returns a new instance of Queue.



10
11
12
13
14
15
# File 'lib/librato/metrics/queue.rb', line 10

def initialize(options={})
  @queued = {}
  @autosubmit_count = options[:autosubmit_count]
  @skip_measurement_times = options[:skip_measurement_times]
  setup_common_options(options)
end

Instance Attribute Details

#skip_measurement_timesObject

Returns the value of attribute skip_measurement_times.



8
9
10
# File 'lib/librato/metrics/queue.rb', line 8

def skip_measurement_times
  @skip_measurement_times
end

Instance Method Details

#add(measurements) ⇒ Queue

Add a metric entry to the metric set:

Parameters:

  • measurements (Hash)

    measurements to add

Returns:

  • (Queue)

    returns self



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/librato/metrics/queue.rb', line 21

def add(measurements)
  measurements.each do |key, value|
    if value.respond_to?(:each)
      metric = value
      metric[:name] = key.to_s
      type = metric.delete(:type) || metric.delete('type') || 'gauge'
    else
      metric = {:name => key.to_s, :value => value}
      type = :gauge
    end
    if @prefix
      metric[:name] = "#{@prefix}.#{metric[:name]}"
    end
    type = ("#{type}s").to_sym
    if metric[:measure_time]
      check_measure_time(metric)
    elsif !skip_measurement_times
      metric[:measure_time] = epoch_time
    end
    @queued[type] ||= []
    @queued[type] << metric
  end
  submit_check
  self
end

#clearObject Also known as: flush

Remove all queued metrics



63
64
65
# File 'lib/librato/metrics/queue.rb', line 63

def clear
  @queued = {}
end

#countersArray

Currently queued counters

Returns:

  • (Array)


50
51
52
# File 'lib/librato/metrics/queue.rb', line 50

def counters
  @queued[:counters] || []
end

#empty?Boolean

Are any metrics currently queued?

Returns:

  • (Boolean)

    Boolean



57
58
59
# File 'lib/librato/metrics/queue.rb', line 57

def empty?
  @queued.empty?
end

#gaugesObject

Currently queued gauges

Returns:

  • Array



71
72
73
# File 'lib/librato/metrics/queue.rb', line 71

def gauges
  @queued[:gauges] || []
end

#merge!(mergeable) ⇒ Object

Combines queueable measures from the given object into this queue.

Examples:

Merging queues for more performant submission

queue1.merge!(queue2)
queue1.submit  # submits combined contents

Returns:

  • self



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/librato/metrics/queue.rb', line 83

def merge!(mergeable)
  if mergeable.respond_to?(:queued)
    to_merge = mergeable.queued
  elsif mergeable.respond_to?(:has_key?)
    to_merge = mergeable
  else
    raise NotMergeable
  end
  Metrics::PLURAL_TYPES.each do |type|
    if to_merge[type]
      measurements = reconcile_source(to_merge[type], to_merge[:source])
      if @queued[type]
        @queued[type] += measurements
      else
        @queued[type] = measurements
      end
    end
  end
  self
end

#queuedObject

All currently queued metrics

Returns:

  • Hash



107
108
109
110
111
112
# File 'lib/librato/metrics/queue.rb', line 107

def queued
  return {} if @queued.empty?
  globals = {}
  globals[:source] = @source if @source
  @queued.merge(globals)
end

#sizeObject Also known as: length

Count of metrics currently queued

Returns:

  • Integer



117
118
119
# File 'lib/librato/metrics/queue.rb', line 117

def size
  self.queued.inject(0) { |result, data| result + data.last.size }
end