Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
d2361852
Unverified
Commit
d2361852
authored
Mar 31, 2023
by
mergify[bot]
Committed by
GitHub
Mar 31, 2023
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #5295 from shrimalmadhur/madhur/txmgr-metrics
op-service/txmgr : add tx manager metrics
parents
fcff9ae0
6b287693
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
78 additions
and
9 deletions
+78
-9
driver.go
op-batcher/batcher/driver.go
+1
-1
metrics.go
op-batcher/metrics/metrics.go
+6
-0
noop.go
op-batcher/metrics/noop.go
+5
-1
metrics.go
op-proposer/metrics/metrics.go
+6
-0
noop.go
op-proposer/metrics/noop.go
+5
-1
l2_output_submitter.go
op-proposer/proposer/l2_output_submitter.go
+4
-4
noop.go
op-service/txmgr/metrics/noop.go
+7
-0
tx_metrics.go
op-service/txmgr/metrics/tx_metrics.go
+34
-0
txmgr.go
op-service/txmgr/txmgr.go
+7
-1
txmgr_test.go
op-service/txmgr/txmgr_test.go
+3
-1
No files found.
op-batcher/batcher/driver.go
View file @
d2361852
...
@@ -73,7 +73,7 @@ func NewBatchSubmitterFromCLIConfig(cfg CLIConfig, l log.Logger, m metrics.Metri
...
@@ -73,7 +73,7 @@ func NewBatchSubmitterFromCLIConfig(cfg CLIConfig, l log.Logger, m metrics.Metri
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
txManager
:=
txmgr
.
NewSimpleTxManager
(
"batcher"
,
l
,
txManagerConfig
)
txManager
:=
txmgr
.
NewSimpleTxManager
(
"batcher"
,
l
,
m
,
txManagerConfig
)
batcherCfg
:=
Config
{
batcherCfg
:=
Config
{
L1Client
:
l1Client
,
L1Client
:
l1Client
,
...
...
op-batcher/metrics/metrics.go
View file @
d2361852
...
@@ -11,6 +11,7 @@ import (
...
@@ -11,6 +11,7 @@ import (
"github.com/ethereum-optimism/optimism/op-node/eth"
"github.com/ethereum-optimism/optimism/op-node/eth"
"github.com/ethereum-optimism/optimism/op-node/rollup/derive"
"github.com/ethereum-optimism/optimism/op-node/rollup/derive"
opmetrics
"github.com/ethereum-optimism/optimism/op-service/metrics"
opmetrics
"github.com/ethereum-optimism/optimism/op-service/metrics"
txmetrics
"github.com/ethereum-optimism/optimism/op-service/txmgr/metrics"
)
)
const
Namespace
=
"op_batcher"
const
Namespace
=
"op_batcher"
...
@@ -22,6 +23,9 @@ type Metricer interface {
...
@@ -22,6 +23,9 @@ type Metricer interface {
// Records all L1 and L2 block events
// Records all L1 and L2 block events
opmetrics
.
RefMetricer
opmetrics
.
RefMetricer
// Record Tx metrics
txmetrics
.
TxMetricer
RecordLatestL1Block
(
l1ref
eth
.
L1BlockRef
)
RecordLatestL1Block
(
l1ref
eth
.
L1BlockRef
)
RecordL2BlocksLoaded
(
l2ref
eth
.
L2BlockRef
)
RecordL2BlocksLoaded
(
l2ref
eth
.
L2BlockRef
)
RecordChannelOpened
(
id
derive
.
ChannelID
,
numPendingBlocks
int
)
RecordChannelOpened
(
id
derive
.
ChannelID
,
numPendingBlocks
int
)
...
@@ -43,6 +47,7 @@ type Metrics struct {
...
@@ -43,6 +47,7 @@ type Metrics struct {
factory
opmetrics
.
Factory
factory
opmetrics
.
Factory
opmetrics
.
RefMetrics
opmetrics
.
RefMetrics
txmetrics
.
TxMetrics
Info
prometheus
.
GaugeVec
Info
prometheus
.
GaugeVec
Up
prometheus
.
Gauge
Up
prometheus
.
Gauge
...
@@ -80,6 +85,7 @@ func NewMetrics(procName string) *Metrics {
...
@@ -80,6 +85,7 @@ func NewMetrics(procName string) *Metrics {
factory
:
factory
,
factory
:
factory
,
RefMetrics
:
opmetrics
.
MakeRefMetrics
(
ns
,
factory
),
RefMetrics
:
opmetrics
.
MakeRefMetrics
(
ns
,
factory
),
TxMetrics
:
txmetrics
.
MakeTxMetrics
(
ns
,
factory
),
Info
:
*
factory
.
NewGaugeVec
(
prometheus
.
GaugeOpts
{
Info
:
*
factory
.
NewGaugeVec
(
prometheus
.
GaugeOpts
{
Namespace
:
ns
,
Namespace
:
ns
,
...
...
op-batcher/metrics/noop.go
View file @
d2361852
...
@@ -4,9 +4,13 @@ import (
...
@@ -4,9 +4,13 @@ import (
"github.com/ethereum-optimism/optimism/op-node/eth"
"github.com/ethereum-optimism/optimism/op-node/eth"
"github.com/ethereum-optimism/optimism/op-node/rollup/derive"
"github.com/ethereum-optimism/optimism/op-node/rollup/derive"
opmetrics
"github.com/ethereum-optimism/optimism/op-service/metrics"
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
)
var
NoopMetrics
Metricer
=
new
(
noopMetrics
)
...
...
op-proposer/metrics/metrics.go
View file @
d2361852
...
@@ -11,6 +11,7 @@ import (
...
@@ -11,6 +11,7 @@ import (
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus"
opmetrics
"github.com/ethereum-optimism/optimism/op-service/metrics"
opmetrics
"github.com/ethereum-optimism/optimism/op-service/metrics"
txmetrics
"github.com/ethereum-optimism/optimism/op-service/txmgr/metrics"
)
)
const
Namespace
=
"op_proposer"
const
Namespace
=
"op_proposer"
...
@@ -22,6 +23,9 @@ type Metricer interface {
...
@@ -22,6 +23,9 @@ type Metricer interface {
// Records all L1 and L2 block events
// Records all L1 and L2 block events
opmetrics
.
RefMetricer
opmetrics
.
RefMetricer
// Record Tx metrics
txmetrics
.
TxMetricer
RecordL2BlocksProposed
(
l2ref
eth
.
L2BlockRef
)
RecordL2BlocksProposed
(
l2ref
eth
.
L2BlockRef
)
}
}
...
@@ -31,6 +35,7 @@ type Metrics struct {
...
@@ -31,6 +35,7 @@ type Metrics struct {
factory
opmetrics
.
Factory
factory
opmetrics
.
Factory
opmetrics
.
RefMetrics
opmetrics
.
RefMetrics
txmetrics
.
TxMetrics
Info
prometheus
.
GaugeVec
Info
prometheus
.
GaugeVec
Up
prometheus
.
Gauge
Up
prometheus
.
Gauge
...
@@ -53,6 +58,7 @@ func NewMetrics(procName string) *Metrics {
...
@@ -53,6 +58,7 @@ func NewMetrics(procName string) *Metrics {
factory
:
factory
,
factory
:
factory
,
RefMetrics
:
opmetrics
.
MakeRefMetrics
(
ns
,
factory
),
RefMetrics
:
opmetrics
.
MakeRefMetrics
(
ns
,
factory
),
TxMetrics
:
txmetrics
.
MakeTxMetrics
(
ns
,
factory
),
Info
:
*
factory
.
NewGaugeVec
(
prometheus
.
GaugeOpts
{
Info
:
*
factory
.
NewGaugeVec
(
prometheus
.
GaugeOpts
{
Namespace
:
ns
,
Namespace
:
ns
,
...
...
op-proposer/metrics/noop.go
View file @
d2361852
...
@@ -3,9 +3,13 @@ package metrics
...
@@ -3,9 +3,13 @@ package metrics
import
(
import
(
"github.com/ethereum-optimism/optimism/op-node/eth"
"github.com/ethereum-optimism/optimism/op-node/eth"
opmetrics
"github.com/ethereum-optimism/optimism/op-service/metrics"
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
)
var
NoopMetrics
Metricer
=
new
(
noopMetrics
)
...
...
op-proposer/proposer/l2_output_submitter.go
View file @
d2361852
...
@@ -42,7 +42,7 @@ func Main(version string, cliCtx *cli.Context) error {
...
@@ -42,7 +42,7 @@ func Main(version string, cliCtx *cli.Context) error {
m
:=
metrics
.
NewMetrics
(
"default"
)
m
:=
metrics
.
NewMetrics
(
"default"
)
l
.
Info
(
"Initializing L2 Output Submitter"
)
l
.
Info
(
"Initializing L2 Output Submitter"
)
proposerConfig
,
err
:=
NewL2OutputSubmitterConfigFromCLIConfig
(
cfg
,
l
)
proposerConfig
,
err
:=
NewL2OutputSubmitterConfigFromCLIConfig
(
cfg
,
l
,
m
)
if
err
!=
nil
{
if
err
!=
nil
{
l
.
Error
(
"Unable to create the L2 Output Submitter"
,
"error"
,
err
)
l
.
Error
(
"Unable to create the L2 Output Submitter"
,
"error"
,
err
)
return
err
return
err
...
@@ -138,7 +138,7 @@ type L2OutputSubmitter struct {
...
@@ -138,7 +138,7 @@ type L2OutputSubmitter struct {
// NewL2OutputSubmitterFromCLIConfig creates a new L2 Output Submitter given the CLI Config
// NewL2OutputSubmitterFromCLIConfig creates a new L2 Output Submitter given the CLI Config
func
NewL2OutputSubmitterFromCLIConfig
(
cfg
CLIConfig
,
l
log
.
Logger
,
m
metrics
.
Metricer
)
(
*
L2OutputSubmitter
,
error
)
{
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
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
@@ -146,7 +146,7 @@ func NewL2OutputSubmitterFromCLIConfig(cfg CLIConfig, l log.Logger, m metrics.Me
...
@@ -146,7 +146,7 @@ func NewL2OutputSubmitterFromCLIConfig(cfg CLIConfig, l log.Logger, m metrics.Me
}
}
// NewL2OutputSubmitterConfigFromCLIConfig creates the proposer config from the CLI config.
// 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
)
l2ooAddress
,
err
:=
parseAddress
(
cfg
.
L2OOAddress
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
@@ -156,7 +156,7 @@ func NewL2OutputSubmitterConfigFromCLIConfig(cfg CLIConfig, l log.Logger) (*Conf
...
@@ -156,7 +156,7 @@ func NewL2OutputSubmitterConfigFromCLIConfig(cfg CLIConfig, l log.Logger) (*Conf
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
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.
// Connect to L1 and L2 providers. Perform these last since they are the most expensive.
ctx
:=
context
.
Background
()
ctx
:=
context
.
Background
()
...
...
op-service/txmgr/metrics/noop.go
0 → 100644
View file @
d2361852
package
metrics
import
"github.com/ethereum/go-ethereum/core/types"
type
NoopTxMetrics
struct
{}
func
(
*
NoopTxMetrics
)
RecordL1GasFee
(
*
types
.
Receipt
)
{}
op-service/txmgr/metrics/tx_metrics.go
0 → 100644
View file @
d2361852
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
))
}
op-service/txmgr/txmgr.go
View file @
d2361852
...
@@ -4,6 +4,7 @@ import (
...
@@ -4,6 +4,7 @@ import (
"context"
"context"
"errors"
"errors"
"fmt"
"fmt"
"math/big"
"math/big"
"strings"
"strings"
"sync"
"sync"
...
@@ -15,6 +16,8 @@ import (
...
@@ -15,6 +16,8 @@ import (
"github.com/ethereum/go-ethereum/core/txpool"
"github.com/ethereum/go-ethereum/core/txpool"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum-optimism/optimism/op-service/txmgr/metrics"
)
)
// Geth defaults the priceBump to 10
// Geth defaults the priceBump to 10
...
@@ -80,10 +83,11 @@ type SimpleTxManager struct {
...
@@ -80,10 +83,11 @@ type SimpleTxManager struct {
backend
ETHBackend
backend
ETHBackend
l
log
.
Logger
l
log
.
Logger
metr
metrics
.
TxMetricer
}
}
// NewSimpleTxManager initializes a new SimpleTxManager with the passed Config.
// 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
{
if
cfg
.
NumConfirmations
==
0
{
panic
(
"txmgr: NumConfirmations cannot be zero"
)
panic
(
"txmgr: NumConfirmations cannot be zero"
)
}
}
...
@@ -97,6 +101,7 @@ func NewSimpleTxManager(name string, l log.Logger, cfg Config) *SimpleTxManager
...
@@ -97,6 +101,7 @@ func NewSimpleTxManager(name string, l log.Logger, cfg Config) *SimpleTxManager
cfg
:
cfg
,
cfg
:
cfg
,
backend
:
cfg
.
Backend
,
backend
:
cfg
.
Backend
,
l
:
l
.
New
(
"service"
,
name
),
l
:
l
.
New
(
"service"
,
name
),
metr
:
m
,
}
}
}
}
...
@@ -281,6 +286,7 @@ func (m *SimpleTxManager) publishAndWaitForTx(ctx context.Context, tx *types.Tra
...
@@ -281,6 +286,7 @@ func (m *SimpleTxManager) publishAndWaitForTx(ctx context.Context, tx *types.Tra
}
}
select
{
select
{
case
receiptChan
<-
receipt
:
case
receiptChan
<-
receipt
:
m
.
metr
.
RecordL1GasFee
(
receipt
)
default
:
default
:
}
}
}
}
...
...
op-service/txmgr/txmgr_test.go
View file @
d2361852
...
@@ -12,6 +12,8 @@ import (
...
@@ -12,6 +12,8 @@ import (
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/require"
"github.com/ethereum-optimism/optimism/op-node/testlog"
"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"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core"
...
@@ -39,7 +41,7 @@ func newTestHarnessWithConfig(t *testing.T, cfg Config) *testHarness {
...
@@ -39,7 +41,7 @@ func newTestHarnessWithConfig(t *testing.T, cfg Config) *testHarness {
g
:=
newGasPricer
(
3
)
g
:=
newGasPricer
(
3
)
backend
:=
newMockBackend
(
g
)
backend
:=
newMockBackend
(
g
)
cfg
.
Backend
=
backend
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
{
return
&
testHarness
{
cfg
:
cfg
,
cfg
:
cfg
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment