@@ -194,14 +194,22 @@ func createHPASpecTargetMetric() generator.FamilyGenerator {
194
194
var metricTarget autoscaling.MetricTarget
195
195
// The variable maps the type of metric to the corresponding value
196
196
metricMap := make (map [metricTargetType ]float64 )
197
+ // Object|Pods|External metrics can use the same name for mutltiple metrics. Add SelectorLabels to the metric labels
198
+ selectorLabels := make (map [string ]string )
197
199
198
200
switch m .Type {
199
201
case autoscaling .ObjectMetricSourceType :
200
202
metricName = m .Object .Metric .Name
201
203
metricTarget = m .Object .Target
204
+ if m .Object .Metric .Selector != nil {
205
+ selectorLabels = m .Object .Metric .Selector .MatchLabels
206
+ }
202
207
case autoscaling .PodsMetricSourceType :
203
208
metricName = m .Pods .Metric .Name
204
209
metricTarget = m .Pods .Target
210
+ if m .Pods .Metric .Selector != nil {
211
+ selectorLabels = m .Pods .Metric .Selector .MatchLabels
212
+ }
205
213
case autoscaling .ResourceMetricSourceType :
206
214
metricName = string (m .Resource .Name )
207
215
metricTarget = m .Resource .Target
@@ -211,6 +219,9 @@ func createHPASpecTargetMetric() generator.FamilyGenerator {
211
219
case autoscaling .ExternalMetricSourceType :
212
220
metricName = m .External .Metric .Name
213
221
metricTarget = m .External .Target
222
+ if m .External .Metric .Selector != nil {
223
+ selectorLabels = m .External .Metric .Selector .MatchLabels
224
+ }
214
225
default :
215
226
// Skip unsupported metric type
216
227
continue
@@ -227,9 +238,15 @@ func createHPASpecTargetMetric() generator.FamilyGenerator {
227
238
}
228
239
229
240
for metricTypeIndex , metricValue := range metricMap {
241
+ labelKeys := targetMetricLabels
242
+ labelValues := []string {metricName , metricTypeIndex .String ()}
243
+ for k , v := range selectorLabels {
244
+ labelKeys = append (labelKeys , "selectorlabel." + k )
245
+ labelValues = append (labelValues , v )
246
+ }
230
247
ms = append (ms , & metric.Metric {
231
- LabelKeys : targetMetricLabels ,
232
- LabelValues : [] string { metricName , metricTypeIndex . String ()} ,
248
+ LabelKeys : labelKeys ,
249
+ LabelValues : labelValues ,
233
250
Value : metricValue ,
234
251
})
235
252
}
@@ -253,14 +270,22 @@ func createHPAStatusTargetMetric() generator.FamilyGenerator {
253
270
var currentMetric autoscaling.MetricValueStatus
254
271
// The variable maps the type of metric to the corresponding value
255
272
metricMap := make (map [metricTargetType ]float64 )
273
+ // Object|Pods|External metrics can use the same name for mutltiple metrics. Add SelectorLabels to the metric labels
274
+ selectorLabels := make (map [string ]string )
256
275
257
276
switch m .Type {
258
277
case autoscaling .ObjectMetricSourceType :
259
278
metricName = m .Object .Metric .Name
260
279
currentMetric = m .Object .Current
280
+ if m .Object .Metric .Selector != nil {
281
+ selectorLabels = m .Object .Metric .Selector .MatchLabels
282
+ }
261
283
case autoscaling .PodsMetricSourceType :
262
284
metricName = m .Pods .Metric .Name
263
285
currentMetric = m .Pods .Current
286
+ if m .Pods .Metric .Selector != nil {
287
+ selectorLabels = m .Pods .Metric .Selector .MatchLabels
288
+ }
264
289
case autoscaling .ResourceMetricSourceType :
265
290
metricName = string (m .Resource .Name )
266
291
currentMetric = m .Resource .Current
@@ -270,6 +295,9 @@ func createHPAStatusTargetMetric() generator.FamilyGenerator {
270
295
case autoscaling .ExternalMetricSourceType :
271
296
metricName = m .External .Metric .Name
272
297
currentMetric = m .External .Current
298
+ if m .External .Metric .Selector != nil {
299
+ selectorLabels = m .External .Metric .Selector .MatchLabels
300
+ }
273
301
default :
274
302
// Skip unsupported metric type
275
303
continue
@@ -286,9 +314,15 @@ func createHPAStatusTargetMetric() generator.FamilyGenerator {
286
314
}
287
315
288
316
for metricTypeIndex , metricValue := range metricMap {
317
+ labelKeys := targetMetricLabels
318
+ labelValues := []string {metricName , metricTypeIndex .String ()}
319
+ for k , v := range selectorLabels {
320
+ labelKeys = append (labelKeys , "selectorlabel." + k )
321
+ labelValues = append (labelValues , v )
322
+ }
289
323
ms = append (ms , & metric.Metric {
290
- LabelKeys : targetMetricLabels ,
291
- LabelValues : [] string { metricName , metricTypeIndex . String ()} ,
324
+ LabelKeys : labelKeys ,
325
+ LabelValues : labelValues ,
292
326
Value : metricValue ,
293
327
})
294
328
}
0 commit comments