|  | package metrics2 | 
|  |  | 
|  | /* | 
|  | Metrics2 Package | 
|  | ================ | 
|  |  | 
|  | Concepts | 
|  | -------- | 
|  |  | 
|  | The major difference between the old metrics format and the new is that, from | 
|  | the app’s point of view, the old metrics were specified using a single metric | 
|  | name.  In the new format, metrics are specified using a measurement name and a | 
|  | map[string]string of tags.  Expect all instances of metrics types to require | 
|  | both a measurement name and tags map instead of just the metric name.  When | 
|  | using common.InitWithMetrics2, runtime stats including uptime are automatically | 
|  | recorded, and the “host” and “app” tags are automatically set for all | 
|  | measurements.  In many cases, it may be unnecessary to provide more tags, so | 
|  | you can just pass nil. | 
|  |  | 
|  | Metrics Helpers | 
|  | --------------- | 
|  | The metrics2 package provides a number of helper structs and functions which | 
|  | should be your primary mode of interacting with metrics. | 
|  |  | 
|  | ### Typed Metrics | 
|  |  | 
|  | Metrics2 provides a few typed metrics helpers which behave similarly to | 
|  | go_metrics.GetOrRegisterGauge: once registered, the metric contains a single | 
|  | value which is reported at regular intervals.  The value can be changed by | 
|  | calling Update() on the Metric. The metrics are stored in a sort of registry | 
|  | so that you don’t need to keep the object around and can just do: | 
|  | metrics2.GetInt64Metric(metric, tags).Update(value). | 
|  |  | 
|  | ### Counter | 
|  |  | 
|  | Counter in the metrics2 package behaves similarly to those from go-metrics | 
|  | except that there is no GetOrRegisterCounter equivalent.  Instead, you should | 
|  | call metrics2.GetCounter(name, tags), hold on to the returned struct instance | 
|  | and call Inc(), Dec(), etc, on it as desired. Note that Counter requires a | 
|  | name and not a measurement, because the measurement is always “counter”, and | 
|  | the provided name is inserted as a tag. | 
|  |  | 
|  | ### Liveness | 
|  |  | 
|  | Liveness in metrics2 behaves similarly to the old metrics liveness, except that | 
|  | you provide a name and tags.  Call metrics2.NewLiveness() to start the liveness | 
|  | timer, and call Reset() on the instance to reset it to zero.  Note that | 
|  | Liveness requires a name and not a measurement, because the measurement is | 
|  | always “liveness”, and the provided name is inserted as a tag. | 
|  |  | 
|  | ### Timer | 
|  |  | 
|  | Timer in metrics2 behaves similarly to the old metrics timer, except that you | 
|  | provide a name and tags instead of a metric.  Call metrics2.NewTimer(name, | 
|  | tags) to start the timer and call Stop() on the instance to measure the | 
|  | duration and report the duration. Timer does not behave like a Gauge, in that | 
|  | it does not push values at regular intervals.  Instead, it only pushes a value | 
|  | when Stop() is called.  Be aware of this when creating alerts based on timers, | 
|  | since data points will not be evenly spaced and may not exist for a time | 
|  | period.  Timer requires a name and not a measurement, because the measurement | 
|  | is always “timer” and the provided name is inserted as a tag. | 
|  |  | 
|  | ### FuncTimer | 
|  |  | 
|  | FuncTimer is a special Timer designed specifically for timing the duration of | 
|  | functions.  It does not accept any parameters because it automatically fills in | 
|  | the function name and package name in the tags.  Just do defer | 
|  | metrics2.FuncTimer().Stop() at the beginning of the function. | 
|  |  | 
|  | */ |