Skip to content

Commit

Permalink
feat(consensus): Add chain reorgs
Browse files Browse the repository at this point in the history
  • Loading branch information
samcm committed May 13, 2022
1 parent b181227 commit 7b9fe0f
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 0 deletions.
54 changes: 54 additions & 0 deletions pkg/exporter/consensus/jobs/general.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"time"

eth2client "github.com/attestantio/go-eth2-client"
v1 "github.com/attestantio/go-eth2-client/api/v1"
"github.com/prometheus/client_golang/prometheus"
"github.com/sirupsen/logrus"
)
Expand All @@ -17,6 +18,8 @@ type General struct {
Slots prometheus.GaugeVec
NodeVersion prometheus.GaugeVec
NetworkdID prometheus.Gauge
ReOrgs prometheus.Counter
ReOrgDepth prometheus.Counter
}

const (
Expand Down Expand Up @@ -58,6 +61,22 @@ func NewGeneralJob(client eth2client.Service, log logrus.FieldLogger, namespace
ConstLabels: constLabels,
},
),
ReOrgs: prometheus.NewCounter(
prometheus.CounterOpts{
Namespace: namespace,
Name: "reorg_count",
Help: "The count of reorgs.",
ConstLabels: constLabels,
},
),
ReOrgDepth: prometheus.NewCounter(
prometheus.CounterOpts{
Namespace: namespace,
Name: "reorg_depth",
Help: "The number of reorgs.",
ConstLabels: constLabels,
},
),
}
}

Expand All @@ -67,6 +86,7 @@ func (g *General) Name() string {

func (g *General) Start(ctx context.Context) {
g.tick(ctx)
g.startSubscriptions(ctx)
for {
select {
case <-ctx.Done():
Expand All @@ -77,6 +97,40 @@ func (g *General) Start(ctx context.Context) {
}
}

func (g *General) startSubscriptions(ctx context.Context) error {
provider, isProvider := g.client.(eth2client.EventsProvider)
if !isProvider {
return errors.New("client does not implement eth2client.Subscriptions")
}

topics := []string{
"chain_reorg",
}

if err := provider.Events(ctx, topics, g.handleEvent); err != nil {
return err
}

return nil
}

func (g *General) handleEvent(event *v1.Event) {
switch event.Topic {
case "chain_reorg":
g.handleChainReorg(event)
}
}

func (g *General) handleChainReorg(event *v1.Event) {
reorg, ok := event.Data.(*v1.ChainReorgEvent)
if !ok {
return
}

g.ReOrgs.Inc()
g.ReOrgDepth.Add(float64(reorg.Depth))
}

func (g *General) tick(ctx context.Context) {
if err := g.GetNodeVersion(ctx); err != nil {
g.log.WithError(err).Error("Failed to get node version")
Expand Down
3 changes: 3 additions & 0 deletions pkg/exporter/consensus/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ func NewMetrics(client eth2client.Service, log logrus.FieldLogger, nodeName, nam

prometheus.MustRegister(m.generalMetrics.Slots)
prometheus.MustRegister(m.generalMetrics.NodeVersion)
prometheus.MustRegister(m.generalMetrics.NetworkdID)
prometheus.MustRegister(m.generalMetrics.ReOrgs)
prometheus.MustRegister(m.generalMetrics.ReOrgDepth)

prometheus.MustRegister(m.syncMetrics.Percentage)
prometheus.MustRegister(m.syncMetrics.EstimatedHighestSlot)
Expand Down

0 comments on commit 7b9fe0f

Please sign in to comment.