forked from mirror/client_golang
Turned "le" and "quantile" label names into constants.
This commit is contained in:
parent
3e50eddd64
commit
b1e7299877
|
@ -164,7 +164,7 @@ func extractSummary(out Ingester, o *ProcessOptions, f *dto.MetricFamily) error
|
||||||
metric[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue())
|
metric[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue())
|
||||||
}
|
}
|
||||||
// BUG(matt): Update other names to "quantile".
|
// BUG(matt): Update other names to "quantile".
|
||||||
metric[model.LabelName("quantile")] = model.LabelValue(fmt.Sprint(q.GetQuantile()))
|
metric[model.LabelName(model.QuantileLabel)] = model.LabelValue(fmt.Sprint(q.GetQuantile()))
|
||||||
metric[model.MetricNameLabel] = model.LabelValue(f.GetName())
|
metric[model.MetricNameLabel] = model.LabelValue(f.GetName())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,7 +259,7 @@ func extractHistogram(out Ingester, o *ProcessOptions, f *dto.MetricFamily) erro
|
||||||
for _, p := range m.Label {
|
for _, p := range m.Label {
|
||||||
metric[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue())
|
metric[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue())
|
||||||
}
|
}
|
||||||
metric[model.LabelName("le")] = model.LabelValue(fmt.Sprint(q.GetUpperBound()))
|
metric[model.LabelName(model.BucketLabel)] = model.LabelValue(fmt.Sprint(q.GetUpperBound()))
|
||||||
metric[model.MetricNameLabel] = model.LabelValue(f.GetName() + "_bucket")
|
metric[model.MetricNameLabel] = model.LabelValue(f.GetName() + "_bucket")
|
||||||
|
|
||||||
if math.IsInf(q.GetUpperBound(), +1) {
|
if math.IsInf(q.GetUpperBound(), +1) {
|
||||||
|
@ -308,7 +308,7 @@ func extractHistogram(out Ingester, o *ProcessOptions, f *dto.MetricFamily) erro
|
||||||
for _, p := range m.Label {
|
for _, p := range m.Label {
|
||||||
metric[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue())
|
metric[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue())
|
||||||
}
|
}
|
||||||
metric[model.LabelName("le")] = model.LabelValue("+Inf")
|
metric[model.LabelName(model.BucketLabel)] = model.LabelValue("+Inf")
|
||||||
metric[model.MetricNameLabel] = model.LabelValue(f.GetName() + "_bucket")
|
metric[model.MetricNameLabel] = model.LabelValue(f.GetName() + "_bucket")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,14 @@ const (
|
||||||
// JobLabel is the label name indicating the job from which a timeseries
|
// JobLabel is the label name indicating the job from which a timeseries
|
||||||
// was scraped.
|
// was scraped.
|
||||||
JobLabel LabelName = "job"
|
JobLabel LabelName = "job"
|
||||||
|
|
||||||
|
// BucketLabel is used for the label that defines the upper bound of a
|
||||||
|
// bucket of a histogram ("le" -> "less or equal").
|
||||||
|
BucketLabel = "le"
|
||||||
|
|
||||||
|
// QuantileLabel is used for the label that defines the quantile in a
|
||||||
|
// summary.
|
||||||
|
QuantileLabel = "quantile"
|
||||||
)
|
)
|
||||||
|
|
||||||
// A LabelName is a key for a LabelSet or Metric. It has a value associated
|
// A LabelName is a key for a LabelSet or Metric. It has a value associated
|
||||||
|
|
|
@ -21,6 +21,7 @@ import (
|
||||||
|
|
||||||
"github.com/golang/protobuf/proto"
|
"github.com/golang/protobuf/proto"
|
||||||
|
|
||||||
|
"github.com/prometheus/client_golang/model"
|
||||||
dto "github.com/prometheus/client_model/go"
|
dto "github.com/prometheus/client_model/go"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -33,7 +34,7 @@ import (
|
||||||
//
|
//
|
||||||
// Note that Histograms, in contrast to Summaries, can be aggregated with the
|
// Note that Histograms, in contrast to Summaries, can be aggregated with the
|
||||||
// Prometheus query language (see the documentation for detailed
|
// Prometheus query language (see the documentation for detailed
|
||||||
// procedures). However, Histograms requires the user to pre-define suitable
|
// procedures). However, Histograms require the user to pre-define suitable
|
||||||
// buckets, and they are in general less accurate. The Observe method of a
|
// buckets, and they are in general less accurate. The Observe method of a
|
||||||
// Histogram has a very low performance overhead in comparison with the Observe
|
// Histogram has a very low performance overhead in comparison with the Observe
|
||||||
// method of a Summary.
|
// method of a Summary.
|
||||||
|
@ -47,12 +48,16 @@ type Histogram interface {
|
||||||
Observe(float64)
|
Observe(float64)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DefBuckets are the default Histogram buckets. The default buckets are
|
|
||||||
// tailored to broadly measure response time in seconds for a typical online
|
|
||||||
// serving system. Most likely, however, you will be required to define buckets
|
|
||||||
// customized to your use case.
|
|
||||||
var (
|
var (
|
||||||
|
// DefBuckets are the default Histogram buckets. The default buckets are
|
||||||
|
// tailored to broadly measure response time in seconds for a typical online
|
||||||
|
// serving system. Most likely, however, you will be required to define buckets
|
||||||
|
// customized to your use case.
|
||||||
DefBuckets = []float64{.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10}
|
DefBuckets = []float64{.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10}
|
||||||
|
|
||||||
|
errBucketLabelNotAllowed = fmt.Errorf(
|
||||||
|
"%q is not allowed as label name in histograms", model.BucketLabel,
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
// LinearBuckets creates 'count' buckets, each 'width' wide, where the lowest
|
// LinearBuckets creates 'count' buckets, each 'width' wide, where the lowest
|
||||||
|
@ -165,13 +170,13 @@ func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogr
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, n := range desc.variableLabels {
|
for _, n := range desc.variableLabels {
|
||||||
if n == "le" {
|
if n == model.BucketLabel {
|
||||||
panic("'le' is not allowed as label name in histograms")
|
panic(errBucketLabelNotAllowed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, lp := range desc.constLabelPairs {
|
for _, lp := range desc.constLabelPairs {
|
||||||
if lp.GetName() == "le" {
|
if lp.GetName() == model.BucketLabel {
|
||||||
panic("'le' is not allowed as label name in histograms")
|
panic(errBucketLabelNotAllowed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@ import (
|
||||||
dto "github.com/prometheus/client_model/go"
|
dto "github.com/prometheus/client_model/go"
|
||||||
|
|
||||||
"github.com/prometheus/client_golang/_vendor/perks/quantile"
|
"github.com/prometheus/client_golang/_vendor/perks/quantile"
|
||||||
|
"github.com/prometheus/client_golang/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
// A Summary captures individual observations from an event or sample stream and
|
// A Summary captures individual observations from an event or sample stream and
|
||||||
|
@ -50,9 +51,13 @@ type Summary interface {
|
||||||
Observe(float64)
|
Observe(float64)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DefObjectives are the default Summary quantile values.
|
|
||||||
var (
|
var (
|
||||||
|
// DefObjectives are the default Summary quantile values.
|
||||||
DefObjectives = map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001}
|
DefObjectives = map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001}
|
||||||
|
|
||||||
|
errQuantileLabelNotAllowed = fmt.Errorf(
|
||||||
|
"%q is not allowed as label name in summaries", model.QuantileLabel,
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
// Default values for SummaryOpts.
|
// Default values for SummaryOpts.
|
||||||
|
@ -164,13 +169,13 @@ func newSummary(desc *Desc, opts SummaryOpts, labelValues ...string) Summary {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, n := range desc.variableLabels {
|
for _, n := range desc.variableLabels {
|
||||||
if n == "quantile" {
|
if n == model.QuantileLabel {
|
||||||
panic("'quantile' is not allowed as label name in summaries")
|
panic(errQuantileLabelNotAllowed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, lp := range desc.constLabelPairs {
|
for _, lp := range desc.constLabelPairs {
|
||||||
if lp.GetName() == "quantile" {
|
if lp.GetName() == model.QuantileLabel {
|
||||||
panic("'quantile' is not allowed as label name in summaries")
|
panic(errQuantileLabelNotAllowed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@ import (
|
||||||
"math"
|
"math"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/prometheus/client_golang/model"
|
||||||
dto "github.com/prometheus/client_model/go"
|
dto "github.com/prometheus/client_model/go"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -117,7 +118,7 @@ func MetricFamilyToText(out io.Writer, in *dto.MetricFamily) (int, error) {
|
||||||
for _, q := range metric.Summary.Quantile {
|
for _, q := range metric.Summary.Quantile {
|
||||||
n, err = writeSample(
|
n, err = writeSample(
|
||||||
name, metric,
|
name, metric,
|
||||||
"quantile", fmt.Sprint(q.GetQuantile()),
|
model.QuantileLabel, fmt.Sprint(q.GetQuantile()),
|
||||||
q.GetValue(),
|
q.GetValue(),
|
||||||
out,
|
out,
|
||||||
)
|
)
|
||||||
|
@ -150,7 +151,7 @@ func MetricFamilyToText(out io.Writer, in *dto.MetricFamily) (int, error) {
|
||||||
for _, q := range metric.Histogram.Bucket {
|
for _, q := range metric.Histogram.Bucket {
|
||||||
n, err = writeSample(
|
n, err = writeSample(
|
||||||
name+"_bucket", metric,
|
name+"_bucket", metric,
|
||||||
"le", fmt.Sprint(q.GetUpperBound()),
|
model.BucketLabel, fmt.Sprint(q.GetUpperBound()),
|
||||||
float64(q.GetCumulativeCount()),
|
float64(q.GetCumulativeCount()),
|
||||||
out,
|
out,
|
||||||
)
|
)
|
||||||
|
@ -165,7 +166,7 @@ func MetricFamilyToText(out io.Writer, in *dto.MetricFamily) (int, error) {
|
||||||
if !infSeen {
|
if !infSeen {
|
||||||
n, err = writeSample(
|
n, err = writeSample(
|
||||||
name+"_bucket", metric,
|
name+"_bucket", metric,
|
||||||
"le", "+Inf",
|
model.BucketLabel, "+Inf",
|
||||||
float64(metric.Histogram.GetSampleCount()),
|
float64(metric.Histogram.GetSampleCount()),
|
||||||
out,
|
out,
|
||||||
)
|
)
|
||||||
|
|
|
@ -274,8 +274,8 @@ func (p *Parser) startLabelName() stateFn {
|
||||||
}
|
}
|
||||||
// Special summary/histogram treatment. Don't add 'quantile' and 'le'
|
// Special summary/histogram treatment. Don't add 'quantile' and 'le'
|
||||||
// labels to 'real' labels.
|
// labels to 'real' labels.
|
||||||
if !(p.currentMF.GetType() == dto.MetricType_SUMMARY && p.currentLabelPair.GetName() == "quantile") &&
|
if !(p.currentMF.GetType() == dto.MetricType_SUMMARY && p.currentLabelPair.GetName() == model.QuantileLabel) &&
|
||||||
!(p.currentMF.GetType() == dto.MetricType_HISTOGRAM && p.currentLabelPair.GetName() == "le") {
|
!(p.currentMF.GetType() == dto.MetricType_HISTOGRAM && p.currentLabelPair.GetName() == model.BucketLabel) {
|
||||||
p.currentMetric.Label = append(p.currentMetric.Label, p.currentLabelPair)
|
p.currentMetric.Label = append(p.currentMetric.Label, p.currentLabelPair)
|
||||||
}
|
}
|
||||||
if p.skipBlankTabIfCurrentBlankTab(); p.err != nil {
|
if p.skipBlankTabIfCurrentBlankTab(); p.err != nil {
|
||||||
|
@ -306,7 +306,7 @@ func (p *Parser) startLabelValue() stateFn {
|
||||||
// - Quantile labels are special, will result in dto.Quantile later.
|
// - Quantile labels are special, will result in dto.Quantile later.
|
||||||
// - Other labels have to be added to currentLabels for signature calculation.
|
// - Other labels have to be added to currentLabels for signature calculation.
|
||||||
if p.currentMF.GetType() == dto.MetricType_SUMMARY {
|
if p.currentMF.GetType() == dto.MetricType_SUMMARY {
|
||||||
if p.currentLabelPair.GetName() == "quantile" {
|
if p.currentLabelPair.GetName() == model.QuantileLabel {
|
||||||
if p.currentQuantile, p.err = strconv.ParseFloat(p.currentLabelPair.GetValue(), 64); p.err != nil {
|
if p.currentQuantile, p.err = strconv.ParseFloat(p.currentLabelPair.GetValue(), 64); p.err != nil {
|
||||||
// Create a more helpful error message.
|
// Create a more helpful error message.
|
||||||
p.parseError(fmt.Sprintf("expected float as value for 'quantile' label, got %q", p.currentLabelPair.GetValue()))
|
p.parseError(fmt.Sprintf("expected float as value for 'quantile' label, got %q", p.currentLabelPair.GetValue()))
|
||||||
|
@ -318,7 +318,7 @@ func (p *Parser) startLabelValue() stateFn {
|
||||||
}
|
}
|
||||||
// Similar special treatment of histograms.
|
// Similar special treatment of histograms.
|
||||||
if p.currentMF.GetType() == dto.MetricType_HISTOGRAM {
|
if p.currentMF.GetType() == dto.MetricType_HISTOGRAM {
|
||||||
if p.currentLabelPair.GetName() == "le" {
|
if p.currentLabelPair.GetName() == model.BucketLabel {
|
||||||
if p.currentBucket, p.err = strconv.ParseFloat(p.currentLabelPair.GetValue(), 64); p.err != nil {
|
if p.currentBucket, p.err = strconv.ParseFloat(p.currentLabelPair.GetValue(), 64); p.err != nil {
|
||||||
// Create a more helpful error message.
|
// Create a more helpful error message.
|
||||||
p.parseError(fmt.Sprintf("expected float as value for 'le' label, got %q", p.currentLabelPair.GetValue()))
|
p.parseError(fmt.Sprintf("expected float as value for 'le' label, got %q", p.currentLabelPair.GetValue()))
|
||||||
|
|
Loading…
Reference in New Issue