You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.5 KiB
69 lines
1.5 KiB
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 |
|
}
|
|
|