Skip to content

Commit 9e45785

Browse files
committed
feat: add DKG message received/sent metrics
1 parent a00a13f commit 9e45785

File tree

2 files changed

+77
-1
lines changed

2 files changed

+77
-1
lines changed

rolling-shutter/keyper/keypermetrics/metrics.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@ import (
1414
"github.com/shutter-network/rolling-shutter/rolling-shutter/medley/chainsync"
1515
)
1616

17+
const (
18+
DKGMessageTypePolyEval = "poly_eval"
19+
DKGMessageTypePolyCommitment = "poly_commitment"
20+
DKGMessageTypeAccusation = "accusation"
21+
DKGMessageTypeApology = "apology"
22+
)
23+
1724
var MetricsKeyperCurrentBlockL1 = prometheus.NewGauge(
1825
prometheus.GaugeOpts{
1926
Namespace: "shutter",
@@ -71,6 +78,26 @@ var MetricsKeyperCurrentPhase = prometheus.NewGaugeVec(
7178
[]string{"eon", "phase"},
7279
)
7380

81+
var MetricsKeyperDKGMessagesSent = prometheus.NewCounterVec(
82+
prometheus.CounterOpts{
83+
Namespace: "shutter",
84+
Subsystem: "keyper",
85+
Name: "dkg_messages_sent",
86+
Help: "Number of DKG messages scheduled for sending for the given eon, partitioned by message type",
87+
},
88+
[]string{"eon", "message_type"},
89+
)
90+
91+
var MetricsKeyperDKGMessagesReceived = prometheus.NewCounterVec(
92+
prometheus.CounterOpts{
93+
Namespace: "shutter",
94+
Subsystem: "keyper",
95+
Name: "dkg_messages_received",
96+
Help: "Number of DKG messages received for the given eon, partitioned by message type",
97+
},
98+
[]string{"eon", "message_type"},
99+
)
100+
74101
var MetricsKeyperCurrentBatchConfigIndex = prometheus.NewGauge(
75102
prometheus.GaugeOpts{
76103
Namespace: "shutter",
@@ -128,6 +155,8 @@ func InitMetrics(dbpool *pgxpool.Pool, config kprconfig.Config) {
128155
prometheus.MustRegister(MetricsKeyperDKGStatus)
129156
prometheus.MustRegister(MetricsKeyperEthAddress)
130157
prometheus.MustRegister(MetricsExecutionClientVersion)
158+
prometheus.MustRegister(MetricsKeyperDKGMessagesSent)
159+
prometheus.MustRegister(MetricsKeyperDKGMessagesReceived)
131160

132161
ctx := context.Background()
133162
queries := database.New(dbpool)

rolling-shutter/keyper/smobserver/smstate.go

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,11 +202,22 @@ func (st *ShuttermintState) sendPolyEvals(ctx context.Context, queries *database
202202
receivers = nil
203203
encryptedEvals = nil
204204
}()
205-
return queries.ScheduleShutterMessage(
205+
eonLabel := strconv.FormatInt(currentEon, 10)
206+
err := queries.ScheduleShutterMessage(
206207
ctx,
207208
fmt.Sprintf("poly eval (eon=%d)", currentEon),
208209
shmsg.NewPolyEval(uint64(currentEon), receivers, encryptedEvals),
209210
)
211+
if err != nil {
212+
return err
213+
}
214+
for range receivers {
215+
keypermetrics.MetricsKeyperDKGMessagesSent.WithLabelValues(
216+
eonLabel,
217+
keypermetrics.DKGMessageTypePolyEval,
218+
).Inc()
219+
}
220+
return nil
210221
}
211222

212223
for _, eval := range evals {
@@ -389,6 +400,7 @@ func (st *ShuttermintState) startPhase1Dealing(
389400
log.Fatal().Err(err).Msg("aborting due to unexpected error")
390401
}
391402
dkg.markDirty()
403+
eonLabel := strconv.FormatUint(eon, 10)
392404
err = queries.ScheduleShutterMessage(
393405
ctx,
394406
fmt.Sprintf("poly commitment (eon=%d)", eon),
@@ -397,6 +409,10 @@ func (st *ShuttermintState) startPhase1Dealing(
397409
if err != nil {
398410
return err
399411
}
412+
keypermetrics.MetricsKeyperDKGMessagesSent.WithLabelValues(
413+
eonLabel,
414+
keypermetrics.DKGMessageTypePolyCommitment,
415+
).Inc()
400416

401417
for _, eval := range polyEvals {
402418
err = queries.InsertPolyEval(ctx, database.InsertPolyEvalParams{
@@ -416,9 +432,14 @@ func (st *ShuttermintState) startPhase2Accusing(
416432
) error {
417433
accusations := dkg.pure.StartPhase2Accusing()
418434
dkg.markDirty()
435+
eonLabel := strconv.FormatUint(eon, 10)
419436
if len(accusations) > 0 {
420437
var accused []common.Address
421438
for _, a := range accusations {
439+
keypermetrics.MetricsKeyperDKGMessagesSent.WithLabelValues(
440+
eonLabel,
441+
keypermetrics.DKGMessageTypeAccusation,
442+
).Inc()
422443
accused = append(accused, dkg.keypers[a.Accused])
423444
}
424445
err := queries.ScheduleShutterMessage(
@@ -441,11 +462,16 @@ func (st *ShuttermintState) startPhase3Apologizing(
441462
) error {
442463
apologies := dkg.pure.StartPhase3Apologizing()
443464
dkg.markDirty()
465+
eonLabel := strconv.FormatUint(eon, 10)
444466
if len(apologies) > 0 {
445467
var accusers []common.Address
446468
var polyEvals []*big.Int
447469

448470
for _, a := range apologies {
471+
keypermetrics.MetricsKeyperDKGMessagesSent.WithLabelValues(
472+
eonLabel,
473+
keypermetrics.DKGMessageTypeApology,
474+
).Inc()
449475
accusers = append(accusers, dkg.keypers[a.Accuser])
450476
polyEvals = append(polyEvals, a.Eval)
451477
}
@@ -624,6 +650,10 @@ func (st *ShuttermintState) handlePolyCommitment(
624650
return nil
625651
}
626652
dkg.markDirty()
653+
keypermetrics.MetricsKeyperDKGMessagesReceived.WithLabelValues(
654+
strconv.FormatUint(e.Eon, 10),
655+
keypermetrics.DKGMessageTypePolyCommitment,
656+
).Inc()
627657
return nil
628658
}
629659

@@ -645,6 +675,7 @@ func (st *ShuttermintState) handlePolyEval(
645675
Msg("event for non existent eon received")
646676
return nil
647677
}
678+
eonLabel := strconv.FormatUint(e.Eon, 10)
648679
sender, err := medley.FindAddressIndex(dkg.keypers, e.Sender)
649680
if err != nil {
650681
return nil
@@ -681,6 +712,10 @@ func (st *ShuttermintState) handlePolyEval(
681712
}
682713
log.Info().Str("event", e.String()).Int("keyper", sender).
683714
Msg("got poly eval message")
715+
keypermetrics.MetricsKeyperDKGMessagesReceived.WithLabelValues(
716+
eonLabel,
717+
keypermetrics.DKGMessageTypePolyEval,
718+
).Inc()
684719
dkg.markDirty()
685720
return nil
686721
}
@@ -700,6 +735,7 @@ func (st *ShuttermintState) handleAccusation(
700735
Msg("received accusation in wrong phase")
701736
return nil
702737
}
738+
eonLabel := strconv.FormatUint(e.Eon, 10)
703739
sender, err := medley.FindAddressIndex(dkg.keypers, e.Sender)
704740
if err != nil {
705741
log.Info().Str("event", e.String()).
@@ -724,7 +760,12 @@ func (st *ShuttermintState) handleAccusation(
724760
if err != nil {
725761
log.Info().Str("event", e.String()).Err(err).
726762
Msg("cannot handle accusation")
763+
continue
727764
}
765+
keypermetrics.MetricsKeyperDKGMessagesReceived.WithLabelValues(
766+
eonLabel,
767+
keypermetrics.DKGMessageTypeAccusation,
768+
).Inc()
728769
}
729770
dkg.markDirty()
730771
return nil
@@ -744,6 +785,7 @@ func (st *ShuttermintState) handleApology(
744785
Msg("Warning: received apology in wrong phase")
745786
return nil
746787
}
788+
eonLabel := strconv.FormatUint(e.Eon, 10)
747789
sender, err := medley.FindAddressIndex(dkg.keypers, e.Sender)
748790
if err != nil {
749791
log.Info().Str("event", e.String()).Msg("failed to handle apology. bad sender")
@@ -766,7 +808,12 @@ func (st *ShuttermintState) handleApology(
766808
})
767809
if err != nil {
768810
log.Info().Str("event", e.String()).Err(err).Msg("failed to handle apology")
811+
continue
769812
}
813+
keypermetrics.MetricsKeyperDKGMessagesReceived.WithLabelValues(
814+
eonLabel,
815+
keypermetrics.DKGMessageTypeApology,
816+
).Inc()
770817
}
771818
dkg.markDirty()
772819
return nil

0 commit comments

Comments
 (0)