@ -335,6 +335,7 @@ func (t *Target) path() string {
}
// wrapAppender wraps a SampleAppender for samples ingested from the target.
// RLock must be acquired by the caller.
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.
@ -348,12 +349,12 @@ func (t *Target) wrapAppender(app storage.SampleAppender) storage.SampleAppender
if t . scrapeConfig . HonorLabels {
app = honorLabelsAppender {
SampleAppender : app ,
labels : t . Labels( ) ,
labels : t . unlocked Labels( ) ,
}
} else {
app = ruleLabelsAppender {
SampleAppender : app ,
labels : t . Labels( ) ,
labels : t . unlocked Labels( ) ,
}
}
return app
@ -361,6 +362,7 @@ func (t *Target) wrapAppender(app storage.SampleAppender) storage.SampleAppender
// wrapReportingAppender wraps an appender for target status report samples.
// It ignores any relabeling rules set for the target.
// RLock must not be acquired by the caller.
func ( t * Target ) wrapReportingAppender ( app storage . SampleAppender ) storage . SampleAppender {
return ruleLabelsAppender {
SampleAppender : app ,
@ -647,6 +649,12 @@ func (t *Target) Labels() model.LabelSet {
t . RLock ( )
defer t . RUnlock ( )
return t . unlockedLabels ( )
}
// unlockedLabels does the same as Labels but does not lock the mutex (useful
// for internal usage when the mutex is already locked).
func ( t * Target ) unlockedLabels ( ) model . LabelSet {
lset := make ( model . LabelSet , len ( t . labels ) )
for ln , lv := range t . labels {
if ! strings . HasPrefix ( string ( ln ) , model . ReservedLabelPrefix ) {