|
|
package metric
import ( "time"
"github.com/hermeznetwork/hermez-node/log" "github.com/prometheus/client_golang/prometheus" )
type ( // Metric represents the metric type
Metric string )
const ( namespaceError = "error" namespaceSync = "synchronizer" namespaceTxSelector = "txselector" namespaceAPI = "api" )
var ( // Errors errors count metric.
Errors = prometheus.NewCounterVec( prometheus.CounterOpts{ Namespace: namespaceError, Name: "errors", Help: "", }, []string{"error"})
// WaitServerProof duration time to get the calculated
// proof from the server.
WaitServerProof = prometheus.NewHistogramVec( prometheus.HistogramOpts{ Namespace: namespaceSync, Name: "wait_server_proof", Help: "", }, []string{"batch_number", "pipeline_number"})
// Reorgs block reorg count
Reorgs = prometheus.NewCounter( prometheus.CounterOpts{ Namespace: namespaceSync, Name: "reorgs", Help: "", })
// LastBlockNum last block synced
LastBlockNum = prometheus.NewGauge( prometheus.GaugeOpts{ Namespace: namespaceSync, Name: "synced_last_block_num", Help: "", })
// EthLastBlockNum last eth block synced
EthLastBlockNum = prometheus.NewGauge( prometheus.GaugeOpts{ Namespace: namespaceSync, Name: "eth_last_block_num", Help: "", })
// LastBatchNum last batch synced
LastBatchNum = prometheus.NewGauge( prometheus.GaugeOpts{ Namespace: namespaceSync, Name: "synced_last_batch_num", Help: "", })
// EthLastBatchNum last eth batch synced
EthLastBatchNum = prometheus.NewGauge( prometheus.GaugeOpts{ Namespace: namespaceSync, Name: "eth_last_batch_num", Help: "", })
// GetL2TxSelection L2 tx selection count
GetL2TxSelection = prometheus.NewCounter( prometheus.CounterOpts{ Namespace: namespaceTxSelector, Name: "get_l2_txselection_total", Help: "", })
// GetL1L2TxSelection L1L2 tx selection count
GetL1L2TxSelection = prometheus.NewCounter( prometheus.CounterOpts{ Namespace: namespaceTxSelector, Name: "get_l1_l2_txselection_total", Help: "", })
// SelectedL1CoordinatorTxs selected L1 coordinator tx count
SelectedL1CoordinatorTxs = prometheus.NewGauge( prometheus.GaugeOpts{ Namespace: namespaceTxSelector, Name: "selected_l1_coordinator_txs", Help: "", })
// SelectedL1UserTxs selected L1 user tx count
SelectedL1UserTxs = prometheus.NewGauge( prometheus.GaugeOpts{ Namespace: namespaceTxSelector, Name: "selected_l1_user_txs", Help: "", })
// SelectedL2Txs selected L2 tx count
SelectedL2Txs = prometheus.NewGauge( prometheus.GaugeOpts{ Namespace: namespaceTxSelector, Name: "selected_l2_txs", Help: "", })
// DiscardedL2Txs discarded L2 tx count
DiscardedL2Txs = prometheus.NewGauge( prometheus.GaugeOpts{ Namespace: namespaceTxSelector, Name: "discarded_l2_txs", Help: "", }) )
func init() { if err := registerCollectors(); err != nil { log.Error(err) } } func registerCollectors() error { if err := registerCollector(Errors); err != nil { return err } if err := registerCollector(WaitServerProof); err != nil { return err } if err := registerCollector(Reorgs); err != nil { return err } if err := registerCollector(LastBlockNum); err != nil { return err } if err := registerCollector(LastBatchNum); err != nil { return err } if err := registerCollector(EthLastBlockNum); err != nil { return err } if err := registerCollector(EthLastBatchNum); err != nil { return err } if err := registerCollector(GetL2TxSelection); err != nil { return err } if err := registerCollector(GetL1L2TxSelection); err != nil { return err } if err := registerCollector(SelectedL1CoordinatorTxs); err != nil { return err } if err := registerCollector(SelectedL1UserTxs); err != nil { return err } return registerCollector(DiscardedL2Txs) }
func registerCollector(collector prometheus.Collector) error { err := prometheus.Register(collector) if err != nil { if _, ok := err.(prometheus.AlreadyRegisteredError); !ok { return err } } return nil }
// MeasureDuration measure the method execution duration
// and save it into a histogram metric
func MeasureDuration(histogram *prometheus.HistogramVec, start time.Time, lvs ...string) { duration := time.Since(start) histogram.WithLabelValues(lvs...).Observe(float64(duration.Milliseconds())) }
// CollectError collect the error message and increment
// the error count
func CollectError(err error) { Errors.With(map[string]string{"error": err.Error()}).Inc() }
|