Commit 3c5aee9c authored by Mark Tyneway's avatar Mark Tyneway Committed by GitHub

Merge branch 'develop' into feat/mergify-loop

parents e86a8368 6442ddcf
---
---
chore(deps): bump github.com/ethereum/go-ethereum from 1.10.16 to 1.10.17 in /op-exporter
---
'@eth-optimism/contracts-bedrock': patch
---
Move core-utils to deps instead of devdeps
...@@ -59,9 +59,9 @@ devnet-clean: ...@@ -59,9 +59,9 @@ devnet-clean:
rm -rf ./packages/contracts-bedrock/deployments/devnetL1 rm -rf ./packages/contracts-bedrock/deployments/devnetL1
rm -rf ./.devnet rm -rf ./.devnet
cd ./ops-bedrock && docker-compose down cd ./ops-bedrock && docker-compose down
docker volume rm ops-bedrock_l1_data docker image ls | grep ops-bedrock_ | cut -d ' ' -f 1 | xargs docker rmi
docker volume rm ops-bedrock_l2_data docker volume ls | grep ops-bedrock_ | cut -d ' ' -f 1 | xargs docker volume rm
docker volume rm ops-bedrock_op_log
.PHONY: devnet-clean .PHONY: devnet-clean
test-unit: test-unit:
......
...@@ -34,7 +34,7 @@ services: ...@@ -34,7 +34,7 @@ services:
entrypoint: # pass the L2 specific flags by overriding the entry-point and adding extra arguments entrypoint: # pass the L2 specific flags by overriding the entry-point and adding extra arguments
- "/bin/sh" - "/bin/sh"
- "/entrypoint.sh" - "/entrypoint.sh"
- "--authrpc.jwt-secret=/config/test-jwt-secret.txt" - "--authrpc.jwtsecret=/config/test-jwt-secret.txt"
op-node: op-node:
depends_on: depends_on:
......
# @eth-optimism/contracts-bedrock # @eth-optimism/contracts-bedrock
## 0.1.2
### Patch Changes
- 07a84aed: Move core-utils to deps instead of devdeps
## 0.1.1 ## 0.1.1
### Patch Changes ### Patch Changes
......
{ {
"name": "@eth-optimism/contracts-bedrock", "name": "@eth-optimism/contracts-bedrock",
"version": "0.1.1", "version": "0.1.2",
"description": "Contracts for Optimism Specs", "description": "Contracts for Optimism Specs",
"main": "dist/index", "main": "dist/index",
"types": "dist/index", "types": "dist/index",
......
This diff is collapsed.
# @eth-optimism/teleportr # @eth-optimism/teleportr
## 0.0.8
### Patch Changes
- 487a9731: Improve metrics
- b5ee3c70: Increase max disbursements to 15
## 0.0.7 ## 0.0.7
### Patch Changes ### Patch Changes
......
...@@ -6,6 +6,7 @@ import ( ...@@ -6,6 +6,7 @@ import (
"errors" "errors"
"math/big" "math/big"
"strings" "strings"
"sync"
"time" "time"
"github.com/ethereum-optimism/optimism/bss-core/metrics" "github.com/ethereum-optimism/optimism/bss-core/metrics"
...@@ -33,7 +34,7 @@ var DisbursementFailedTopic = common.HexToHash( ...@@ -33,7 +34,7 @@ var DisbursementFailedTopic = common.HexToHash(
"0x9b478c095979d3d3a7d602ffd9ee1f0843204d853558ae0882c8fcc0a5bc78cf", "0x9b478c095979d3d3a7d602ffd9ee1f0843204d853558ae0882c8fcc0a5bc78cf",
) )
const MaxDisbursements = 5 const MaxDisbursements = 15
type Config struct { type Config struct {
Name string Name string
...@@ -48,6 +49,7 @@ type Config struct { ...@@ -48,6 +49,7 @@ type Config struct {
DisburserAddr common.Address DisburserAddr common.Address
ChainID *big.Int ChainID *big.Int
PrivKey *ecdsa.PrivateKey PrivKey *ecdsa.PrivateKey
ChainMetricsEnable bool
} }
type Driver struct { type Driver struct {
...@@ -58,10 +60,12 @@ type Driver struct { ...@@ -58,10 +60,12 @@ type Driver struct {
walletAddr common.Address walletAddr common.Address
metrics *Metrics metrics *Metrics
currentDepositIDs []uint64 currentDepositIDs []uint64
chainMetricsEnabled bool
metricsMu sync.Mutex
} }
func NewDriver(cfg Config) (*Driver, error) { func NewDriver(cfg Config, parentCtx context.Context) (*Driver, error) {
if cfg.NumConfirmations == 0 { if cfg.NumConfirmations == 0 {
panic("NumConfirmations cannot be zero") panic("NumConfirmations cannot be zero")
} }
...@@ -95,15 +99,21 @@ func NewDriver(cfg Config) (*Driver, error) { ...@@ -95,15 +99,21 @@ func NewDriver(cfg Config) (*Driver, error) {
) )
walletAddr := crypto.PubkeyToAddress(cfg.PrivKey.PublicKey) walletAddr := crypto.PubkeyToAddress(cfg.PrivKey.PublicKey)
metricsInst := NewMetrics(cfg.Name)
return &Driver{ d := &Driver{
cfg: cfg, cfg: cfg,
depositContract: depositContract, depositContract: depositContract,
disburserContract: disburserContract, disburserContract: disburserContract,
rawDisburserContract: rawDisburserContract, rawDisburserContract: rawDisburserContract,
walletAddr: walletAddr, walletAddr: walletAddr,
metrics: NewMetrics(cfg.Name), metrics: metricsInst,
}, nil chainMetricsEnabled: cfg.ChainMetricsEnable,
}
if d.chainMetricsEnabled {
go d.collectChainMetricsBackground(parentCtx)
}
return d, nil
} }
// Name is an identifier used to prefix logs for a particular service. // Name is an identifier used to prefix logs for a particular service.
...@@ -140,8 +150,8 @@ func (d *Driver) ClearPendingTx( ...@@ -140,8 +150,8 @@ func (d *Driver) ClearPendingTx(
func (d *Driver) GetBatchBlockRange( func (d *Driver) GetBatchBlockRange(
ctx context.Context) (*big.Int, *big.Int, error) { ctx context.Context) (*big.Int, *big.Int, error) {
// Update balance metrics on each iteration. // Update metrics on each iteration.
d.updateBalanceMetrics(ctx) d.collectChainMetrics(ctx)
// Clear the current deposit IDs from any prior iteration. // Clear the current deposit IDs from any prior iteration.
d.currentDepositIDs = nil d.currentDepositIDs = nil
...@@ -720,19 +730,63 @@ func (d *Driver) deletePendingTx(startID, endID uint64) error { ...@@ -720,19 +730,63 @@ func (d *Driver) deletePendingTx(startID, endID uint64) error {
return nil return nil
} }
func (d *Driver) updateBalanceMetrics(ctx context.Context) { func (d *Driver) collectChainMetricsBackground(ctx context.Context) {
disburserBal, err := d.cfg.L2Client.BalanceAt(ctx, d.walletAddr, nil) tick := time.NewTicker(time.Minute)
defer tick.Stop()
for {
select {
case <-tick.C:
log.Info("collecting background metrics")
d.collectChainMetrics(ctx)
case <-ctx.Done():
return
}
}
}
func (d *Driver) collectChainMetrics(ctx context.Context) {
if !d.chainMetricsEnabled {
return
}
subCtx, cancel := context.WithTimeout(ctx, 10*time.Second)
defer cancel()
disburserBal, err := d.cfg.L2Client.BalanceAt(subCtx, d.cfg.DisburserAddr, nil)
if err != nil { if err != nil {
log.Error("Error getting disburser wallet balance", "err", err) log.Error("Error getting disburser wallet balance", "err", err)
disburserBal = big.NewInt(0) disburserBal = big.NewInt(0)
} }
depositBal, err := d.cfg.L1Client.BalanceAt(ctx, d.cfg.DepositAddr, nil) depositBal, err := d.cfg.L1Client.BalanceAt(subCtx, d.cfg.DepositAddr, nil)
if err != nil { if err != nil {
log.Error("Error getting deposit contract balance", "err", err) log.Error("Error getting deposit contract balance", "err", err)
depositBal = big.NewInt(0) depositBal = big.NewInt(0)
} }
nextDepositID, err := d.depositContract.TotalDeposits(&bind.CallOpts{
Context: subCtx,
})
if err != nil {
log.Error("Error getting deposit contract total deposits")
nextDepositID = big.NewInt(0)
}
nextDisbursementID, err := d.disburserContract.TotalDisbursements(
&bind.CallOpts{
Context: subCtx,
},
)
if err != nil {
log.Error("Error getting deposit contract total disbursements")
nextDisbursementID = big.NewInt(0)
}
d.metricsMu.Lock()
d.metrics.DisburserBalance.Set(float64(disburserBal.Uint64())) d.metrics.DisburserBalance.Set(float64(disburserBal.Uint64()))
d.metrics.DepositContractBalance.Set(float64(depositBal.Uint64())) d.metrics.DepositContractBalance.Set(float64(depositBal.Uint64()))
d.metrics.ContractNextDepositID.Set(float64(nextDepositID.Uint64()))
d.metrics.ContractNextDisbursementID.Set(float64(nextDisbursementID.Uint64()))
d.metricsMu.Unlock()
} }
...@@ -66,6 +66,10 @@ type Metrics struct { ...@@ -66,6 +66,10 @@ type Metrics struct {
// the disburser contract. // the disburser contract.
ContractNextDisbursementID prometheus.Gauge ContractNextDisbursementID prometheus.Gauge
// ContractNextDepositID tracks the next deposit id expected by the deposit
// contract.
ContractNextDepositID prometheus.Gauge
// DisburserBalance tracks Teleportr's disburser account balance. // DisburserBalance tracks Teleportr's disburser account balance.
DisburserBalance prometheus.Gauge DisburserBalance prometheus.Gauge
...@@ -117,6 +121,11 @@ func NewMetrics(subsystem string) *Metrics { ...@@ -117,6 +121,11 @@ func NewMetrics(subsystem string) *Metrics {
Help: "Next disbursement id expected by the disburser contract", Help: "Next disbursement id expected by the disburser contract",
Subsystem: base.SubsystemName(), Subsystem: base.SubsystemName(),
}), }),
ContractNextDepositID: promauto.NewGauge(prometheus.GaugeOpts{
Name: "contract_next_deposit_id",
Help: "next deposit id expected by the deposit contract",
Subsystem: base.SubsystemName(),
}),
DisburserBalance: promauto.NewGauge(prometheus.GaugeOpts{ DisburserBalance: promauto.NewGauge(prometheus.GaugeOpts{
Name: "disburser_balance", Name: "disburser_balance",
Help: "Balance in Wei of Teleportr's disburser wallet", Help: "Balance in Wei of Teleportr's disburser wallet",
......
{ {
"name": "@eth-optimism/teleportr", "name": "@eth-optimism/teleportr",
"version": "0.0.7", "version": "0.0.8",
"private": true, "private": true,
"devDependencies": {} "devDependencies": {}
} }
...@@ -110,7 +110,8 @@ func Main(gitVersion string) func(ctx *cli.Context) error { ...@@ -110,7 +110,8 @@ func Main(gitVersion string) func(ctx *cli.Context) error {
DisburserAddr: disburserAddr, DisburserAddr: disburserAddr,
ChainID: chainID, ChainID: chainID,
PrivKey: disburserPrivKey, PrivKey: disburserPrivKey,
}) ChainMetricsEnable: cfg.MetricsServerEnable,
}, ctx)
if err != nil { if err != nil {
return err return err
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment