Class: Librato::Metrics::Queue

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

Constant Summary

Constant Summary

Constants included from Processor

Processor::MEASUREMENTS_PER_REQUEST

Instance Attribute Summary collapse

Attributes included from Processor

#last_submit_time, #per_request, #prefix

Instance Method Summary collapse

Methods included from Processor

#client, #persister, #submit, #time

Constructor Details

#initialize(opts = {}) ⇒ Queue

Returns a new instance of Queue

Options Hash (opts):

  • :autosubmit_count (Integer)

    If set the queue will auto-submit any time it hits this number of measurements.

  • :autosubmit_interval (Integer)

    If set the queue will auto-submit if the given number of seconds has passed when a new metric is added.

  • :clear_failures (Boolean)

    Should the queue remove any queued measurements from its queue if it runs into problems with a request? (default: false)

  • :client (Client)

    The client object to use to connect to Metrics. (default: Librato::Metrics.client)

  • :measure_time (Time|Integer)

    A default measure_time to use for measurements added.

  • :prefix (String)

    If set will apply the given prefix to all metric names of measurements added.

  • :skip_measurement_times (Boolean)

    If true will not assign measurement_time to each measure as they are added.

  • :source (String)

    The default source to use for measurements added.



18
19
20
21
22
23
# File 'lib/librato/metrics/queue.rb', line 18

def initialize(opts={})
  @queued = {}
  @autosubmit_count = opts[:autosubmit_count]
  @skip_measurement_times = opts[:skip_measurement_times]
  setup_common_options(opts)
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:



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/librato/metrics/queue.rb', line 29

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]
      metric[:measure_time] = metric[:measure_time].to_i
      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



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

def clear
  @queued = {}
end

#countersArray

Currently queued counters



59
60
61
# File 'lib/librato/metrics/queue.rb', line 59

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

#empty?Boolean

Are any metrics currently queued?



66
67
68
# File 'lib/librato/metrics/queue.rb', line 66

def empty?
  @queued.empty?
end

#gaugesObject

Currently queued gauges



80
81
82
# File 'lib/librato/metrics/queue.rb', line 80

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


92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/librato/metrics/queue.rb', line 92

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
  submit_check
  self
end

#queuedObject

All currently queued metrics



117
118
119
120
121
122
123
# File 'lib/librato/metrics/queue.rb', line 117

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

#sizeObject Also known as: length

Count of metrics currently queued



128
129
130
# File 'lib/librato/metrics/queue.rb', line 128

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