func net_stats(par string) { if par == "bw" { common.PrintStats() return } else if par != "" { node_info(par) return } network.Mutex_net.Lock() fmt.Printf("%d active net connections, %d outgoing\n", len(network.OpenCons), network.OutConsActive) srt := make(network.SortedKeys, len(network.OpenCons)) cnt := 0 for k, v := range network.OpenCons { srt[cnt].Key = k srt[cnt].ConnID = v.ConnID cnt++ } sort.Sort(srt) for idx := range srt { v := network.OpenCons[srt[idx].Key] v.Mutex.Lock() fmt.Printf("%8d) ", v.ConnID) if v.Incomming { fmt.Print("<- ") } else { fmt.Print(" ->") } fmt.Printf(" %21s %5dms %7d : %-16s %7d : %-16s", v.PeerAddr.Ip(), v.GetAveragePing(), v.LastBtsRcvd, v.LastCmdRcvd, v.LastBtsSent, v.LastCmdSent) if (v.BytesReceived | v.BytesSent) != 0 { fmt.Printf("%9s %9s", common.BytesToString(v.BytesReceived), common.BytesToString(v.BytesSent)) } fmt.Print(" ", v.Node.Agent) if v.Send.Buf != nil { fmt.Print(" ", len(v.Send.Buf)) } v.Mutex.Unlock() fmt.Println() } if network.ExternalAddrLen() > 0 { fmt.Print("External addresses:") network.ExternalIpMutex.Lock() for ip, cnt := range network.ExternalIp4 { fmt.Printf(" %d.%d.%d.%d(%d)", byte(ip>>24), byte(ip>>16), byte(ip>>8), byte(ip), cnt) } network.ExternalIpMutex.Unlock() fmt.Println() } else { fmt.Println("No known external address") } network.Mutex_net.Unlock() common.PrintStats() }
func show_info(par string) { common.Busy_mutex.Lock() if common.BusyWith != "" { fmt.Println("Chain thread busy with:", common.BusyWith) } else { fmt.Println("Chain thread is idle") } common.Busy_mutex.Unlock() network.MutexRcv.Lock() fmt.Println("Last Header:", network.LastCommitedHeader.BlockHash.String(), "@", network.LastCommitedHeader.Height) discarded := len(network.DiscardedBlocks) cached := len(network.CachedBlocks) b2g_len := len(network.BlocksToGet) b2g_idx_len := len(network.IndexToBlocksToGet) lb2g := network.LowestIndexToBlocksToGet network.MutexRcv.Unlock() common.Last.Mutex.Lock() fmt.Println("Last Block :", common.Last.Block.BlockHash.String(), "@", common.Last.Block.Height) fmt.Printf("Timestamp: %s, Diff: %.0f, Got: %s ago, ToGetFrom: %d\n", time.Unix(int64(common.Last.Block.Timestamp()), 0).Format("2006/01/02 15:04:05"), btc.GetDifficulty(common.Last.Block.Bits()), time.Now().Sub(common.Last.Time).String(), lb2g) fmt.Print("Median Time: ", time.Unix(int64(common.Last.Block.GetMedianTimePast()), 0).Format("2006/01/02 15:04:05"), ", ") common.Last.Mutex.Unlock() network.Mutex_net.Lock() fmt.Printf("NetQueueSize:%d, NetConns:%d, Peers:%d, B2G:%d/%d\n", len(network.NetBlocks), len(network.OpenCons), peersdb.PeerDB.Count(), b2g_len, b2g_idx_len) network.Mutex_net.Unlock() network.TxMutex.Lock() fmt.Printf("TransactionsToSend:%d, TransactionsRejected:%d, TransactionsPending:%d/%d\n", len(network.TransactionsToSend), len(network.TransactionsRejected), len(network.TransactionsPending), len(network.NetTxs)) fmt.Printf("WaitingForInputs:%d, SpentOutputs:%d, Hashrate:%s, AverageFee:%.1f SpB\n", len(network.WaitingForInputs), len(network.SpentOutputs), usif.GetNetworkHashRate(), common.GetAverageFee()) network.TxMutex.Unlock() common.PrintStats() // Memory used al, sy := sys.MemUsed() fmt.Println("Heap size:", al>>20, "MB Sys mem used:", sy>>20, "MB QDB extra mem:", atomic.LoadInt64(&qdb.ExtraMemoryConsumed)>>20, "MB in", atomic.LoadInt64(&qdb.ExtraMemoryAllocCnt), "recs") var gs debug.GCStats debug.ReadGCStats(&gs) fmt.Println("Go version:", runtime.Version(), " LastGC:", time.Now().Sub(gs.LastGC).String(), " NumGC:", gs.NumGC, " PauseTotal:", gs.PauseTotal.String()) fmt.Println("Gocoin:", gocoin.Version, " Uptime:", time.Now().Sub(common.StartTime).String(), " ECDSA cnt:", btc.EcdsaVerifyCnt, " cach:", cached, " dis:", discarded) }
func show_info(par string) { common.Busy_mutex.Lock() if common.BusyWith != "" { fmt.Println("Chain thread busy with:", common.BusyWith) } else { fmt.Println("Chain thread is idle") } common.Busy_mutex.Unlock() common.Last.Mutex.Lock() fmt.Println("Last Block:", common.Last.Block.BlockHash.String()) fmt.Printf("Height: %d @ %s, Diff: %.0f, Got: %s ago\n", common.Last.Block.Height, time.Unix(int64(common.Last.Block.Timestamp()), 0).Format("2006/01/02 15:04:05"), btc.GetDifficulty(common.Last.Block.Bits()), time.Now().Sub(common.Last.Time).String()) common.Last.Mutex.Unlock() network.Mutex_net.Lock() fmt.Printf("BlocksCached: %d, NetQueueSize: %d, NetConns: %d, Peers: %d\n", len(network.CachedBlocks), len(network.NetBlocks), len(network.OpenCons), network.PeerDB.Count()) network.Mutex_net.Unlock() network.TxMutex.Lock() fmt.Printf("TransactionsToSend:%d, TransactionsRejected:%d, TransactionsPending:%d/%d\n", len(network.TransactionsToSend), len(network.TransactionsRejected), len(network.TransactionsPending), len(network.NetTxs)) fmt.Printf("WaitingForInputs:%d, SpentOutputs:%d, Hashrate:%s\n", len(network.WaitingForInputs), len(network.SpentOutputs), usif.GetNetworkHashRate()) network.TxMutex.Unlock() common.PrintStats() // Memory used var ms runtime.MemStats var gs debug.GCStats runtime.ReadMemStats(&ms) fmt.Println("Go version:", runtime.Version(), " Heap size:", ms.Alloc>>20, "MB", " Sys mem used", ms.Sys>>20, "MB") debug.ReadGCStats(&gs) fmt.Println("LastGC:", time.Now().Sub(gs.LastGC).String(), " NumGC:", gs.NumGC, " PauseTotal:", gs.PauseTotal.String()) fmt.Println("Gocoin:", btc.SourcesTag, " Threads:", btc.UseThreads, " Uptime:", time.Now().Sub(common.StartTime).String(), " ECDSA cnt:", btc.EcdsaVerifyCnt) }
func net_stats(par string) { if par == "bw" { common.PrintStats() return } else if par != "" { node_info(par) return } network.Mutex_net.Lock() fmt.Printf("%d active net connections, %d outgoing\n", len(network.OpenCons), network.OutConsActive) srt := make(SortedKeys, len(network.OpenCons)) cnt := 0 for k, v := range network.OpenCons { srt[cnt].Key = k srt[cnt].ConnID = v.ConnID cnt++ } sort.Sort(srt) for idx := range srt { v := network.OpenCons[srt[idx].Key] v.Mutex.Lock() fmt.Printf("%8d) ", v.ConnID) if v.X.Incomming { fmt.Print("<- ") } else { fmt.Print(" ->") } fmt.Printf(" %21s %5dms %7d : %-16s %7d : %-16s", v.PeerAddr.Ip(), v.GetAveragePing(), v.X.LastBtsRcvd, v.X.LastCmdRcvd, v.X.LastBtsSent, v.X.LastCmdSent) fmt.Printf("%9s %9s", common.BytesToString(v.X.Counters["BytesReceived"]), common.BytesToString(v.X.Counters["BytesSent"])) fmt.Print(" ", v.Node.Agent) if b2s := v.BytesToSent(); b2s > 0 { fmt.Print(" ", b2s) } v.Mutex.Unlock() fmt.Println() } if network.ExternalAddrLen() > 0 { fmt.Print("External addresses:") network.ExternalIpMutex.Lock() for ip, cnt := range network.ExternalIp4 { fmt.Printf(" %d.%d.%d.%d(%d)", byte(ip>>24), byte(ip>>16), byte(ip>>8), byte(ip), cnt) } network.ExternalIpMutex.Unlock() fmt.Println() } else { fmt.Println("No known external address") } network.Mutex_net.Unlock() fmt.Print("RecentlyDisconencted:") network.HammeringMutex.Lock() for ip, ti := range network.RecentlyDisconencted { fmt.Printf(" %d.%d.%d.%d-%s", ip[0], ip[1], ip[2], ip[3], time.Now().Sub(ti).String()) } network.HammeringMutex.Unlock() fmt.Println() common.PrintStats() }