@@ -155,23 +155,24 @@ func (m *metricProcessor) splitMetric(metric string) (string, common.Time, float
155155func (t * template ) Apply (parts []string ) (string , mapstr.M ) {
156156 tags := make (mapstr.M )
157157
158- metric := make ([]string , 0 )
159158 for tagKey , tagVal := range t .Tags {
160159 tags [tagKey ] = tagVal
161160 }
162161
162+ var metric []string
163163 tagsMap := make (map [string ][]string )
164- for i := 0 ; i < len (t .Parts ); i ++ {
165- // Avoid out-of-bounds access when metric has fewer parts than template.
166- if i >= len (parts ) {
167- break
168- }
169- if t .Parts [i ] == "metric" {
164+
165+ // Match template parts to corresponding metric parts.
166+ for i , templatePart := range t .Parts [:min (len (t .Parts ), len (parts ))] {
167+ switch templatePart {
168+ case "metric" :
170169 metric = append (metric , parts [i ])
171- } else if t . Parts [ i ] == "metric*" {
170+ case "metric*" :
172171 metric = append (metric , parts [i :]... )
173- } else if t .Parts [i ] != "" {
174- tagsMap [t.Parts [i ]] = append (tagsMap [t.Parts [i ]], parts [i ])
172+ case "" :
173+ // skip empty parts
174+ default :
175+ tagsMap [templatePart ] = append (tagsMap [templatePart ], parts [i ])
175176 }
176177 }
177178
@@ -181,7 +182,6 @@ func (t *template) Apply(parts []string) (string, mapstr.M) {
181182
182183 if len (metric ) == 0 {
183184 return "" , tags
184- } else {
185- return strings .Join (metric , t .Delimiter ), tags
186185 }
186+ return strings .Join (metric , t .Delimiter ), tags
187187}
0 commit comments