@@ -22,17 +22,28 @@ import (
2222 "k8s.io/autoscaler/cluster-autoscaler/metrics"
2323)
2424
25+ type metricObserver interface {
26+ ObserveMaxNodeSkipEvalDurationSeconds (duration time.Duration )
27+ }
28+
2529// MaxNodeSkipEvalTime is a time tracker for the biggest evaluation time of a node during ScaleDown
2630type MaxNodeSkipEvalTime struct {
2731 // lastEvalTime is the time of previous currentlyUnneededNodeNames parsing
2832 lastEvalTime time.Time
2933 // nodeNamesWithTimeStamps is maps of nodeNames with their time of last successful evaluation
3034 nodeNamesWithTimeStamps map [string ]time.Time
35+
36+ metrics metricObserver
3137}
3238
3339// NewMaxNodeSkipEvalTime returns LongestNodeScaleDownEvalTime with lastEvalTime set to currentTime
3440func NewMaxNodeSkipEvalTime (currentTime time.Time ) * MaxNodeSkipEvalTime {
35- return & MaxNodeSkipEvalTime {lastEvalTime : currentTime }
41+ return newMaxNodeSkipEvalTime (currentTime , metrics .DefaultMetrics )
42+ }
43+
44+ // NewMaxNodeSkipEvalTime returns LongestNodeScaleDownEvalTime with lastEvalTime set to currentTime
45+ func newMaxNodeSkipEvalTime (currentTime time.Time , metrics metricObserver ) * MaxNodeSkipEvalTime {
46+ return & MaxNodeSkipEvalTime {lastEvalTime : currentTime , metrics : metrics }
3647}
3748
3849// Retrieves the time of the last evaluation of a node.
@@ -65,6 +76,6 @@ func (l *MaxNodeSkipEvalTime) Update(nodeNames []string, currentTime time.Time)
6576 l .lastEvalTime = currentTime
6677 minimumTime := l .getMin ()
6778 longestDuration := currentTime .Sub (minimumTime )
68- metrics .ObserveMaxNodeSkipEvalDurationSeconds (longestDuration )
79+ l . metrics .ObserveMaxNodeSkipEvalDurationSeconds (longestDuration )
6980 return longestDuration
7081}
0 commit comments