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