aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2018-09-20 16:41:59 +0800
committerPéter Szilágyi <peterke@gmail.com>2018-09-20 17:56:35 +0800
commit0f2ba07c4122fbc2d836a2f374e5da8d8546e99f (patch)
treee86d2effb259d13ba43e476c81cc786d3f1b71dd /common
parentc37238cae9b83aff0fc2413b3bb37f847c7949d6 (diff)
downloaddexon-0f2ba07c4122fbc2d836a2f374e5da8d8546e99f.tar
dexon-0f2ba07c4122fbc2d836a2f374e5da8d8546e99f.tar.gz
dexon-0f2ba07c4122fbc2d836a2f374e5da8d8546e99f.tar.bz2
dexon-0f2ba07c4122fbc2d836a2f374e5da8d8546e99f.tar.lz
dexon-0f2ba07c4122fbc2d836a2f374e5da8d8546e99f.tar.xz
dexon-0f2ba07c4122fbc2d836a2f374e5da8d8546e99f.tar.zst
dexon-0f2ba07c4122fbc2d836a2f374e5da8d8546e99f.zip
common, core, light: add block age into info logs
Diffstat (limited to 'common')
-rw-r--r--common/format.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/common/format.go b/common/format.go
index fccc29962..6fc21af71 100644
--- a/common/format.go
+++ b/common/format.go
@@ -38,3 +38,45 @@ func (d PrettyDuration) String() string {
}
return label
}
+
+// PrettyAge is a pretty printed version of a time.Duration value that rounds
+// the values up to a single most significant unit, days/weeks/years included.
+type PrettyAge time.Time
+
+// ageUnits is a list of units the age pretty printing uses.
+var ageUnits = []struct {
+ Size time.Duration
+ Symbol string
+}{
+ {12 * 30 * 24 * time.Hour, "y"},
+ {30 * 24 * time.Hour, "mo"},
+ {7 * 24 * time.Hour, "w"},
+ {24 * time.Hour, "d"},
+ {time.Hour, "h"},
+ {time.Minute, "m"},
+ {time.Second, "s"},
+}
+
+// String implements the Stringer interface, allowing pretty printing of duration
+// values rounded to the most significant time unit.
+func (t PrettyAge) String() string {
+ // Calculate the time difference and handle the 0 cornercase
+ diff := time.Since(time.Time(t))
+ if diff < time.Second {
+ return "0"
+ }
+ // Accumulate a precision of 3 components before returning
+ result, prec := "", 0
+
+ for _, unit := range ageUnits {
+ if diff > unit.Size {
+ result = fmt.Sprintf("%s%d%s", result, diff/unit.Size, unit.Symbol)
+ diff %= unit.Size
+
+ if prec += 1; prec >= 3 {
+ break
+ }
+ }
+ }
+ return result
+}