Class: Metrics::Drivers::L2Met::Lines

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/metrics/drivers/l2met.rb

Overview

Responsible for taking a prefix, and an array of measurements, and returning an array of log lines that are limited to 1024 characters per line.

Constant Summary collapse

MAX_LEN =
1024.freeze
DELIMITER =
' '.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(source, measurements) ⇒ Lines

Returns a new instance of Lines.



62
63
64
65
66
# File 'lib/metrics/drivers/l2met.rb', line 62

def initialize(source, measurements)
  @source = "source=#{source}"
  @measurements = measurements
  @max = MAX_LEN - @source.length + DELIMITER.length * 2
end

Instance Attribute Details

#maxObject (readonly)

Returns the value of attribute max.



60
61
62
# File 'lib/metrics/drivers/l2met.rb', line 60

def max
  @max
end

#measurementsObject (readonly)

Returns the value of attribute measurements.



59
60
61
# File 'lib/metrics/drivers/l2met.rb', line 59

def measurements
  @measurements
end

#sourceObject (readonly)

Returns the value of attribute source.



58
59
60
# File 'lib/metrics/drivers/l2met.rb', line 58

def source
  @source
end

Instance Method Details

#each(&block) ⇒ Object



68
69
70
# File 'lib/metrics/drivers/l2met.rb', line 68

def each(&block)
  measurements.each(&block)
end

#linesObject

Groups the array of measurements into an array of log lines, each line prefixed with the source.

Example

# This:
['measure#rack.request=1', ..., 'measure#rack.request.time=200ms']

# Into this:
['source=app measure#rack.request=1', 'source=app measure#rack.request.time=200ms', ...]

Returns an Array.



84
85
86
87
88
89
90
91
92
# File 'lib/metrics/drivers/l2met.rb', line 84

def lines
  total = 0
  chunk { |measurement|
    total += measurement.length + DELIMITER.length * 2
    total / max
  }.map { |_, line|
    [source, line].join(DELIMITER)
  }
end