class TsdMetrics::TsdMetric

Attributes

annotations[R]

Implements TsdMetricEvent interface

gauges[R]

Implements TsdMetricEvent interface

Public Class Methods

new(startTime, metricSink, mutexStrategy) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 26
def initialize(startTime, metricSink, mutexStrategy)
  @metricSink = metricSink
  @annotations = {initTimestamp: startTime}
  @mutexStrategy = mutexStrategy
  @gauges = {}
  @metrics = {timers: {}, counters: {}}
  @metricClasses = {timers: Timer, counters: Counter}
  @staticSamples = {timers: {}, counters: {}}
  @closed = false
end

Public Instance Methods

annotate(name, value) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 119
def annotate(name, value)
  @mutexStrategy.synchronize do
    assertNotClosed
    @annotations[name] = value
  end
end
close() click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 126
def close
  @mutexStrategy.synchronize do
    assertNotClosed
    @closed = true
    @annotations[:finalTimestamp] = Time.now()
    @metricSink.record(self)
  end
end
counters() click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 143
def counters
  countersHash = {}
  getMetricsOfType(:counters).each do |k,v|
    countersHash[k] = v.values
  end
  countersHash
end
createCounter(name) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 111
def createCounter(name)
  @mutexStrategy.synchronize do
    assertNotClosed
    ensureMetricExists(:counters, name)
    getMetric(:counters, name).createNewSample
  end
end
createTimer(name) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 79
def createTimer(name)
  @mutexStrategy.synchronize do
    assertNotClosed
    ensureMetricExists(:timers, name)
    sample = getMetric(:timers, name).createNewSample
    sample
  end
end
decrementCounter(name, magnitude=1) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 104
def decrementCounter(name, magnitude=1)
  @mutexStrategy.synchronize do
    assertNotClosed
    incrementCounter(name, -1*magnitude)
  end
end
incrementCounter(name, magnitude=1) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 96
def incrementCounter(name, magnitude=1)
  @mutexStrategy.synchronize do
    assertNotClosed
    ensureStaticCounterSampleExists(name)
    getStaticSample(:counters, name).increment(magnitude)
  end
end
metricIsClosed() click to toggle source

“Implements” metricStatusSupplier

# File lib/tsd_metrics/tsd_metric.rb, line 152
def metricIsClosed
  return @closed
end
open?() click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 37
def open?
  @mutexStrategy.synchronize do
    not @closed
  end
end
resetCounter(name) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 88
def resetCounter(name)
  @mutexStrategy.synchronize do
    assertNotClosed
    ensureCounterExists(name)
    @staticSamples[:counters][name] = getMetric(:counters, name).createNewSample
  end
end
setGauge(name, value, unit = :noUnit) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 43
def setGauge(name, value, unit = :noUnit)
  @mutexStrategy.synchronize do
    assertNotClosed
    assertValidUnit(unit)
    @gauges[name] ||= []
    @gauges[name].push({value: value, unit: unit}.select{|k, v| v != :noUnit})
  end
end
setTimer(name, duration, unit = :noUnit) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 68
def setTimer(name, duration, unit = :noUnit)
  @mutexStrategy.synchronize do
    assertNotClosed
    assertValidUnit(unit)
    pushNewStaticSample(:timers, name)
    sample = getStaticSample(:timers, name)
    sample.stop()
    sample.set(duration, unit)
  end
end
startTimer(name) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 52
def startTimer(name)
  @mutexStrategy.synchronize do
    assertNotClosed
    # Timer sample is started on creation
    pushNewStaticSample(:timers, name)
  end
end
stopTimer(name) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 60
def stopTimer(name)
  @mutexStrategy.synchronize do
    assertNotClosed
    sample = getStaticSample(:timers, name)
    sample.stop
  end
end
timers() click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 135
def timers
  samplesHash = {}
  getMetricsOfType(:timers).each do |timerName,timer|
    samplesHash[timerName] = timer.samples
  end
  samplesHash
end

Private Instance Methods

assertNotClosed() click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 192
def assertNotClosed
  raise MetricClosedError if @closed
end
assertValidUnit(unit) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 196
def assertValidUnit(unit)
  raise MetricClosedError unless UnitsUtils.isValidUnitValue?(unit)
end
ensureCounterExists(name) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 158
def ensureCounterExists(name)
  ensureMetricExists(:counters, name)
end
ensureMetricExists(metricType, name) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 162
def ensureMetricExists(metricType, name)
  @metrics[metricType][name] ||= @metricClasses[metricType].new(self)
end
ensureStaticCounterSampleExists(name) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 171
def ensureStaticCounterSampleExists(name)
  ensureStaticSampleExists(:counters, name)
end
ensureStaticSampleExists(sampleType, name) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 166
def ensureStaticSampleExists(sampleType, name)
  ensureMetricExists(sampleType, name)
  @staticSamples[sampleType][name] ||= getMetric(sampleType, name).createNewSample
end
getMetric(metricType, name) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 180
def getMetric(metricType, name)
  @metrics[metricType][name]
end
getMetricsOfType(metricType) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 184
def getMetricsOfType(metricType)
  @metrics[metricType]
end
getStaticSample(sampleType, name) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 188
def getStaticSample(sampleType, name)
  @staticSamples[sampleType][name]
end
pushNewStaticSample(metricType, name) click to toggle source
# File lib/tsd_metrics/tsd_metric.rb, line 175
def pushNewStaticSample(metricType, name)
  ensureMetricExists(metricType, name)
  @staticSamples[metricType][name] = getMetric(metricType, name).createNewSample
end