mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-03-09 08:59:30 +00:00
Several packages are only used while running the e2e suite. These packages are less important to update, as the they can not influence the final executable that is part of the Ceph-CSI container-image. By moving these dependencies out of the main Ceph-CSI go.mod, it is easier to identify if a reported CVE affects Ceph-CSI, or only the testing (like most of the Kubernetes CVEs). Signed-off-by: Niels de Vos <ndevos@ibm.com>
153 lines
3.0 KiB
Go
153 lines
3.0 KiB
Go
package sprig
|
|
|
|
import (
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
// Given a format and a date, format the date string.
|
|
//
|
|
// Date can be a `time.Time` or an `int, int32, int64`.
|
|
// In the later case, it is treated as seconds since UNIX
|
|
// epoch.
|
|
func date(fmt string, date interface{}) string {
|
|
return dateInZone(fmt, date, "Local")
|
|
}
|
|
|
|
func htmlDate(date interface{}) string {
|
|
return dateInZone("2006-01-02", date, "Local")
|
|
}
|
|
|
|
func htmlDateInZone(date interface{}, zone string) string {
|
|
return dateInZone("2006-01-02", date, zone)
|
|
}
|
|
|
|
func dateInZone(fmt string, date interface{}, zone string) string {
|
|
var t time.Time
|
|
switch date := date.(type) {
|
|
default:
|
|
t = time.Now()
|
|
case time.Time:
|
|
t = date
|
|
case *time.Time:
|
|
t = *date
|
|
case int64:
|
|
t = time.Unix(date, 0)
|
|
case int:
|
|
t = time.Unix(int64(date), 0)
|
|
case int32:
|
|
t = time.Unix(int64(date), 0)
|
|
}
|
|
|
|
loc, err := time.LoadLocation(zone)
|
|
if err != nil {
|
|
loc, _ = time.LoadLocation("UTC")
|
|
}
|
|
|
|
return t.In(loc).Format(fmt)
|
|
}
|
|
|
|
func dateModify(fmt string, date time.Time) time.Time {
|
|
d, err := time.ParseDuration(fmt)
|
|
if err != nil {
|
|
return date
|
|
}
|
|
return date.Add(d)
|
|
}
|
|
|
|
func mustDateModify(fmt string, date time.Time) (time.Time, error) {
|
|
d, err := time.ParseDuration(fmt)
|
|
if err != nil {
|
|
return time.Time{}, err
|
|
}
|
|
return date.Add(d), nil
|
|
}
|
|
|
|
func dateAgo(date interface{}) string {
|
|
var t time.Time
|
|
|
|
switch date := date.(type) {
|
|
default:
|
|
t = time.Now()
|
|
case time.Time:
|
|
t = date
|
|
case int64:
|
|
t = time.Unix(date, 0)
|
|
case int:
|
|
t = time.Unix(int64(date), 0)
|
|
}
|
|
// Drop resolution to seconds
|
|
duration := time.Since(t).Round(time.Second)
|
|
return duration.String()
|
|
}
|
|
|
|
func duration(sec interface{}) string {
|
|
var n int64
|
|
switch value := sec.(type) {
|
|
default:
|
|
n = 0
|
|
case string:
|
|
n, _ = strconv.ParseInt(value, 10, 64)
|
|
case int64:
|
|
n = value
|
|
}
|
|
return (time.Duration(n) * time.Second).String()
|
|
}
|
|
|
|
func durationRound(duration interface{}) string {
|
|
var d time.Duration
|
|
switch duration := duration.(type) {
|
|
default:
|
|
d = 0
|
|
case string:
|
|
d, _ = time.ParseDuration(duration)
|
|
case int64:
|
|
d = time.Duration(duration)
|
|
case time.Time:
|
|
d = time.Since(duration)
|
|
}
|
|
|
|
u := uint64(d)
|
|
neg := d < 0
|
|
if neg {
|
|
u = -u
|
|
}
|
|
|
|
var (
|
|
year = uint64(time.Hour) * 24 * 365
|
|
month = uint64(time.Hour) * 24 * 30
|
|
day = uint64(time.Hour) * 24
|
|
hour = uint64(time.Hour)
|
|
minute = uint64(time.Minute)
|
|
second = uint64(time.Second)
|
|
)
|
|
switch {
|
|
case u > year:
|
|
return strconv.FormatUint(u/year, 10) + "y"
|
|
case u > month:
|
|
return strconv.FormatUint(u/month, 10) + "mo"
|
|
case u > day:
|
|
return strconv.FormatUint(u/day, 10) + "d"
|
|
case u > hour:
|
|
return strconv.FormatUint(u/hour, 10) + "h"
|
|
case u > minute:
|
|
return strconv.FormatUint(u/minute, 10) + "m"
|
|
case u > second:
|
|
return strconv.FormatUint(u/second, 10) + "s"
|
|
}
|
|
return "0s"
|
|
}
|
|
|
|
func toDate(fmt, str string) time.Time {
|
|
t, _ := time.ParseInLocation(fmt, str, time.Local)
|
|
return t
|
|
}
|
|
|
|
func mustToDate(fmt, str string) (time.Time, error) {
|
|
return time.ParseInLocation(fmt, str, time.Local)
|
|
}
|
|
|
|
func unixEpoch(date time.Time) string {
|
|
return strconv.FormatInt(date.Unix(), 10)
|
|
}
|