[VOL-5486] Fix deprecated versions
Change-Id: If0b888d6c2f33b2f415c8b03b08dc994bb3df3f4
Signed-off-by: Abhay Kumar <abhay.kumar@radisys.com>
diff --git a/vendor/github.com/cheggaaa/pb/v3/speed.go b/vendor/github.com/cheggaaa/pb/v3/speed.go
new file mode 100644
index 0000000..17a6b1b
--- /dev/null
+++ b/vendor/github.com/cheggaaa/pb/v3/speed.go
@@ -0,0 +1,83 @@
+package pb
+
+import (
+ "fmt"
+ "math"
+ "time"
+
+ "github.com/VividCortex/ewma"
+)
+
+var speedAddLimit = time.Second / 2
+
+type speed struct {
+ ewma ewma.MovingAverage
+ lastStateId uint64
+ prevValue, startValue int64
+ prevTime, startTime time.Time
+}
+
+func (s *speed) value(state *State) float64 {
+ if s.ewma == nil {
+ s.ewma = ewma.NewMovingAverage()
+ }
+ if state.IsFirst() || state.Id() < s.lastStateId {
+ s.reset(state)
+ return 0
+ }
+ if state.Id() == s.lastStateId {
+ return s.ewma.Value()
+ }
+ if state.IsFinished() {
+ return s.absValue(state)
+ }
+ dur := state.Time().Sub(s.prevTime)
+ if dur < speedAddLimit {
+ return s.ewma.Value()
+ }
+ diff := math.Abs(float64(state.Value() - s.prevValue))
+ lastSpeed := diff / dur.Seconds()
+ s.prevTime = state.Time()
+ s.prevValue = state.Value()
+ s.lastStateId = state.Id()
+ s.ewma.Add(lastSpeed)
+ return s.ewma.Value()
+}
+
+func (s *speed) reset(state *State) {
+ s.lastStateId = state.Id()
+ s.startTime = state.Time()
+ s.prevTime = state.Time()
+ s.startValue = state.Value()
+ s.prevValue = state.Value()
+ s.ewma = ewma.NewMovingAverage()
+}
+
+func (s *speed) absValue(state *State) float64 {
+ if dur := state.Time().Sub(s.startTime); dur > 0 {
+ return float64(state.Value()) / dur.Seconds()
+ }
+ return 0
+}
+
+func getSpeedObj(state *State) (s *speed) {
+ if sObj, ok := state.Get(speedObj).(*speed); ok {
+ return sObj
+ }
+ s = new(speed)
+ state.Set(speedObj, s)
+ return
+}
+
+// ElementSpeed calculates current speed by EWMA
+// Optionally can take one or two string arguments.
+// First string will be used as value for format speed, default is "%s p/s".
+// Second string will be used when speed not available, default is "? p/s"
+// In template use as follows: {{speed .}} or {{speed . "%s per second"}} or {{speed . "%s ps" "..."}
+var ElementSpeed ElementFunc = func(state *State, args ...string) string {
+ sp := getSpeedObj(state).value(state)
+ if sp == 0 {
+ return argsHelper(args).getNotEmptyOr(1, "? p/s")
+ }
+ return fmt.Sprintf(argsHelper(args).getNotEmptyOr(0, "%s p/s"), state.Format(int64(round(sp))))
+}