فهرست منبع

Do not backtrack start time - append end only. (#3583) (#3585)

Co-authored-by: Matt Bolt <mbolt35@gmail.com>
Ishaan Mittal 3 ماه پیش
والد
کامیت
5f20b59a19
2فایلهای تغییر یافته به همراه34 افزوده شده و 6 حذف شده
  1. 1 2
      pkg/costmodel/allocation_helpers.go
  2. 33 4
      pkg/costmodel/allocation_helpers_test.go

+ 1 - 2
pkg/costmodel/allocation_helpers.go

@@ -2510,8 +2510,7 @@ func calculateStartAndEnd(result []*util.Vector, resolution time.Duration, windo
 	// of the pod by giving "one resolution" worth of duration, half on each
 	// side of the given timestamp.
 	if s.Equal(e) {
-		s = s.Add(-1 * resolution / time.Duration(2))
-		e = e.Add(resolution / time.Duration(2))
+		e = e.Add(resolution)
 	}
 	if s.Before(*window.Start()) {
 		s = *window.Start()

+ 33 - 4
pkg/costmodel/allocation_helpers_test.go

@@ -23,6 +23,7 @@ var windowEnd = time.Date(2020, 6, 17, 0, 0, 0, 0, time.UTC)
 var window = opencost.NewWindow(&windowStart, &windowEnd)
 
 var startFloat = float64(windowStart.Unix())
+var endFloat = float64(windowEnd.Unix())
 
 var podKey1 = podKey{
 	namespaceKey: namespaceKey{
@@ -564,8 +565,8 @@ func TestCalculateStartAndEnd(t *testing.T) {
 		"1 minute resolution, 1 minute window": {
 			resolution:    time.Minute,
 			window:        opencost.NewClosedWindow(windowStart.Add(time.Minute*14).Add(time.Second*30), windowStart.Add(time.Minute*15).Add(time.Second*30)),
-			expectedStart: windowStart.Add(time.Minute * 14).Add(time.Second * 30),
-			expectedEnd:   windowStart.Add(time.Minute * 15).Add(time.Second * 30),
+			expectedStart: windowStart.Add(time.Minute * 15),
+			expectedEnd:   windowStart.Add(time.Minute * 16),
 			result: &source.QueryResult{
 				Values: []*util.Vector{
 					{
@@ -577,9 +578,9 @@ func TestCalculateStartAndEnd(t *testing.T) {
 		// Example: avg(node_total_hourly_cost{}) by (node, provider_id)[1m:1m]
 		"1 minute resolution, 1 minute window, at window start": {
 			resolution:    time.Minute,
-			window:        opencost.NewClosedWindow(windowStart, windowStart.Add(time.Second*30)),
+			window:        opencost.NewClosedWindow(windowStart, windowStart.Add(time.Hour)),
 			expectedStart: windowStart,
-			expectedEnd:   windowStart.Add(time.Second * 30),
+			expectedEnd:   windowStart.Add(time.Minute),
 			result: &source.QueryResult{
 				Values: []*util.Vector{
 					{
@@ -588,6 +589,34 @@ func TestCalculateStartAndEnd(t *testing.T) {
 				},
 			},
 		},
+		// Example: avg(node_total_hourly_cost{}) by (node, provider_id)[1m:1m]
+		"1 minute resolution, 1 minute window, at window end": {
+			resolution:    time.Minute,
+			window:        opencost.NewClosedWindow(windowStart, windowStart.Add(time.Hour)),
+			expectedStart: windowEnd,
+			expectedEnd:   windowEnd,
+			result: &source.QueryResult{
+				Values: []*util.Vector{
+					{
+						Timestamp: endFloat,
+					},
+				},
+			},
+		},
+		// Example: avg(node_total_hourly_cost{}) by (node, provider_id)[1m:1m]
+		"1 minute resolution, 1 minute window, near window end": {
+			resolution:    time.Minute,
+			window:        opencost.NewClosedWindow(windowStart, windowStart.Add(time.Hour)),
+			expectedStart: windowEnd.Add(-time.Second * 15),
+			expectedEnd:   windowEnd,
+			result: &source.QueryResult{
+				Values: []*util.Vector{
+					{
+						Timestamp: endFloat - 15.0,
+					},
+				},
+			},
+		},
 	}
 
 	for name, testCase := range testCases {