70 lines
1.5 KiB
Go
70 lines
1.5 KiB
Go
package routing
|
|
|
|
import (
|
|
"fmt"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
// routerStats is a struct that tracks various updates to the graph and
|
|
// facilitates aggregate logging of the statistics.
|
|
type routerStats struct {
|
|
numChannels uint32
|
|
numUpdates uint32
|
|
numNodes uint32
|
|
lastReset time.Time
|
|
|
|
mu sync.RWMutex
|
|
}
|
|
|
|
// incNumEdges increments the number of discovered edges.
|
|
func (g *routerStats) incNumEdgesDiscovered() {
|
|
g.mu.Lock()
|
|
g.numChannels++
|
|
g.mu.Unlock()
|
|
}
|
|
|
|
// incNumUpdates increments the number of channel updates processed.
|
|
func (g *routerStats) incNumChannelUpdates() {
|
|
g.mu.Lock()
|
|
g.numUpdates++
|
|
g.mu.Unlock()
|
|
}
|
|
|
|
// incNumNodeUpdates increments the number of node updates processed.
|
|
func (g *routerStats) incNumNodeUpdates() {
|
|
g.mu.Lock()
|
|
g.numNodes++
|
|
g.mu.Unlock()
|
|
}
|
|
|
|
// Empty returns true if all stats are zero.
|
|
func (g *routerStats) Empty() bool {
|
|
g.mu.RLock()
|
|
isEmpty := g.numChannels == 0 &&
|
|
g.numUpdates == 0 &&
|
|
g.numNodes == 0
|
|
g.mu.RUnlock()
|
|
return isEmpty
|
|
}
|
|
|
|
// Reset clears any router stats and sets the lastReset field to now.
|
|
func (g *routerStats) Reset() {
|
|
g.mu.Lock()
|
|
g.numChannels = 0
|
|
g.numUpdates = 0
|
|
g.numNodes = 0
|
|
g.lastReset = time.Now()
|
|
g.mu.Unlock()
|
|
}
|
|
|
|
// String returns a human-readable description of the router stats.
|
|
func (g *routerStats) String() string {
|
|
g.mu.RLock()
|
|
str := fmt.Sprintf("Processed channels=%d updates=%d nodes=%d in "+
|
|
"last %v", g.numChannels, g.numUpdates, g.numNodes,
|
|
time.Since(g.lastReset))
|
|
g.mu.RUnlock()
|
|
return str
|
|
}
|