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), peersdb.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 al, sy := sys.MemUsed() fmt.Println("Heap size:", al>>20, "MB Sys mem used:", sy>>20, "MB", " QDB Extra mem:", qdb.ExtraMemoryConsumed>>20, "MB in", qdb.ExtraMemoryAllocCnt, "parts") 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:", lib.Version, " Threads:", sys.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(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.Incoming { 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() 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() }