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
b879e7f9
Unverified
Commit
b879e7f9
authored
Aug 31, 2023
by
refcell.eth
Committed by
GitHub
Aug 31, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implements game move and step counter metrics. (#7077)
parent
95fe7e47
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
46 additions
and
7 deletions
+46
-7
agent.go
op-challenger/game/fault/agent.go
+6
-1
agent_test.go
op-challenger/game/fault/agent_test.go
+3
-2
player.go
op-challenger/game/fault/player.go
+3
-1
monitor.go
op-challenger/game/monitor.go
+4
-0
monitor_test.go
op-challenger/game/monitor_test.go
+2
-1
service.go
op-challenger/game/service.go
+2
-2
metrics.go
op-challenger/metrics/metrics.go
+24
-0
noop.go
op-challenger/metrics/noop.go
+2
-0
No files found.
op-challenger/game/fault/agent.go
View file @
b879e7f9
...
...
@@ -7,6 +7,7 @@ import (
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/solver"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/types"
"github.com/ethereum-optimism/optimism/op-challenger/metrics"
"github.com/ethereum/go-ethereum/log"
)
...
...
@@ -24,6 +25,7 @@ type ClaimLoader interface {
}
type
Agent
struct
{
metrics
metrics
.
Metricer
solver
*
solver
.
Solver
loader
ClaimLoader
responder
Responder
...
...
@@ -33,8 +35,9 @@ type Agent struct {
log
log
.
Logger
}
func
NewAgent
(
loader
ClaimLoader
,
maxDepth
int
,
trace
types
.
TraceProvider
,
responder
Responder
,
updater
types
.
OracleUpdater
,
agreeWithProposedOutput
bool
,
log
log
.
Logger
)
*
Agent
{
func
NewAgent
(
m
metrics
.
Metricer
,
loader
ClaimLoader
,
maxDepth
int
,
trace
types
.
TraceProvider
,
responder
Responder
,
updater
types
.
OracleUpdater
,
agreeWithProposedOutput
bool
,
log
log
.
Logger
)
*
Agent
{
return
&
Agent
{
metrics
:
m
,
solver
:
solver
.
NewSolver
(
maxDepth
,
trace
),
loader
:
loader
,
responder
:
responder
,
...
...
@@ -134,6 +137,7 @@ func (a *Agent) move(ctx context.Context, claim types.Claim, game types.Game) er
log
.
Debug
(
"Skipping duplicate move"
)
return
nil
}
a
.
metrics
.
RecordGameMove
()
log
.
Info
(
"Performing move"
)
return
a
.
responder
.
Respond
(
ctx
,
move
)
}
...
...
@@ -170,6 +174,7 @@ func (a *Agent) step(ctx context.Context, claim types.Claim, game types.Game) er
a
.
log
.
Info
(
"Performing step"
,
"is_attack"
,
step
.
IsAttack
,
"depth"
,
step
.
LeafClaim
.
Depth
(),
"index_at_depth"
,
step
.
LeafClaim
.
IndexAtDepth
(),
"value"
,
step
.
LeafClaim
.
Value
)
a
.
metrics
.
RecordGameStep
()
callData
:=
types
.
StepCallData
{
ClaimIndex
:
uint64
(
step
.
LeafClaim
.
ContractIndex
),
IsAttack
:
step
.
IsAttack
,
...
...
op-challenger/game/fault/agent_test.go
View file @
b879e7f9
...
...
@@ -5,6 +5,7 @@ import (
"testing"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/types"
"github.com/ethereum-optimism/optimism/op-challenger/metrics"
"github.com/ethereum/go-ethereum/log"
"github.com/stretchr/testify/require"
...
...
@@ -16,14 +17,14 @@ func TestShouldResolve(t *testing.T) {
log
:=
testlog
.
Logger
(
t
,
log
.
LvlCrit
)
t
.
Run
(
"AgreeWithProposedOutput"
,
func
(
t
*
testing
.
T
)
{
agent
:=
NewAgent
(
nil
,
0
,
nil
,
nil
,
nil
,
true
,
log
)
agent
:=
NewAgent
(
metrics
.
NoopMetrics
,
nil
,
0
,
nil
,
nil
,
nil
,
true
,
log
)
require
.
False
(
t
,
agent
.
shouldResolve
(
context
.
Background
(),
types
.
GameStatusDefenderWon
))
require
.
True
(
t
,
agent
.
shouldResolve
(
context
.
Background
(),
types
.
GameStatusChallengerWon
))
require
.
False
(
t
,
agent
.
shouldResolve
(
context
.
Background
(),
types
.
GameStatusInProgress
))
})
t
.
Run
(
"DisagreeWithProposedOutput"
,
func
(
t
*
testing
.
T
)
{
agent
:=
NewAgent
(
nil
,
0
,
nil
,
nil
,
nil
,
false
,
log
)
agent
:=
NewAgent
(
metrics
.
NoopMetrics
,
nil
,
0
,
nil
,
nil
,
nil
,
false
,
log
)
require
.
True
(
t
,
agent
.
shouldResolve
(
context
.
Background
(),
types
.
GameStatusDefenderWon
))
require
.
False
(
t
,
agent
.
shouldResolve
(
context
.
Background
(),
types
.
GameStatusChallengerWon
))
require
.
False
(
t
,
agent
.
shouldResolve
(
context
.
Background
(),
types
.
GameStatusInProgress
))
...
...
op-challenger/game/fault/player.go
View file @
b879e7f9
...
...
@@ -11,6 +11,7 @@ import (
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/alphabet"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/cannon"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/types"
"github.com/ethereum-optimism/optimism/op-challenger/metrics"
"github.com/ethereum-optimism/optimism/op-service/txmgr"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
...
...
@@ -37,6 +38,7 @@ type GamePlayer struct {
func
NewGamePlayer
(
ctx
context
.
Context
,
logger
log
.
Logger
,
m
metrics
.
Metricer
,
cfg
*
config
.
Config
,
dir
string
,
addr
common
.
Address
,
...
...
@@ -105,7 +107,7 @@ func NewGamePlayer(
}
return
&
GamePlayer
{
act
:
NewAgent
(
loader
,
int
(
gameDepth
),
provider
,
responder
,
updater
,
cfg
.
AgreeWithProposedOutput
,
logger
)
.
Act
,
act
:
NewAgent
(
m
,
loader
,
int
(
gameDepth
),
provider
,
responder
,
updater
,
cfg
.
AgreeWithProposedOutput
,
logger
)
.
Act
,
agreeWithProposedOutput
:
cfg
.
AgreeWithProposedOutput
,
loader
:
loader
,
logger
:
logger
,
...
...
op-challenger/game/monitor.go
View file @
b879e7f9
...
...
@@ -8,6 +8,7 @@ import (
"time"
"github.com/ethereum-optimism/optimism/op-challenger/game/scheduler"
"github.com/ethereum-optimism/optimism/op-challenger/metrics"
"github.com/ethereum-optimism/optimism/op-service/clock"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/log"
...
...
@@ -26,6 +27,7 @@ type gameScheduler interface {
type
gameMonitor
struct
{
logger
log
.
Logger
metrics
metrics
.
Metricer
clock
clock
.
Clock
source
gameSource
scheduler
gameScheduler
...
...
@@ -36,6 +38,7 @@ type gameMonitor struct {
func
newGameMonitor
(
logger
log
.
Logger
,
m
metrics
.
Metricer
,
cl
clock
.
Clock
,
source
gameSource
,
scheduler
gameScheduler
,
...
...
@@ -45,6 +48,7 @@ func newGameMonitor(
)
*
gameMonitor
{
return
&
gameMonitor
{
logger
:
logger
,
metrics
:
m
,
clock
:
cl
,
scheduler
:
scheduler
,
source
:
source
,
...
...
op-challenger/game/monitor_test.go
View file @
b879e7f9
...
...
@@ -6,6 +6,7 @@ import (
"testing"
"time"
"github.com/ethereum-optimism/optimism/op-challenger/metrics"
"github.com/ethereum-optimism/optimism/op-node/testlog"
"github.com/ethereum-optimism/optimism/op-service/clock"
"github.com/ethereum/go-ethereum/common"
...
...
@@ -100,7 +101,7 @@ func setupMonitorTest(t *testing.T, allowedGames []common.Address) (*gameMonitor
return
i
,
nil
}
sched
:=
&
stubScheduler
{}
monitor
:=
newGameMonitor
(
logger
,
clock
.
SystemClock
,
source
,
sched
,
time
.
Duration
(
0
),
fetchBlockNum
,
allowedGames
)
monitor
:=
newGameMonitor
(
logger
,
metrics
.
NoopMetrics
,
clock
.
SystemClock
,
source
,
sched
,
time
.
Duration
(
0
),
fetchBlockNum
,
allowedGames
)
return
monitor
,
source
,
sched
}
...
...
op-challenger/game/service.go
View file @
b879e7f9
...
...
@@ -72,10 +72,10 @@ func NewService(ctx context.Context, logger log.Logger, cfg *config.Config) (*Se
disk
,
cfg
.
MaxConcurrency
,
func
(
addr
common
.
Address
,
dir
string
)
(
scheduler
.
GamePlayer
,
error
)
{
return
fault
.
NewGamePlayer
(
ctx
,
logger
,
cfg
,
dir
,
addr
,
txMgr
,
client
)
return
fault
.
NewGamePlayer
(
ctx
,
logger
,
m
,
cfg
,
dir
,
addr
,
txMgr
,
client
)
})
monitor
:=
newGameMonitor
(
logger
,
cl
,
loader
,
sched
,
cfg
.
GameWindow
,
client
.
BlockNumber
,
cfg
.
GameAllowlist
)
monitor
:=
newGameMonitor
(
logger
,
m
,
cl
,
loader
,
sched
,
cfg
.
GameWindow
,
client
.
BlockNumber
,
cfg
.
GameAllowlist
)
m
.
RecordInfo
(
version
.
SimpleWithMeta
)
m
.
RecordUp
()
...
...
op-challenger/metrics/metrics.go
View file @
b879e7f9
...
...
@@ -20,6 +20,9 @@ type Metricer interface {
// Record Tx metrics
txmetrics
.
TxMetricer
RecordGameStep
()
RecordGameMove
()
}
type
Metrics
struct
{
...
...
@@ -31,6 +34,9 @@ type Metrics struct {
info
prometheus
.
GaugeVec
up
prometheus
.
Gauge
moves
prometheus
.
Counter
steps
prometheus
.
Counter
}
var
_
Metricer
=
(
*
Metrics
)(
nil
)
...
...
@@ -58,6 +64,16 @@ func NewMetrics() *Metrics {
Name
:
"up"
,
Help
:
"1 if the op-challenger has finished starting up"
,
}),
moves
:
factory
.
NewCounter
(
prometheus
.
CounterOpts
{
Namespace
:
Namespace
,
Name
:
"moves"
,
Help
:
"Number of game moves made by the challenge agent"
,
}),
steps
:
factory
.
NewCounter
(
prometheus
.
CounterOpts
{
Namespace
:
Namespace
,
Name
:
"steps"
,
Help
:
"Number of game steps made by the challenge agent"
,
}),
}
}
...
...
@@ -84,3 +100,11 @@ func (m *Metrics) RecordUp() {
func
(
m
*
Metrics
)
Document
()
[]
opmetrics
.
DocumentedMetric
{
return
m
.
factory
.
Document
()
}
func
(
m
*
Metrics
)
RecordGameMove
()
{
m
.
moves
.
Add
(
1
)
}
func
(
m
*
Metrics
)
RecordGameStep
()
{
m
.
steps
.
Add
(
1
)
}
op-challenger/metrics/noop.go
View file @
b879e7f9
...
...
@@ -12,3 +12,5 @@ var NoopMetrics Metricer = new(noopMetrics)
func
(
*
noopMetrics
)
RecordInfo
(
version
string
)
{}
func
(
*
noopMetrics
)
RecordUp
()
{}
func
(
*
noopMetrics
)
RecordGameMove
()
{}
func
(
*
noopMetrics
)
RecordGameStep
()
{}
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