Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion op-batcher/batcher/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ func NewBatchSubmitterFromCLIConfig(cfg CLIConfig, l log.Logger, m metrics.Metri
if err != nil {
return nil, err
}
txManager := txmgr.NewSimpleTxManager("batcher", l, txManagerConfig)
txManager := txmgr.NewSimpleTxManager("batcher", l, m, txManagerConfig)

batcherCfg := Config{
L1Client: l1Client,
Expand Down
6 changes: 6 additions & 0 deletions op-batcher/metrics/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/ethereum-optimism/optimism/op-node/eth"
"github.com/ethereum-optimism/optimism/op-node/rollup/derive"
opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics"
txmetrics "github.com/ethereum-optimism/optimism/op-service/txmgr/metrics"
)

const Namespace = "op_batcher"
Expand All @@ -22,6 +23,9 @@ type Metricer interface {
// Records all L1 and L2 block events
opmetrics.RefMetricer

// Record Tx metrics
txmetrics.TxMetricer

RecordLatestL1Block(l1ref eth.L1BlockRef)
RecordL2BlocksLoaded(l2ref eth.L2BlockRef)
RecordChannelOpened(id derive.ChannelID, numPendingBlocks int)
Expand All @@ -43,6 +47,7 @@ type Metrics struct {
factory opmetrics.Factory

opmetrics.RefMetrics
txmetrics.TxMetrics

Info prometheus.GaugeVec
Up prometheus.Gauge
Expand Down Expand Up @@ -80,6 +85,7 @@ func NewMetrics(procName string) *Metrics {
factory: factory,

RefMetrics: opmetrics.MakeRefMetrics(ns, factory),
TxMetrics: txmetrics.MakeTxMetrics(ns, factory),

Info: *factory.NewGaugeVec(prometheus.GaugeOpts{
Namespace: ns,
Expand Down
6 changes: 5 additions & 1 deletion op-batcher/metrics/noop.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,13 @@ import (
"github.com/ethereum-optimism/optimism/op-node/eth"
"github.com/ethereum-optimism/optimism/op-node/rollup/derive"
opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics"
txmetrics "github.com/ethereum-optimism/optimism/op-service/txmgr/metrics"
)

type noopMetrics struct{ opmetrics.NoopRefMetrics }
type noopMetrics struct {
opmetrics.NoopRefMetrics
txmetrics.NoopTxMetrics
}

var NoopMetrics Metricer = new(noopMetrics)

Expand Down
6 changes: 6 additions & 0 deletions op-proposer/metrics/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/prometheus/client_golang/prometheus"

opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics"
txmetrics "github.com/ethereum-optimism/optimism/op-service/txmgr/metrics"
)

const Namespace = "op_proposer"
Expand All @@ -22,6 +23,9 @@ type Metricer interface {
// Records all L1 and L2 block events
opmetrics.RefMetricer

// Record Tx metrics
txmetrics.TxMetricer

RecordL2BlocksProposed(l2ref eth.L2BlockRef)
}

Expand All @@ -31,6 +35,7 @@ type Metrics struct {
factory opmetrics.Factory

opmetrics.RefMetrics
txmetrics.TxMetrics

Info prometheus.GaugeVec
Up prometheus.Gauge
Expand All @@ -53,6 +58,7 @@ func NewMetrics(procName string) *Metrics {
factory: factory,

RefMetrics: opmetrics.MakeRefMetrics(ns, factory),
TxMetrics: txmetrics.MakeTxMetrics(ns, factory),

Info: *factory.NewGaugeVec(prometheus.GaugeOpts{
Namespace: ns,
Expand Down
6 changes: 5 additions & 1 deletion op-proposer/metrics/noop.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,13 @@ package metrics
import (
"github.com/ethereum-optimism/optimism/op-node/eth"
opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics"
txmetrics "github.com/ethereum-optimism/optimism/op-service/txmgr/metrics"
)

type noopMetrics struct{ opmetrics.NoopRefMetrics }
type noopMetrics struct {
opmetrics.NoopRefMetrics
txmetrics.NoopTxMetrics
}

var NoopMetrics Metricer = new(noopMetrics)

Expand Down
8 changes: 4 additions & 4 deletions op-proposer/proposer/l2_output_submitter.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ func Main(version string, cliCtx *cli.Context) error {
m := metrics.NewMetrics("default")
l.Info("Initializing L2 Output Submitter")

proposerConfig, err := NewL2OutputSubmitterConfigFromCLIConfig(cfg, l)
proposerConfig, err := NewL2OutputSubmitterConfigFromCLIConfig(cfg, l, m)
if err != nil {
l.Error("Unable to create the L2 Output Submitter", "error", err)
return err
Expand Down Expand Up @@ -138,15 +138,15 @@ type L2OutputSubmitter struct {

// NewL2OutputSubmitterFromCLIConfig creates a new L2 Output Submitter given the CLI Config
func NewL2OutputSubmitterFromCLIConfig(cfg CLIConfig, l log.Logger, m metrics.Metricer) (*L2OutputSubmitter, error) {
proposerConfig, err := NewL2OutputSubmitterConfigFromCLIConfig(cfg, l)
proposerConfig, err := NewL2OutputSubmitterConfigFromCLIConfig(cfg, l, m)
if err != nil {
return nil, err
}
return NewL2OutputSubmitter(*proposerConfig, l, m)
}

// NewL2OutputSubmitterConfigFromCLIConfig creates the proposer config from the CLI config.
func NewL2OutputSubmitterConfigFromCLIConfig(cfg CLIConfig, l log.Logger) (*Config, error) {
func NewL2OutputSubmitterConfigFromCLIConfig(cfg CLIConfig, l log.Logger, m metrics.Metricer) (*Config, error) {
l2ooAddress, err := parseAddress(cfg.L2OOAddress)
if err != nil {
return nil, err
Expand All @@ -156,7 +156,7 @@ func NewL2OutputSubmitterConfigFromCLIConfig(cfg CLIConfig, l log.Logger) (*Conf
if err != nil {
return nil, err
}
txManager := txmgr.NewSimpleTxManager("proposer", l, txManagerConfig)
txManager := txmgr.NewSimpleTxManager("proposer", l, m, txManagerConfig)

// Connect to L1 and L2 providers. Perform these last since they are the most expensive.
ctx := context.Background()
Expand Down
7 changes: 7 additions & 0 deletions op-service/txmgr/metrics/noop.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package metrics

import "github.com/ethereum/go-ethereum/core/types"

type NoopTxMetrics struct{}

func (*NoopTxMetrics) RecordL1GasFee(*types.Receipt) {}
34 changes: 34 additions & 0 deletions op-service/txmgr/metrics/tx_metrics.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package metrics

import (
"github.com/ethereum-optimism/optimism/op-service/metrics"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/params"

"github.com/prometheus/client_golang/prometheus"
)

type TxMetricer interface {
RecordL1GasFee(receipt *types.Receipt)
}

type TxMetrics struct {
TxL1GasFee prometheus.Gauge
}

var _ TxMetricer = (*TxMetrics)(nil)

func MakeTxMetrics(ns string, factory metrics.Factory) TxMetrics {
return TxMetrics{
TxL1GasFee: factory.NewGauge(prometheus.GaugeOpts{
Namespace: ns,
Name: "tx_fee_gwei",
Help: "L1 gas fee for transactions in GWEI",
Subsystem: "txmgr",
}),
}
}

func (t *TxMetrics) RecordL1GasFee(receipt *types.Receipt) {
t.TxL1GasFee.Set(float64(receipt.EffectiveGasPrice.Uint64() * receipt.GasUsed / params.GWei))
}
8 changes: 7 additions & 1 deletion op-service/txmgr/txmgr.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"errors"
"fmt"

"math/big"
"strings"
"sync"
Expand All @@ -15,6 +16,8 @@ import (
"github.com/ethereum/go-ethereum/core/txpool"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/log"

"github.com/ethereum-optimism/optimism/op-service/txmgr/metrics"
)

// Geth defaults the priceBump to 10
Expand Down Expand Up @@ -80,10 +83,11 @@ type SimpleTxManager struct {

backend ETHBackend
l log.Logger
metr metrics.TxMetricer
}

// NewSimpleTxManager initializes a new SimpleTxManager with the passed Config.
func NewSimpleTxManager(name string, l log.Logger, cfg Config) *SimpleTxManager {
func NewSimpleTxManager(name string, l log.Logger, m metrics.TxMetricer, cfg Config) *SimpleTxManager {
if cfg.NumConfirmations == 0 {
panic("txmgr: NumConfirmations cannot be zero")
}
Expand All @@ -97,6 +101,7 @@ func NewSimpleTxManager(name string, l log.Logger, cfg Config) *SimpleTxManager
cfg: cfg,
backend: cfg.Backend,
l: l.New("service", name),
metr: m,
}
}

Expand Down Expand Up @@ -281,6 +286,7 @@ func (m *SimpleTxManager) publishAndWaitForTx(ctx context.Context, tx *types.Tra
}
select {
case receiptChan <- receipt:
m.metr.RecordL1GasFee(receipt)
default:
}
}
Expand Down
4 changes: 3 additions & 1 deletion op-service/txmgr/txmgr_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import (
"github.com/stretchr/testify/require"

"github.com/ethereum-optimism/optimism/op-node/testlog"
"github.com/ethereum-optimism/optimism/op-service/txmgr/metrics"

"github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core"
Expand Down Expand Up @@ -39,7 +41,7 @@ func newTestHarnessWithConfig(t *testing.T, cfg Config) *testHarness {
g := newGasPricer(3)
backend := newMockBackend(g)
cfg.Backend = backend
mgr := NewSimpleTxManager("TEST", testlog.Logger(t, log.LvlCrit), cfg)
mgr := NewSimpleTxManager("TEST", testlog.Logger(t, log.LvlCrit), &metrics.NoopTxMetrics{}, cfg)

return &testHarness{
cfg: cfg,
Expand Down