Add metrics about the powchain service (#1509)

* Add a counter for received deposits

* Add a few more metrics

* gauge
This commit is contained in:
Preston Van Loon 2019-02-06 10:10:49 -05:00 committed by GitHub
parent 2441266898
commit f7aa5c6c8d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 0 deletions

View File

@ -17,6 +17,8 @@ go_library(
"@com_github_ethereum_go_ethereum//accounts/abi/bind:go_default_library",
"@com_github_ethereum_go_ethereum//common:go_default_library",
"@com_github_ethereum_go_ethereum//core/types:go_default_library",
"@com_github_prometheus_client_golang//prometheus:go_default_library",
"@com_github_prometheus_client_golang//prometheus/promauto:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
],
)

View File

@ -14,6 +14,8 @@ import (
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
gethTypes "github.com/ethereum/go-ethereum/core/types"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
"github.com/prysmaticlabs/prysm/beacon-chain/core/blocks"
"github.com/prysmaticlabs/prysm/beacon-chain/db"
contracts "github.com/prysmaticlabs/prysm/contracts/deposit-contract"
@ -26,6 +28,25 @@ import (
var log = logrus.WithField("prefix", "powchain")
var (
validDepositsCount = promauto.NewCounter(prometheus.CounterOpts{
Name: "powchain_valid_deposits_received",
Help: "The number of valid deposits received in the deposit contract",
})
totalDepositsCount = promauto.NewCounter(prometheus.CounterOpts{
Name: "powchain_deposit_logs",
Help: "The total number of deposits received in the deposit contract",
})
chainStartCount = promauto.NewCounter(prometheus.CounterOpts{
Name: "powchain_chainstart_logs",
Help: "The number of chainstart logs received from the deposit contract",
})
blockNumberGauge = promauto.NewGauge(prometheus.GaugeOpts{
Name: "powchain_block_number",
Help: "The current block number in the proof-of-work chain",
})
)
// Reader defines a struct that can fetch latest header events from a web3 endpoint.
type Reader interface {
SubscribeNewHead(ctx context.Context, ch chan<- *gethTypes.Header) (ethereum.Subscription, error)
@ -225,6 +246,7 @@ func (w *Web3Service) ProcessLog(VRClog gethTypes.Log) {
// the ETH1.0 chain by trying to ascertain which participant deposited
// in the contract.
func (w *Web3Service) ProcessDepositLog(VRClog gethTypes.Log) {
totalDepositsCount.Inc()
merkleRoot, depositData, MerkleTreeIndex, err := contracts.UnpackDepositLogData(VRClog.Data)
if err != nil {
log.Errorf("Could not unpack log %v", err)
@ -252,11 +274,14 @@ func (w *Web3Service) ProcessDepositLog(VRClog gethTypes.Log) {
"publicKey": fmt.Sprintf("%#x", depositInput.Pubkey),
"merkleTreeIndex": index,
}).Info("Validator registered in deposit contract")
validDepositsCount.Inc()
}
// ProcessChainStartLog processes the log which had been received from
// the ETH1.0 chain by trying to determine when to start the beacon chain.
func (w *Web3Service) ProcessChainStartLog(VRClog gethTypes.Log) {
chainStartCount.Inc()
receiptRoot, timestampData, err := contracts.UnpackChainStartLogData(VRClog.Data)
if err != nil {
log.Errorf("Unable to unpack ChainStart log data %v", err)
@ -321,6 +346,7 @@ func (w *Web3Service) run(done <-chan struct{}) {
log.Debug("Unsubscribed to log events, exiting goroutine")
return
case header := <-w.headerChan:
blockNumberGauge.Set(float64(header.Number.Int64()))
w.blockNumber = header.Number
w.blockHash = header.Hash()
log.WithFields(logrus.Fields{