.github
accounts
build
cmd
common
bitutil
compiler
fdlimit
hexutil
math
mclock
prque
big.go
bytes.go
bytes_test.go
debug.go
format.go
main_test.go
path.go
size.go
size_test.go
test_utils.go
types.go
types_test.go
consensus
console
containers
contracts
core
crypto
dashboard
eth
ethclient
ethdb
ethstats
event
internal
les
light
log
metrics
miner
mobile
node
p2p
params
rlp
rpc
signer
swarm
tests
trie
vendor
whisper
.dockerignore
.gitattributes
.gitignore
.gitmodules
.mailmap
.travis.yml
AUTHORS
COPYING
COPYING.LESSER
Dockerfile
Dockerfile.alltools
Makefile
README.md
appveyor.yml
circle.yml
interfaces.go
83 lines
2.5 KiB
Go
83 lines
2.5 KiB
Go
// Copyright 2016 The go-ethereum Authors
|
|
// This file is part of the go-ethereum library.
|
|
//
|
|
// The go-ethereum library is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU Lesser General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// The go-ethereum library is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU Lesser General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Lesser General Public License
|
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
package common
|
|
|
|
import (
|
|
"fmt"
|
|
"regexp"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
// PrettyDuration is a pretty printed version of a time.Duration value that cuts
|
|
// the unnecessary precision off from the formatted textual representation.
|
|
type PrettyDuration time.Duration
|
|
|
|
var prettyDurationRe = regexp.MustCompile(`\.[0-9]+`)
|
|
|
|
// String implements the Stringer interface, allowing pretty printing of duration
|
|
// values rounded to three decimals.
|
|
func (d PrettyDuration) String() string {
|
|
label := fmt.Sprintf("%v", time.Duration(d))
|
|
if match := prettyDurationRe.FindString(label); len(match) > 4 {
|
|
label = strings.Replace(label, match, match[:4], 1)
|
|
}
|
|
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
|
|
}
|