Переглянути джерело

Implement Contract for Window (opposite of Expand)

Niko Kovacevic 4 роки тому
батько
коміт
5bb824544c
1 змінених файлів з 27 додано та 1 видалено
  1. 27 1
      pkg/kubecost/window.go

+ 27 - 1
pkg/kubecost/window.go

@@ -3,7 +3,6 @@ package kubecost
 import (
 import (
 	"bytes"
 	"bytes"
 	"fmt"
 	"fmt"
-	"github.com/kubecost/cost-model/pkg/util/timeutil"
 	"math"
 	"math"
 	"regexp"
 	"regexp"
 	"strconv"
 	"strconv"
@@ -11,6 +10,7 @@ import (
 
 
 	"github.com/kubecost/cost-model/pkg/env"
 	"github.com/kubecost/cost-model/pkg/env"
 	"github.com/kubecost/cost-model/pkg/thanos"
 	"github.com/kubecost/cost-model/pkg/thanos"
+	"github.com/kubecost/cost-model/pkg/util/timeutil"
 )
 )
 
 
 const (
 const (
@@ -410,6 +410,32 @@ func (w Window) Expand(that Window) Window {
 	return w
 	return w
 }
 }
 
 
+func (w Window) ContractStart(start time.Time) Window {
+	if w.start == nil || start.After(*w.start) {
+		w.start = &start
+	}
+	return w
+}
+
+func (w Window) ContractEnd(end time.Time) Window {
+	if w.end == nil || end.Before(*w.end) {
+		w.end = &end
+	}
+	return w
+}
+
+func (w Window) Contract(that Window) Window {
+	if that.start != nil {
+		w = w.ContractStart(*that.start)
+	}
+
+	if that.end != nil {
+		w = w.ContractEnd(*that.end)
+	}
+
+	return w
+}
+
 func (w Window) Hours() float64 {
 func (w Window) Hours() float64 {
 	if w.IsOpen() {
 	if w.IsOpen() {
 		return math.Inf(1)
 		return math.Inf(1)