@ -0,0 +1,192 @@ |
|||
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() |
|||
} |
@ -1,44 +0,0 @@ |
|||
package synchronizer |
|||
|
|||
import "github.com/prometheus/client_golang/prometheus" |
|||
|
|||
var ( |
|||
metricReorgsCount = prometheus.NewCounter( |
|||
prometheus.CounterOpts{ |
|||
Name: "sync_reorgs", |
|||
Help: "", |
|||
}, |
|||
) |
|||
metricSyncedLastBlockNum = prometheus.NewGauge( |
|||
prometheus.GaugeOpts{ |
|||
Name: "sync_synced_last_block_num", |
|||
Help: "", |
|||
}, |
|||
) |
|||
metricEthLastBlockNum = prometheus.NewGauge( |
|||
prometheus.GaugeOpts{ |
|||
Name: "sync_eth_last_block_num", |
|||
Help: "", |
|||
}, |
|||
) |
|||
metricSyncedLastBatchNum = prometheus.NewGauge( |
|||
prometheus.GaugeOpts{ |
|||
Name: "sync_synced_last_batch_num", |
|||
Help: "", |
|||
}, |
|||
) |
|||
metricEthLastBatchNum = prometheus.NewGauge( |
|||
prometheus.GaugeOpts{ |
|||
Name: "sync_eth_last_batch_num", |
|||
Help: "", |
|||
}, |
|||
) |
|||
) |
|||
|
|||
func init() { |
|||
prometheus.MustRegister(metricReorgsCount) |
|||
prometheus.MustRegister(metricSyncedLastBlockNum) |
|||
prometheus.MustRegister(metricEthLastBlockNum) |
|||
prometheus.MustRegister(metricSyncedLastBatchNum) |
|||
prometheus.MustRegister(metricEthLastBatchNum) |
|||
} |
@ -1,53 +0,0 @@ |
|||
package txselector |
|||
|
|||
import "github.com/prometheus/client_golang/prometheus" |
|||
|
|||
var ( |
|||
metricGetL2TxSelection = prometheus.NewCounter( |
|||
prometheus.CounterOpts{ |
|||
Name: "txsel_get_l2_txselecton_total", |
|||
Help: "", |
|||
}, |
|||
) |
|||
metricGetL1L2TxSelection = prometheus.NewCounter( |
|||
prometheus.CounterOpts{ |
|||
Name: "txsel_get_l1_l2_txselecton_total", |
|||
Help: "", |
|||
}, |
|||
) |
|||
|
|||
metricSelectedL1CoordinatorTxs = prometheus.NewGauge( |
|||
prometheus.GaugeOpts{ |
|||
Name: "txsel_selected_l1_coordinator_txs", |
|||
Help: "", |
|||
}, |
|||
) |
|||
metricSelectedL1UserTxs = prometheus.NewGauge( |
|||
prometheus.GaugeOpts{ |
|||
Name: "txsel_selected_l1_user_txs", |
|||
Help: "", |
|||
}, |
|||
) |
|||
metricSelectedL2Txs = prometheus.NewGauge( |
|||
prometheus.GaugeOpts{ |
|||
Name: "txsel_selected_l2_txs", |
|||
Help: "", |
|||
}, |
|||
) |
|||
metricDiscardedL2Txs = prometheus.NewGauge( |
|||
prometheus.GaugeOpts{ |
|||
Name: "txsel_discarded_l2_txs", |
|||
Help: "", |
|||
}, |
|||
) |
|||
) |
|||
|
|||
func init() { |
|||
prometheus.MustRegister(metricGetL2TxSelection) |
|||
prometheus.MustRegister(metricGetL1L2TxSelection) |
|||
|
|||
prometheus.MustRegister(metricSelectedL1CoordinatorTxs) |
|||
prometheus.MustRegister(metricSelectedL1UserTxs) |
|||
prometheus.MustRegister(metricSelectedL2Txs) |
|||
prometheus.MustRegister(metricDiscardedL2Txs) |
|||
} |