@@ -28,9 +28,9 @@ type LabelsConfig struct {
2828}
2929
3030// validateLabelsConfig validates the Label stage configuration
31- func validateLabelsConfig (cfg * LabelsConfig ) error {
31+ func validateLabelsConfig (cfg * LabelsConfig ) ( map [ string ] string , error ) {
3232 if cfg .Values == nil {
33- return errors .New (ErrEmptyLabelStageConfig )
33+ return nil , errors .New (ErrEmptyLabelStageConfig )
3434 }
3535
3636 if cfg .SourceType == "" {
@@ -40,44 +40,49 @@ func validateLabelsConfig(cfg *LabelsConfig) error {
4040 switch cfg .SourceType {
4141 case SourceTypeExtractedMap , SourceTypeStructuredMetadata :
4242 default :
43- return fmt .Errorf (ErrInvalidSourceType , cfg .SourceType )
43+ return nil , fmt .Errorf (ErrInvalidSourceType , cfg .SourceType )
4444 }
4545
4646 // We must not mutate the c.Values, create a copy with changes we need.
47- returnValues := map [string ]* string {}
47+ ret := map [string ]string {}
48+ if cfg .Values == nil {
49+ return nil , errors .New (ErrEmptyLabelStageConfig )
50+ }
4851 for labelName , labelSrc := range cfg .Values {
4952 // TODO: add support for different validation schemes.
5053 //nolint:staticcheck
5154 if ! model .LabelName (labelName ).IsValid () {
52- return fmt .Errorf (ErrInvalidLabelName , labelName )
55+ return nil , fmt .Errorf (ErrInvalidLabelName , labelName )
5356 }
5457 // If no label source was specified, use the key name
5558 if labelSrc == nil || * labelSrc == "" {
56- returnValues [labelName ] = & labelName
59+ ret [labelName ] = labelName
5760 } else {
58- returnValues [labelName ] = labelSrc
61+ ret [labelName ] = * labelSrc
5962 }
6063 }
61- cfg . Values = returnValues
62- return nil
64+
65+ return ret , nil
6366}
6467
6568// newLabelStage creates a new label stage to set labels from extracted data
6669func newLabelStage (logger log.Logger , configs LabelsConfig ) (Stage , error ) {
67- err := validateLabelsConfig (& configs )
70+ labelsConfig , err := validateLabelsConfig (& configs )
6871 if err != nil {
6972 return nil , err
7073 }
7174 return & labelStage {
72- cfg : & configs ,
73- logger : logger ,
75+ cfg : & configs ,
76+ labelsConfig : labelsConfig ,
77+ logger : logger ,
7478 }, nil
7579}
7680
7781// labelStage sets labels from extracted data
7882type labelStage struct {
79- cfg * LabelsConfig
80- logger log.Logger
83+ cfg * LabelsConfig
84+ labelsConfig map [string ]string
85+ logger log.Logger
8186}
8287
8388// Run implements Stage
@@ -99,8 +104,8 @@ func (l *labelStage) Run(in chan Entry) chan Entry {
99104}
100105
101106func (l * labelStage ) addLabelFromExtractedMap (labels model.LabelSet , extracted map [string ]any ) {
102- for lName , lSrc := range l .cfg . Values {
103- if lValue , ok := extracted [* lSrc ]; ok {
107+ for lName , lSrc := range l .labelsConfig {
108+ if lValue , ok := extracted [lSrc ]; ok {
104109 s , err := getString (lValue )
105110 if err != nil {
106111 if Debug {
@@ -122,9 +127,9 @@ func (l *labelStage) addLabelFromExtractedMap(labels model.LabelSet, extracted m
122127}
123128
124129func (l * labelStage ) addLabelsFromStructuredMetadata (labels model.LabelSet , metadata push.LabelsAdapter ) {
125- for lName , lSrc := range l .cfg . Values {
130+ for lName , lSrc := range l .labelsConfig {
126131 for _ , kv := range metadata {
127- if kv .Name != * lSrc {
132+ if kv .Name != lSrc {
128133 continue
129134 }
130135
0 commit comments