Class: Cabin::Metrics
- Inherits:
-
Object
- Object
- Cabin::Metrics
- Includes:
- Publisher, Enumerable
- Defined in:
- lib/cabin/metrics.rb,
lib/cabin/namespace.rb
Overview
What type of metrics do we want?
What metrics should come by default? Per-call/transaction/request metrics like:
- hit (count++ type metrics)
- latencies/timings
Per app or generally long-lifetime metrics like:
- "uptime"
- cpu usage
- memory usage
- count of active/in-flight actions/requests/calls/transactions
- peer metrics (number of cluster members, etc)
github.com/codahale/metrics/tree/master/metrics-core/src/main/java/com/yammer/metrics/core Reading what Coda Hale’s “Metrics” stuff has, here’s my summary:
gauges (callback to return a number)
counters (.inc and .dec methods)
meters (.mark to track each 'hit')
Also exposes 1, 5, 15 minute moving averages
histograms: (.update(value) to record a new value)
like meter, but takes values more than simply '1'
as a result, exposes percentiles, median, etc.
timers
a time-observing interface on top of histogram.
With the exception of gauges, all the other metrics are all active/pushed. Gauges take callbacks, so their values are pulled, not pushed. The active metrics can be represented as events since they the update occurs at the time of the change.
These active/push metrics can therefore be considered events.
All metrics (active/passive) can be queried for ‘current state’, too, making this suitable for serving to interested parties like monitoring and management tools.
Defined Under Namespace
Classes: Counter, Gauge, Histogram, Meter, Timer
Instance Method Summary collapse
- #counter(instance, name = nil) ⇒ Object
-
#each(&block) ⇒ Object
iterate over each metric.
- #histogram(instance, name = nil) ⇒ Object
-
#initialize ⇒ Metrics
constructor
A new instance of Metrics.
- #meter(instance, name = nil) ⇒ Object
- #timer(instance, name = nil) ⇒ Object
Methods included from Publisher
Constructor Details
#initialize ⇒ Metrics
Returns a new instance of Metrics.
53 54 55 |
# File 'lib/cabin/metrics.rb', line 53 def initialize @metrics = {} end |
Instance Method Details
#counter(instance, name = nil) ⇒ Object
86 87 88 |
# File 'lib/cabin/metrics.rb', line 86 def counter(instance, name=nil) return create(instance, name, Cabin::Metrics::Counter.new) end |
#each(&block) ⇒ Object
iterate over each metric. yields identifer, metric
115 116 117 118 |
# File 'lib/cabin/metrics.rb', line 115 def each(&block) # delegate to the @metrics hash until we need something fancier @metrics.each(&block) end |
#histogram(instance, name = nil) ⇒ Object
102 103 104 |
# File 'lib/cabin/metrics.rb', line 102 def histogram(instance, name=nil) return create(instance, name, Cabin::Metrics::Histogram.new) end |