Skip to content

Commit 050d342

Browse files
committed
Revert back to validateLabelsConfig returning a map
1 parent c206d9e commit 050d342

2 files changed

Lines changed: 34 additions & 29 deletions

File tree

internal/component/loki/process/stages/labels.go

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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
6669
func 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
7882
type 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

101106
func (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

124129
func (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

internal/component/loki/process/stages/labels_test.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ func TestLabels(t *testing.T) {
118118
tests := map[string]struct {
119119
config LabelsConfig
120120
err error
121-
expectedCfgs map[string]*string
121+
expectedCfgs map[string]string
122122
}{
123123
"missing config": {
124124
config: emptyLabelsConfig,
@@ -149,10 +149,10 @@ func TestLabels(t *testing.T) {
149149
"l3": &lv3,
150150
}},
151151
err: nil,
152-
expectedCfgs: map[string]*string{
153-
"l1": &lv1,
154-
"l2": ptr("l2"),
155-
"l3": ptr("l3"),
152+
expectedCfgs: map[string]string{
153+
"l1": lv1,
154+
"l2": "l2",
155+
"l3": "l3",
156156
},
157157
},
158158
"label value is set from name for structured_metadata": {
@@ -164,18 +164,18 @@ func TestLabels(t *testing.T) {
164164
"l3": &lv3,
165165
}},
166166
err: nil,
167-
expectedCfgs: map[string]*string{
168-
"l1": &lv1,
169-
"l2": ptr("l2"),
170-
"l3": ptr("l3"),
167+
expectedCfgs: map[string]string{
168+
"l1": lv1,
169+
"l2": "l2",
170+
"l3": "l3",
171171
},
172172
},
173173
}
174174
for name, test := range tests {
175175
test := test
176176
t.Run(name, func(t *testing.T) {
177177
t.Parallel()
178-
err := validateLabelsConfig(&test.config)
178+
actual, err := validateLabelsConfig(&test.config)
179179
if (err != nil) != (test.err != nil) {
180180
t.Errorf("validateLabelsConfig() expected error = %v, actual error = %v", test.err, err)
181181
return
@@ -185,7 +185,7 @@ func TestLabels(t *testing.T) {
185185
return
186186
}
187187
if test.expectedCfgs != nil {
188-
assert.Equal(t, test.expectedCfgs, test.config.Values)
188+
assert.Equal(t, test.expectedCfgs, actual)
189189
}
190190
})
191191
}

0 commit comments

Comments
 (0)