83 lines
1.2 KiB
Go
83 lines
1.2 KiB
Go
package parser
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"time"
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
var (
|
|
nowFunc func() time.Time
|
|
)
|
|
|
|
func init() {
|
|
nowFunc = func() time.Time {
|
|
return time.Now()
|
|
}
|
|
}
|
|
|
|
func overrideNowFunc(f func() time.Time) {
|
|
nowFunc = f
|
|
}
|
|
|
|
func currentTime() time.Time {
|
|
return nowFunc()
|
|
}
|
|
|
|
func parseInt(value string) int64 {
|
|
i, err := strconv.ParseInt(value, 10, 64)
|
|
|
|
if err != nil {
|
|
log.Errorln(err)
|
|
return 0
|
|
}
|
|
|
|
return i
|
|
}
|
|
|
|
func parseFloat(value string) float64 {
|
|
i, err := strconv.ParseFloat(value, 64)
|
|
|
|
if err != nil {
|
|
log.Errorln(err)
|
|
return 0
|
|
}
|
|
|
|
return i
|
|
}
|
|
|
|
func parseUptimeForIso(s string) int {
|
|
start, err := time.ParseInLocation("2006-01-02 15:04:05", s, time.Local)
|
|
if err != nil {
|
|
log.Errorln(err)
|
|
return 0
|
|
}
|
|
|
|
return int(currentTime().Sub(start).Seconds())
|
|
}
|
|
|
|
func parseUptimeForDuration(duration []string) int {
|
|
h := parseInt(duration[2])
|
|
m := parseInt(duration[3])
|
|
s := parseInt(duration[4])
|
|
str := fmt.Sprintf("%dh%dm%ds", h, m, s)
|
|
|
|
d, err := time.ParseDuration(str)
|
|
if err != nil {
|
|
log.Errorln(err)
|
|
return 0
|
|
}
|
|
|
|
return int(d.Seconds())
|
|
}
|
|
|
|
func parseUptimeForTimestamp(timestamp string) int {
|
|
since := parseInt(timestamp)
|
|
|
|
s := time.Unix(since, 0)
|
|
d := currentTime().Sub(s)
|
|
return int(d.Seconds())
|
|
}
|