github.com/tmoore22/go-ethereum@v1.10.22-0.20220814113424-76f4d8bc4994/rpc/metrics.go (about)

     1  // Copyright 2020 The go-ethereum Authors
     2  // This file is part of the go-ethereum library.
     3  //
     4  // The go-ethereum library is free software: you can redistribute it and/or modify
     5  // it under the terms of the GNU Lesser General Public License as published by
     6  // the Free Software Foundation, either version 3 of the License, or
     7  // (at your option) any later version.
     8  //
     9  // The go-ethereum library is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    12  // GNU Lesser General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU Lesser General Public License
    15  // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
    16  
    17  package rpc
    18  
    19  import (
    20  	"fmt"
    21  	"time"
    22  
    23  	"github.com/ethereum/go-ethereum/metrics"
    24  )
    25  
    26  var (
    27  	rpcRequestGauge        = metrics.NewRegisteredGauge("rpc/requests", nil)
    28  	successfulRequestGauge = metrics.NewRegisteredGauge("rpc/success", nil)
    29  	failedRequestGauge     = metrics.NewRegisteredGauge("rpc/failure", nil)
    30  
    31  	// serveTimeHistName is the prefix of the per-request serving time histograms.
    32  	serveTimeHistName = "rpc/duration"
    33  
    34  	rpcServingTimer = metrics.NewRegisteredTimer("rpc/duration/all", nil)
    35  )
    36  
    37  // updateServeTimeHistogram tracks the serving time of a remote RPC call.
    38  func updateServeTimeHistogram(method string, success bool, elapsed time.Duration) {
    39  	note := "success"
    40  	if !success {
    41  		note = "failure"
    42  	}
    43  	h := fmt.Sprintf("%s/%s/%s", serveTimeHistName, method, note)
    44  	sampler := func() metrics.Sample {
    45  		return metrics.ResettingSample(
    46  			metrics.NewExpDecaySample(1028, 0.015),
    47  		)
    48  	}
    49  	metrics.GetOrRegisterHistogramLazy(h, nil, sampler).Update(elapsed.Microseconds())
    50  }