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
e9737410
Commit
e9737410
authored
Oct 27, 2023
by
Hamdi Allam
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
report latest header of the connected client
parent
72fc3f0e
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
30 additions
and
5 deletions
+30
-5
etl.go
indexer/etl/etl.go
+1
-0
metrics.go
indexer/etl/metrics.go
+12
-0
header_traversal.go
indexer/node/header_traversal.go
+17
-5
No files found.
indexer/etl/etl.go
View file @
e9737410
...
@@ -73,6 +73,7 @@ func (etl *ETL) Start(ctx context.Context) error {
...
@@ -73,6 +73,7 @@ func (etl *ETL) Start(ctx context.Context) error {
}
else
if
len
(
newHeaders
)
==
0
{
}
else
if
len
(
newHeaders
)
==
0
{
etl
.
log
.
Warn
(
"no new headers. processor unexpectedly at head..."
)
etl
.
log
.
Warn
(
"no new headers. processor unexpectedly at head..."
)
}
else
{
}
else
{
etl
.
metrics
.
RecordLatestHeight
(
etl
.
headerTraversal
.
LatestHeader
()
.
Number
)
headers
=
newHeaders
headers
=
newHeaders
}
}
}
}
...
...
indexer/etl/metrics.go
View file @
e9737410
...
@@ -14,6 +14,7 @@ var (
...
@@ -14,6 +14,7 @@ var (
type
Metricer
interface
{
type
Metricer
interface
{
RecordInterval
()
(
done
func
(
err
error
))
RecordInterval
()
(
done
func
(
err
error
))
RecordLatestHeight
(
height
*
big
.
Int
)
// Indexed Batches
// Indexed Batches
RecordIndexedLatestHeight
(
height
*
big
.
Int
)
RecordIndexedLatestHeight
(
height
*
big
.
Int
)
...
@@ -25,6 +26,7 @@ type etlMetrics struct {
...
@@ -25,6 +26,7 @@ type etlMetrics struct {
intervalTick
prometheus
.
Counter
intervalTick
prometheus
.
Counter
intervalDuration
prometheus
.
Histogram
intervalDuration
prometheus
.
Histogram
intervalFailures
prometheus
.
Counter
intervalFailures
prometheus
.
Counter
latestHeight
prometheus
.
Gauge
indexedLatestHeight
prometheus
.
Gauge
indexedLatestHeight
prometheus
.
Gauge
indexedHeaders
prometheus
.
Counter
indexedHeaders
prometheus
.
Counter
...
@@ -52,6 +54,12 @@ func NewMetrics(registry *prometheus.Registry, subsystem string) Metricer {
...
@@ -52,6 +54,12 @@ func NewMetrics(registry *prometheus.Registry, subsystem string) Metricer {
Name
:
"failures_total"
,
Name
:
"failures_total"
,
Help
:
"number of times the etl encountered a failure during the processing loop"
,
Help
:
"number of times the etl encountered a failure during the processing loop"
,
}),
}),
latestHeight
:
factory
.
NewCounter
(
prometheus
.
CounterOpts
{
Namespace
:
MetricsNamespace
,
Subsystem
:
subsystem
,
Name
:
"latest_height"
,
Help
:
"the latest height reported by the connected client"
,
}),
indexedLatestHeight
:
factory
.
NewGauge
(
prometheus
.
GaugeOpts
{
indexedLatestHeight
:
factory
.
NewGauge
(
prometheus
.
GaugeOpts
{
Namespace
:
MetricsNamespace
,
Namespace
:
MetricsNamespace
,
Subsystem
:
subsystem
,
Subsystem
:
subsystem
,
...
@@ -86,6 +94,10 @@ func (m *etlMetrics) RecordInterval() func(error) {
...
@@ -86,6 +94,10 @@ func (m *etlMetrics) RecordInterval() func(error) {
}
}
}
}
func
(
m
*
etlMetrics
)
RecordLatestHeight
(
height
*
big
.
Int
)
{
m
.
latestHeight
.
Set
(
float64
(
height
.
Uint64
()))
}
func
(
m
*
etlMetrics
)
RecordIndexedLatestHeight
(
height
*
big
.
Int
)
{
func
(
m
*
etlMetrics
)
RecordIndexedLatestHeight
(
height
*
big
.
Int
)
{
m
.
indexedLatestHeight
.
Set
(
float64
(
height
.
Uint64
()))
m
.
indexedLatestHeight
.
Set
(
float64
(
height
.
Uint64
()))
}
}
...
...
indexer/node/header_traversal.go
View file @
e9737410
...
@@ -17,7 +17,9 @@ var (
...
@@ -17,7 +17,9 @@ var (
type
HeaderTraversal
struct
{
type
HeaderTraversal
struct
{
ethClient
EthClient
ethClient
EthClient
lastHeader
*
types
.
Header
lastHeader
*
types
.
Header
latestHeader
*
types
.
Header
blockConfirmationDepth
*
big
.
Int
blockConfirmationDepth
*
big
.
Int
}
}
...
@@ -27,8 +29,15 @@ func NewHeaderTraversal(ethClient EthClient, fromHeader *types.Header, confDepth
...
@@ -27,8 +29,15 @@ func NewHeaderTraversal(ethClient EthClient, fromHeader *types.Header, confDepth
return
&
HeaderTraversal
{
ethClient
:
ethClient
,
lastHeader
:
fromHeader
,
blockConfirmationDepth
:
confDepth
}
return
&
HeaderTraversal
{
ethClient
:
ethClient
,
lastHeader
:
fromHeader
,
blockConfirmationDepth
:
confDepth
}
}
}
// LastHeader returns the last header that was fetched by the HeaderTraversal
// LatestHeader returns the latest header reported by underlying eth client
// This is useful for testing the state of the HeaderTraversal
func
(
f
*
HeaderTraversal
)
LatestHeader
()
*
types
.
Header
{
return
f
.
latestHeader
}
// LastHeader returns the last header traversed.
// - This is useful for testing the state of the HeaderTraversal
// - NOTE: LastHeader may be << LatestHeader depending on the number
// headers traversed via `NextFinalizedHeaders`.
func
(
f
*
HeaderTraversal
)
LastHeader
()
*
types
.
Header
{
func
(
f
*
HeaderTraversal
)
LastHeader
()
*
types
.
Header
{
return
f
.
lastHeader
return
f
.
lastHeader
}
}
...
@@ -36,12 +45,14 @@ func (f *HeaderTraversal) LastHeader() *types.Header {
...
@@ -36,12 +45,14 @@ func (f *HeaderTraversal) LastHeader() *types.Header {
// NextFinalizedHeaders retrieves the next set of headers that have been
// NextFinalizedHeaders retrieves the next set of headers that have been
// marked as finalized by the connected client, bounded by the supplied size
// marked as finalized by the connected client, bounded by the supplied size
func
(
f
*
HeaderTraversal
)
NextFinalizedHeaders
(
maxSize
uint64
)
([]
types
.
Header
,
error
)
{
func
(
f
*
HeaderTraversal
)
NextFinalizedHeaders
(
maxSize
uint64
)
([]
types
.
Header
,
error
)
{
latest
Block
Header
,
err
:=
f
.
ethClient
.
BlockHeaderByNumber
(
nil
)
latestHeader
,
err
:=
f
.
ethClient
.
BlockHeaderByNumber
(
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"unable to query latest block: %w"
,
err
)
return
nil
,
fmt
.
Errorf
(
"unable to query latest block: %w"
,
err
)
}
else
if
latestHeader
==
nil
{
return
nil
,
fmt
.
Errorf
(
"latest header unreported"
)
}
}
endHeight
:=
new
(
big
.
Int
)
.
Sub
(
latest
Block
Header
.
Number
,
f
.
blockConfirmationDepth
)
endHeight
:=
new
(
big
.
Int
)
.
Sub
(
latestHeader
.
Number
,
f
.
blockConfirmationDepth
)
if
endHeight
.
Sign
()
<
0
{
if
endHeight
.
Sign
()
<
0
{
// No blocks with the provided confirmation depth available
// No blocks with the provided confirmation depth available
return
nil
,
nil
return
nil
,
nil
...
@@ -78,5 +89,6 @@ func (f *HeaderTraversal) NextFinalizedHeaders(maxSize uint64) ([]types.Header,
...
@@ -78,5 +89,6 @@ func (f *HeaderTraversal) NextFinalizedHeaders(maxSize uint64) ([]types.Header,
}
}
f
.
lastHeader
=
&
headers
[
numHeaders
-
1
]
f
.
lastHeader
=
&
headers
[
numHeaders
-
1
]
f
.
latestHeader
=
latestHeader
return
headers
,
nil
return
headers
,
nil
}
}
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