@section nncp-stat
@example
-$ nncp-stat [options] [-node NODE]
+$ nncp-stat [options] [-pkt] [-node NODE]
@end example
Print current @ref{Spool, spool} statistics about unsent and unprocessed
packets. For each node (unless @option{-node} specified) and each
niceness level there will be printed how many packets (with the total
-size) are in inbound (Rx) and outbound (Tx) queues.
+size) are in inbound (Rx) and outbound (Tx) queues. @option{-pkt} option
+show information about each packet.
@node nncp-toss
@section nncp-toss
func usage() {
fmt.Fprintf(os.Stderr, nncp.UsageHeader())
fmt.Fprintf(os.Stderr, "nncp-stat -- show queued Rx/Tx stats\n\n")
- fmt.Fprintf(os.Stderr, "Usage: %s [options]\nOptions:\n", os.Args[0])
+ fmt.Fprintf(os.Stderr, "Usage: %s [options] [-pkt] [-node NODE]\nOptions:\n", os.Args[0])
flag.PrintDefaults()
}
+func jobPrint(xx nncp.TRxTx, job nncp.Job) {
+ fmt.Printf(
+ "\t%s %s %s (nice: %s)\n",
+ string(xx),
+ nncp.ToBase32(job.HshValue[:]),
+ humanize.IBytes(uint64(job.Size)),
+ nncp.NicenessFmt(job.PktEnc.Nice),
+ )
+}
+
func main() {
var (
+ showPkt = flag.Bool("pkt", false, "Show packets listing")
cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file")
nodeRaw = flag.String("node", "", "Process only that node")
spoolPath = flag.String("spool", "", "Override path to spool")
if nodeOnly != nil && *node.Id != *nodeOnly.Id {
continue
}
+ fmt.Println(node.Name)
rxNums := make(map[uint8]int)
rxBytes := make(map[uint8]int64)
for job := range ctx.Jobs(node.Id, nncp.TRx) {
job.Fd.Close()
+ if *showPkt {
+ jobPrint(nncp.TRx, job)
+ }
rxNums[job.PktEnc.Nice] = rxNums[job.PktEnc.Nice] + 1
rxBytes[job.PktEnc.Nice] = rxBytes[job.PktEnc.Nice] + job.Size
}
txBytes := make(map[uint8]int64)
for job := range ctx.Jobs(node.Id, nncp.TTx) {
job.Fd.Close()
+ if *showPkt {
+ jobPrint(nncp.TRx, job)
+ }
txNums[job.PktEnc.Nice] = txNums[job.PktEnc.Nice] + 1
txBytes[job.PktEnc.Nice] = txBytes[job.PktEnc.Nice] + job.Size
}
- fmt.Println(node.Name)
var nice uint8
for nice = 1; nice > 0; nice++ {
rxNum, rxExists := rxNums[nice]