diff --git a/les/metrics.go b/les/metrics.go index 5a8d4bbe0212..d356326b76ef 100644 --- a/les/metrics.go +++ b/les/metrics.go @@ -73,12 +73,9 @@ var ( serverConnectionGauge = metrics.NewRegisteredGauge("les/connection/server", nil) clientConnectionGauge = metrics.NewRegisteredGauge("les/connection/client", nil) - totalCapacityGauge = metrics.NewRegisteredGauge("les/server/totalCapacity", nil) - totalRechargeGauge = metrics.NewRegisteredGauge("les/server/totalRecharge", nil) - totalConnectedGauge = metrics.NewRegisteredGauge("les/server/totalConnected", nil) - blockProcessingTimer = metrics.NewRegisteredTimer("les/server/blockProcessingTime", nil) - capacityQueryZeroMeter = metrics.NewRegisteredMeter("les/server/capQueryZero", nil) - capacityQueryNonZeroMeter = metrics.NewRegisteredMeter("les/server/capQueryNonZero", nil) + totalCapacityGauge = metrics.NewRegisteredGauge("les/server/totalCapacity", nil) + totalRechargeGauge = metrics.NewRegisteredGauge("les/server/totalRecharge", nil) + blockProcessingTimer = metrics.NewRegisteredTimer("les/server/blockProcessingTime", nil) requestServedMeter = metrics.NewRegisteredMeter("les/server/req/avgServedTime", nil) requestServedTimer = metrics.NewRegisteredTimer("les/server/req/servedTime", nil) @@ -100,12 +97,8 @@ var ( sqServedGauge = metrics.NewRegisteredGauge("les/server/servingQueue/served", nil) sqQueuedGauge = metrics.NewRegisteredGauge("les/server/servingQueue/queued", nil) - clientConnectedMeter = metrics.NewRegisteredMeter("les/server/clientEvent/connected", nil) - clientActivatedMeter = metrics.NewRegisteredMeter("les/server/clientEvent/activated", nil) - clientDeactivatedMeter = metrics.NewRegisteredMeter("les/server/clientEvent/deactivated", nil) - clientDisconnectedMeter = metrics.NewRegisteredMeter("les/server/clientEvent/disconnected", nil) - clientFreezeMeter = metrics.NewRegisteredMeter("les/server/clientEvent/freeze", nil) - clientErrorMeter = metrics.NewRegisteredMeter("les/server/clientEvent/error", nil) + clientFreezeMeter = metrics.NewRegisteredMeter("les/server/clientEvent/freeze", nil) + clientErrorMeter = metrics.NewRegisteredMeter("les/server/clientEvent/error", nil) requestRTT = metrics.NewRegisteredTimer("les/client/req/rtt", nil) requestSendDelay = metrics.NewRegisteredTimer("les/client/req/sendDelay", nil) diff --git a/les/server.go b/les/server.go index b170521170cf..d44b1b57d414 100644 --- a/les/server.go +++ b/les/server.go @@ -138,8 +138,6 @@ func NewLesServer(node *node.Node, e ethBackend, config *ethconfig.Config) (*Les } srv.fcManager.SetCapacityLimits(srv.minCapacity, srv.maxCapacity, srv.minCapacity*2) srv.clientPool = vfs.NewClientPool(lesDb, srv.minCapacity, defaultConnectedBias, mclock.System{}, issync) - srv.clientPool.AddMetrics(totalConnectedGauge, clientConnectedMeter, clientDisconnectedMeter, - clientActivatedMeter, clientDeactivatedMeter, capacityQueryZeroMeter, capacityQueryNonZeroMeter) srv.clientPool.Start() srv.clientPool.SetDefaultFactors(defaultPosFactors, defaultNegFactors) srv.vfluxServer.Register(srv.clientPool, "les", "Ethereum light client service") diff --git a/les/vflux/server/clientpool.go b/les/vflux/server/clientpool.go index a2adeef66cb5..2e5fdd0ee796 100644 --- a/les/vflux/server/clientpool.go +++ b/les/vflux/server/clientpool.go @@ -26,7 +26,6 @@ import ( "github.com/ethereum/go-ethereum/les/utils" "github.com/ethereum/go-ethereum/les/vflux" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/nodestate" "github.com/ethereum/go-ethereum/rlp" @@ -71,8 +70,6 @@ type ClientPool struct { minCap uint64 // the minimal capacity value allowed for any client capReqNode *enode.Node // node that is requesting capacity change; only used inside NSM operation - - capacityQueryZeroMeter, capacityQueryNonZeroMeter metrics.Meter } // clientPeer represents a peer in the client pool. None of the callbacks should block. @@ -138,14 +135,8 @@ func NewClientPool(balanceDb ethdb.KeyValueStore, minCap uint64, connectedBias t c.UpdateCapacity(newCap, node == cp.capReqNode) } }) - return cp -} - -// AddMetrics adds metrics to the client pool. Should be called before Start(). -func (cp *ClientPool) AddMetrics(totalConnectedGauge metrics.Gauge, - clientConnectedMeter, clientDisconnectedMeter, clientActivatedMeter, clientDeactivatedMeter, - capacityQueryZeroMeter, capacityQueryNonZeroMeter metrics.Meter) { + // add metrics cp.ns.SubscribeState(nodestate.MergeFlags(cp.setup.activeFlag, cp.setup.inactiveFlag), func(node *enode.Node, oldState, newState nodestate.Flags) { if oldState.IsEmpty() && !newState.IsEmpty() { clientConnectedMeter.Mark(1) @@ -162,8 +153,7 @@ func (cp *ClientPool) AddMetrics(totalConnectedGauge metrics.Gauge, _, connected := cp.Active() totalConnectedGauge.Update(int64(connected)) }) - cp.capacityQueryZeroMeter = capacityQueryZeroMeter - cp.capacityQueryNonZeroMeter = capacityQueryNonZeroMeter + return cp } // Start starts the client pool. Should be called before Register/Unregister. @@ -295,9 +285,7 @@ func (cp *ClientPool) serveCapQuery(id enode.ID, freeID string, data []byte) []b } result := make(vflux.CapacityQueryReply, len(req.AddTokens)) if !cp.synced() { - if cp.capacityQueryZeroMeter != nil { - cp.capacityQueryZeroMeter.Mark(1) - } + capacityQueryZeroMeter.Mark(1) reply, _ := rlp.EncodeToBytes(&result) return reply } @@ -328,13 +316,9 @@ func (cp *ClientPool) serveCapQuery(id enode.ID, freeID string, data []byte) []b }) // add first result to metrics (don't care about priority client multi-queries yet) if result[0] == 0 { - if cp.capacityQueryZeroMeter != nil { - cp.capacityQueryZeroMeter.Mark(1) - } + capacityQueryZeroMeter.Mark(1) } else { - if cp.capacityQueryNonZeroMeter != nil { - cp.capacityQueryNonZeroMeter.Mark(1) - } + capacityQueryNonZeroMeter.Mark(1) } reply, _ := rlp.EncodeToBytes(&result) return reply diff --git a/les/vflux/server/metrics.go b/les/vflux/server/metrics.go new file mode 100644 index 000000000000..307b8347afe6 --- /dev/null +++ b/les/vflux/server/metrics.go @@ -0,0 +1,33 @@ +// Copyright 2021 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package server + +import ( + "github.com/ethereum/go-ethereum/metrics" +) + +var ( + totalConnectedGauge = metrics.NewRegisteredGauge("vflux/server/totalConnected", nil) + + clientConnectedMeter = metrics.NewRegisteredMeter("vflux/server/clientEvent/connected", nil) + clientActivatedMeter = metrics.NewRegisteredMeter("vflux/server/clientEvent/activated", nil) + clientDeactivatedMeter = metrics.NewRegisteredMeter("vflux/server/clientEvent/deactivated", nil) + clientDisconnectedMeter = metrics.NewRegisteredMeter("vflux/server/clientEvent/disconnected", nil) + + capacityQueryZeroMeter = metrics.NewRegisteredMeter("vflux/server/capQueryZero", nil) + capacityQueryNonZeroMeter = metrics.NewRegisteredMeter("vflux/server/capQueryNonZero", nil) +)