func write_html_head(w http.ResponseWriter, r *http.Request) { start_time = time.Now() sessid := sid(r) if sessid == "" { sessid = new_session_id(w) } s := load_template("page_head.html") s = strings.Replace(s, "{PAGE_TITLE}", common.CFG.WebUI.Title, 1) s = strings.Replace(s, "/*_SESSION_ID_*/", "var sid = '"+sessid+"'", 1) s = strings.Replace(s, "/*_AVERAGE_FEE_SPB_*/", fmt.Sprint("var avg_fee_spb = ", common.GetAverageFee()), 1) if r.URL.Path != "/" { s = strings.Replace(s, "{HELPURL}", "help#"+r.URL.Path[1:], 1) } else { s = strings.Replace(s, "{HELPURL}", "help", 1) } s = strings.Replace(s, "{VERSION}", gocoin.Version, 1) if common.Testnet { s = strings.Replace(s, "{TESTNET}", " Testnet ", 1) } else { s = strings.Replace(s, "{TESTNET}", "", 1) } for i := range webuimenu { var x string if i > 0 && i < len(webuimenu)-1 { x = " | " } x += "<a " if r.URL.Path == webuimenu[i][0] { x += "class=\"menuat\" " } x += "href=\"" + webuimenu[i][0] + "\">" + webuimenu[i][1] + "</a>" if i == len(webuimenu)-1 { s = strings.Replace(s, "{MENU_LEFT}", "", 1) s = strings.Replace(s, "{MENU_RIGHT}", x, 1) } else { s = strings.Replace(s, "{MENU_LEFT}", x+"{MENU_LEFT}", 1) } } w.Write([]byte(s)) }
func json_system(w http.ResponseWriter, r *http.Request) { if !ipchecker(r) { return } var out struct { Blocks_cached int BlocksToGet int Known_peers int Node_uptime uint64 Net_block_qsize int Net_tx_qsize int Heap_size uint64 Heap_sysmem uint64 Qdb_extramem int64 Ecdsa_verify_cnt uint64 Average_block_size uint Average_fee float64 LastHeaderHeight uint32 } out.Blocks_cached = len(network.CachedBlocks) out.BlocksToGet = len(network.BlocksToGet) out.Known_peers = peersdb.PeerDB.Count() out.Node_uptime = uint64(time.Now().Sub(common.StartTime).Seconds()) out.Net_block_qsize = len(network.NetBlocks) out.Net_tx_qsize = len(network.NetTxs) out.Heap_size, out.Heap_sysmem = sys.MemUsed() out.Qdb_extramem = qdb.ExtraMemoryConsumed out.Ecdsa_verify_cnt = btc.EcdsaVerifyCnt out.Average_block_size = common.GetAverageBlockSize() out.Average_fee = common.GetAverageFee() network.MutexRcv.Lock() out.LastHeaderHeight = network.LastCommitedHeader.Height network.MutexRcv.Unlock() bx, er := json.Marshal(out) if er == nil { w.Header()["Content-Type"] = []string{"application/json"} w.Write(bx) } else { println(er.Error()) } }
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) }