lbcd/claimtrie/logger.go
Roy Lee e323751218 ci: gofmt with go 1.19
Go 1.19 introduces various updates to gofmt.
2022-08-07 23:40:53 -07:00

73 lines
2 KiB
Go

// Copyright (c) 2015-2017 The btcsuite developers
// Use of this source code is governed by an ISC
// license that can be found in the LICENSE file.
package claimtrie
import (
"sync"
"time"
"github.com/btcsuite/btclog"
)
// claimProgressLogger provides periodic logging for other services in order
// to show users progress of certain "actions" involving some or all current
// claim names. Ex: rebuilding claimtrie.
type claimProgressLogger struct {
totalLogName int64
recentLogName int64
lastLogNameTime time.Time
subsystemLogger btclog.Logger
progressAction string
sync.Mutex
}
// newClaimProgressLogger returns a new name progress logger.
// The progress message is templated as follows:
//
// {progressAction} {numProcessed} {names|name} in the last {timePeriod} (total {totalProcessed})
func newClaimProgressLogger(progressMessage string, logger btclog.Logger) *claimProgressLogger {
return &claimProgressLogger{
lastLogNameTime: time.Now(),
progressAction: progressMessage,
subsystemLogger: logger,
}
}
// LogName logs a new claim name as an information message to show progress
// to the user. In order to prevent spam, it limits logging to one message
// every 10 seconds with duration and totals included.
func (n *claimProgressLogger) LogName(name []byte) {
n.Lock()
defer n.Unlock()
n.totalLogName++
n.recentLogName++
now := time.Now()
duration := now.Sub(n.lastLogNameTime)
if duration < time.Second*10 {
return
}
// Truncate the duration to 10s of milliseconds.
durationMillis := int64(duration / time.Millisecond)
tDuration := 10 * time.Millisecond * time.Duration(durationMillis/10)
// Log information about progress.
nameStr := "names"
if n.recentLogName == 1 {
nameStr = "name"
}
n.subsystemLogger.Infof("%s %d claim %s in the last %s (total %d)",
n.progressAction, n.recentLogName, nameStr, tDuration, n.totalLogName)
n.recentLogName = 0
n.lastLogNameTime = now
}
func (n *claimProgressLogger) SetLastLogTime(time time.Time) {
n.lastLogNameTime = time
}