mirror of
https://github.com/prometheus/prometheus.git
synced 2025-03-05 20:59:13 -08:00
Factor out appender wrapping
This commit is contained in:
parent
fe7e91e2eb
commit
27d71b08d1
|
@ -332,6 +332,31 @@ func (t *Target) path() string {
|
||||||
return string(t.labels[model.MetricsPathLabel])
|
return string(t.labels[model.MetricsPathLabel])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// wrapAppender wraps a SampleAppender for samples ingested from the target.
|
||||||
|
func (t *Target) wrapAppender(app storage.SampleAppender) storage.SampleAppender {
|
||||||
|
// The relabelAppender has to be inside the label-modifying appenders
|
||||||
|
// so the relabeling rules are applied to the correct label set.
|
||||||
|
if mrc := t.scrapeConfig.MetricRelabelConfigs; len(mrc) > 0 {
|
||||||
|
app = relabelAppender{
|
||||||
|
SampleAppender: app,
|
||||||
|
relabelings: mrc,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if t.scrapeConfig.HonorLabels {
|
||||||
|
app = honorLabelsAppender{
|
||||||
|
SampleAppender: app,
|
||||||
|
labels: t.Labels(),
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
app = ruleLabelsAppender{
|
||||||
|
SampleAppender: app,
|
||||||
|
labels: t.Labels(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return app
|
||||||
|
}
|
||||||
|
|
||||||
// URL returns a copy of the target's URL.
|
// URL returns a copy of the target's URL.
|
||||||
func (t *Target) URL() *url.URL {
|
func (t *Target) URL() *url.URL {
|
||||||
t.RLock()
|
t.RLock()
|
||||||
|
@ -469,26 +494,8 @@ func (t *Target) scrape(appender storage.SampleAppender) error {
|
||||||
}(appender)
|
}(appender)
|
||||||
|
|
||||||
t.RLock()
|
t.RLock()
|
||||||
// The relabelAppender has to be inside the label-modifying appenders
|
|
||||||
// so the relabeling rules are applied to the correct label set.
|
|
||||||
if len(t.scrapeConfig.MetricRelabelConfigs) > 0 {
|
|
||||||
appender = relabelAppender{
|
|
||||||
SampleAppender: appender,
|
|
||||||
relabelings: t.scrapeConfig.MetricRelabelConfigs,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if t.scrapeConfig.HonorLabels {
|
appender = t.wrapAppender(appender)
|
||||||
appender = honorLabelsAppender{
|
|
||||||
SampleAppender: appender,
|
|
||||||
labels: labels,
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
appender = ruleLabelsAppender{
|
|
||||||
SampleAppender: appender,
|
|
||||||
labels: labels,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
httpClient := t.httpClient
|
httpClient := t.httpClient
|
||||||
t.RUnlock()
|
t.RUnlock()
|
||||||
|
|
|
@ -91,6 +91,48 @@ func TestTargetOffset(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTargetWrapAppender(t *testing.T) {
|
||||||
|
cfg := &config.ScrapeConfig{
|
||||||
|
MetricRelabelConfigs: []*config.RelabelConfig{
|
||||||
|
{}, {}, {},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
target := newTestTarget("example.com:80", 10*time.Millisecond, nil)
|
||||||
|
target.scrapeConfig = cfg
|
||||||
|
app := &nopAppender{}
|
||||||
|
|
||||||
|
cfg.HonorLabels = false
|
||||||
|
wrapped := target.wrapAppender(app)
|
||||||
|
|
||||||
|
rl, ok := wrapped.(ruleLabelsAppender)
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("Expected ruleLabelsAppender but got %T", wrapped)
|
||||||
|
}
|
||||||
|
re, ok := rl.SampleAppender.(relabelAppender)
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("Expected relabelAppender but got %T", rl.SampleAppender)
|
||||||
|
}
|
||||||
|
if re.SampleAppender != app {
|
||||||
|
t.Fatalf("Expected base appender but got %T", re.SampleAppender)
|
||||||
|
}
|
||||||
|
|
||||||
|
cfg.HonorLabels = true
|
||||||
|
wrapped = target.wrapAppender(app)
|
||||||
|
|
||||||
|
hl, ok := wrapped.(honorLabelsAppender)
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("Expected honorLabelsAppender but got %T", wrapped)
|
||||||
|
}
|
||||||
|
re, ok = hl.SampleAppender.(relabelAppender)
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("Expected relabelAppender but got %T", hl.SampleAppender)
|
||||||
|
}
|
||||||
|
if re.SampleAppender != app {
|
||||||
|
t.Fatalf("Expected base appender but got %T", re.SampleAppender)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestOverwriteLabels(t *testing.T) {
|
func TestOverwriteLabels(t *testing.T) {
|
||||||
type test struct {
|
type test struct {
|
||||||
metric string
|
metric string
|
||||||
|
|
Loading…
Reference in a new issue