From 919248ee12a1c56fecdc701c458ca82ab6de762c Mon Sep 17 00:00:00 2001 From: Sammy Libre Date: Mon, 27 Mar 2017 03:54:04 +0500 Subject: [PATCH] Add blocks stats --- go-pool/stratum/api.go | 28 +++++++++++++++++-- go-pool/stratum/miner.go | 2 +- go-pool/stratum/stratum.go | 10 +++++-- www/index.html | 45 ++++++++++++++++++++++++++++++ www/script.js | 57 +++++++++++++++++++++++++++++++------- www/style.css | 4 +++ 6 files changed, 131 insertions(+), 15 deletions(-) diff --git a/go-pool/stratum/api.go b/go-pool/stratum/api.go index e2e01c9..4fc8640 100644 --- a/go-pool/stratum/api.go +++ b/go-pool/stratum/api.go @@ -36,6 +36,7 @@ func (s *StratumServer) StatsIndex(w http.ResponseWriter, r *http.Request) { stats["upstreams"] = upstreams stats["current"] = convertUpstream(s.rpc()) stats["luck"] = s.getLuckStats() + stats["blocks"] = s.getBlocksStats() if t := s.currentBlockTemplate(); t != nil { stats["height"] = t.height @@ -115,11 +116,11 @@ func (s *StratumServer) getLuckStats() map[string]interface{} { for k, v := range s.blockStats { if k >= now-int64(s.luckWindow) { blocksCount++ - variance += v + variance += v.variance } if k >= now-int64(s.luckLargeWindow) { totalBlocksCount++ - totalVariance += v + totalVariance += v.variance } else { delete(s.blockStats, k) } @@ -139,3 +140,26 @@ func (s *StratumServer) getLuckStats() map[string]interface{} { result["largeWindow"] = s.config.LargeLuckWindow return result } + +func (s *StratumServer) getBlocksStats() []interface{} { + now := util.MakeTimestamp() + var result []interface{} + + s.blocksMu.Lock() + defer s.blocksMu.Unlock() + + for k, v := range s.blockStats { + if k >= now-int64(s.luckLargeWindow) { + block := map[string]interface{}{ + "height": v.height, + "hash": v.hash, + "variance": v.variance, + "timestamp": k, + } + result = append(result, block) + } else { + delete(s.blockStats, k) + } + } + return result +} diff --git a/go-pool/stratum/miner.go b/go-pool/stratum/miner.go index c707b9b..c6d1d34 100644 --- a/go-pool/stratum/miner.go +++ b/go-pool/stratum/miner.go @@ -183,7 +183,7 @@ func (m *Miner) processShare(s *StratumServer, cs *Session, job *Job, t *BlockTe roundShares := atomic.SwapInt64(&s.roundShares, 0) ratio := float64(roundShares) / float64(t.difficulty) s.blocksMu.Lock() - s.blockStats[now] = ratio + s.blockStats[now] = blockEntry{height: t.height, hash: blockFastHash, variance: ratio} s.blocksMu.Unlock() atomic.AddUint64(&m.accepts, 1) atomic.AddUint64(&r.Accepts, 1) diff --git a/go-pool/stratum/stratum.go b/go-pool/stratum/stratum.go index f91768c..851e92f 100644 --- a/go-pool/stratum/stratum.go +++ b/go-pool/stratum/stratum.go @@ -26,7 +26,7 @@ type StratumServer struct { timeout time.Duration estimationWindow time.Duration blocksMu sync.RWMutex - blockStats map[int64]float64 + blockStats map[int64]blockEntry luckWindow int64 luckLargeWindow int64 roundShares int64 @@ -34,6 +34,12 @@ type StratumServer struct { sessions map[*Session]struct{} } +type blockEntry struct { + height int64 + hash string + variance float64 +} + type Endpoint struct { config *pool.Port instanceId []byte @@ -57,7 +63,7 @@ const ( ) func NewStratum(cfg *pool.Config) *StratumServer { - stratum := &StratumServer{config: cfg, blockStats: make(map[int64]float64)} + stratum := &StratumServer{config: cfg, blockStats: make(map[int64]blockEntry)} stratum.upstreams = make([]*rpc.RPCClient, len(cfg.Upstream)) for i, v := range cfg.Upstream { diff --git a/www/index.html b/www/index.html index ad48809..c8af618 100644 --- a/www/index.html +++ b/www/index.html @@ -146,9 +146,54 @@ +
+

MoneroProxy