diff --git a/meter/meter.go b/meter/meter.go index c01f98ef..211c6a81 100644 --- a/meter/meter.go +++ b/meter/meter.go @@ -49,9 +49,11 @@ type Meter interface { Set(opts ...Option) Meter // Histogram get or create histogram Histogram(name string, labels ...string) Histogram + // HistogramExt get or create histogram with specified quantiles + HistogramExt(name string, quantiles []float64, labels ...string) Histogram // Summary get or create summary Summary(name string, labels ...string) Summary - // SummaryExt get or create summary with spcified quantiles and window time + // SummaryExt get or create summary with specified quantiles and window time SummaryExt(name string, window time.Duration, quantiles []float64, labels ...string) Summary // Write writes metrics to io.Writer Write(w io.Writer, opts ...Option) error diff --git a/meter/noop.go b/meter/noop.go index 8f397310..57340044 100644 --- a/meter/noop.go +++ b/meter/noop.go @@ -70,6 +70,11 @@ func (r *noopMeter) Histogram(_ string, labels ...string) Histogram { return &noopHistogram{labels: labels} } +// HistogramExt implements the Meter interface +func (r *noopMeter) HistogramExt(_ string, quantiles []float64, labels ...string) Histogram { + return &noopHistogram{labels: labels} +} + // Set implements the Meter interface func (r *noopMeter) Set(opts ...Option) Meter { m := &noopMeter{opts: r.opts} diff --git a/meter/options.go b/meter/options.go index 236bebd3..4a648e27 100644 --- a/meter/options.go +++ b/meter/options.go @@ -4,6 +4,8 @@ import ( "context" ) +var DefaultQuantiles = []float64{.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10} + // Option powers the configuration for metrics implementations: type Option func(*Options) @@ -23,6 +25,8 @@ type Options struct { WriteProcessMetrics bool // WriteFDMetrics flag to write fd metrics WriteFDMetrics bool + // Quantiles specifies buckets for histogram + Quantiles []float64 } // NewOptions prepares a set of options: @@ -61,14 +65,12 @@ func Address(value string) Option { } } -/* -// TimingObjectives defines the desired spread of statistics for histogram / timing metrics: -func TimingObjectives(value map[float64]float64) Option { +// Quantiles defines the desired spread of statistics for histogram metrics: +func Quantiles(quantiles []float64) Option { return func(o *Options) { - o.TimingObjectives = value + o.Quantiles = quantiles } } -*/ // Labels add the meter labels func Labels(ls ...string) Option {