From b21dc4be6170f235efe823c94263571eefbae6c6 Mon Sep 17 00:00:00 2001 From: Marvin Zhang Date: Thu, 4 Jul 2024 13:01:54 +0800 Subject: [PATCH] feat: updated node monitoring tab --- core/utils/time.go | 55 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/core/utils/time.go b/core/utils/time.go index 689e2c28..1ddcbdcf 100644 --- a/core/utils/time.go +++ b/core/utils/time.go @@ -1,6 +1,11 @@ package utils import ( + "errors" + "github.com/apex/log" + "github.com/crawlab-team/crawlab/trace" + "regexp" + "strconv" "time" ) @@ -16,3 +21,53 @@ func GetLocalTimeString(t time.Time) string { t = GetLocalTime(t) return GetTimeString(t) } + +func GetTimeUnitParts(timeUnit string) (num int, unit string, err error) { + re := regexp.MustCompile(`^(\d+)([a-zA-Z])$`) + groups := re.FindStringSubmatch(timeUnit) + if len(groups) < 3 { + err = errors.New("failed to parse duration text") + log.Errorf("failed to parse duration text: %v", err) + trace.PrintError(err) + return 0, "", err + } + num, err = strconv.Atoi(groups[1]) + if err != nil { + log.Errorf("failed to convert string to int: %v", err) + trace.PrintError(err) + return 0, "", err + } + unit = groups[2] + return num, unit, nil +} + +func GetTimeDuration(num string, unit string) (d time.Duration, err error) { + numInt, err := strconv.Atoi(num) + if err != nil { + log.Errorf("failed to convert string to int: %v", err) + trace.PrintError(err) + return d, err + } + switch unit { + case "s": + d = time.Duration(numInt) * time.Second + case "m": + d = time.Duration(numInt) * time.Minute + case "h": + d = time.Duration(numInt) * time.Hour + case "d": + d = time.Duration(numInt) * 24 * time.Hour + case "w": + d = time.Duration(numInt) * 7 * 24 * time.Hour + case "M": + d = time.Duration(numInt) * 30 * 24 * time.Hour + case "y": + d = time.Duration(numInt) * 365 * 24 * time.Hour + default: + err = errors.New("invalid time unit") + log.Errorf("invalid time unit: %v", unit) + trace.PrintError(err) + return d, err + } + return d, nil +}