@@ -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,10 @@ func createHPASpecTargetMetric() generator.FamilyGenerator {
227
238
}
228
239
229
240
for metricTypeIndex , metricValue := range metricMap {
241
+ selectorLabelKeys , selectorLabelValues := kubeMapToPrometheusLabels ("selectorlabel" , selectorLabels )
230
242
ms = append (ms , & metric.Metric {
231
- LabelKeys : targetMetricLabels ,
232
- LabelValues : []string {metricName , metricTypeIndex .String ()},
243
+ LabelKeys : append ( targetMetricLabels , selectorLabelKeys ... ) ,
244
+ LabelValues : append ( []string {metricName , metricTypeIndex .String ()}, selectorLabelValues ... ) ,
233
245
Value : metricValue ,
234
246
})
235
247
}
@@ -253,14 +265,22 @@ func createHPAStatusTargetMetric() generator.FamilyGenerator {
253
265
var currentMetric autoscaling.MetricValueStatus
254
266
// The variable maps the type of metric to the corresponding value
255
267
metricMap := make (map [metricTargetType ]float64 )
268
+ // Object|Pods|External metrics can use the same name for mutltiple metrics. Add SelectorLabels to the metric labels
269
+ selectorLabels := make (map [string ]string )
256
270
257
271
switch m .Type {
258
272
case autoscaling .ObjectMetricSourceType :
259
273
metricName = m .Object .Metric .Name
260
274
currentMetric = m .Object .Current
275
+ if m .Object .Metric .Selector != nil {
276
+ selectorLabels = m .Object .Metric .Selector .MatchLabels
277
+ }
261
278
case autoscaling .PodsMetricSourceType :
262
279
metricName = m .Pods .Metric .Name
263
280
currentMetric = m .Pods .Current
281
+ if m .Pods .Metric .Selector != nil {
282
+ selectorLabels = m .Pods .Metric .Selector .MatchLabels
283
+ }
264
284
case autoscaling .ResourceMetricSourceType :
265
285
metricName = string (m .Resource .Name )
266
286
currentMetric = m .Resource .Current
@@ -270,6 +290,9 @@ func createHPAStatusTargetMetric() generator.FamilyGenerator {
270
290
case autoscaling .ExternalMetricSourceType :
271
291
metricName = m .External .Metric .Name
272
292
currentMetric = m .External .Current
293
+ if m .External .Metric .Selector != nil {
294
+ selectorLabels = m .External .Metric .Selector .MatchLabels
295
+ }
273
296
default :
274
297
// Skip unsupported metric type
275
298
continue
@@ -286,9 +309,10 @@ func createHPAStatusTargetMetric() generator.FamilyGenerator {
286
309
}
287
310
288
311
for metricTypeIndex , metricValue := range metricMap {
312
+ selectorLabelKeys , selectorLabelValues := kubeMapToPrometheusLabels ("selectorlabel" , selectorLabels )
289
313
ms = append (ms , & metric.Metric {
290
- LabelKeys : targetMetricLabels ,
291
- LabelValues : []string {metricName , metricTypeIndex .String ()},
314
+ LabelKeys : append ( targetMetricLabels , selectorLabelKeys ... ) ,
315
+ LabelValues : append ( []string {metricName , metricTypeIndex .String ()}, selectorLabelValues ... ) ,
292
316
Value : metricValue ,
293
317
})
294
318
}
0 commit comments