@@ -10,11 +10,11 @@ import (
10
10
"github.com/babylonchain/cli-tools/internal/btcclient"
11
11
"github.com/babylonchain/cli-tools/internal/config"
12
12
"github.com/babylonchain/cli-tools/internal/db"
13
-
14
13
"github.com/btcsuite/btcd/btcec/v2"
15
14
"github.com/btcsuite/btcd/btcec/v2/schnorr"
16
15
"github.com/btcsuite/btcd/chaincfg"
17
16
"github.com/btcsuite/btcd/wire"
17
+ "github.com/prometheus/client_golang/prometheus/push"
18
18
)
19
19
20
20
var (
@@ -29,10 +29,14 @@ func wrapCrititical(err error) error {
29
29
return fmt .Errorf ("%s:%w" , err .Error (), ErrCriticalError )
30
30
}
31
31
32
- func pubKeyToString (pubKey * btcec.PublicKey ) string {
32
+ func pubKeyToStringSchnorr (pubKey * btcec.PublicKey ) string {
33
33
return hex .EncodeToString (schnorr .SerializePubKey (pubKey ))
34
34
}
35
35
36
+ func pubKeyToStringCompressed (pubKey * btcec.PublicKey ) string {
37
+ return hex .EncodeToString (pubKey .SerializeCompressed ())
38
+ }
39
+
36
40
type SystemParamsRetriever struct {
37
41
CovenantPublicKeys []* btcec.PublicKey
38
42
CovenantQuorum uint32
@@ -65,6 +69,7 @@ type UnbondingPipeline struct {
65
69
signer CovenantSigner
66
70
sender BtcSender
67
71
retriever ParamsRetriever
72
+ Metrics * PipelineMetrics
68
73
btcParams * chaincfg.Params
69
74
}
70
75
@@ -101,12 +106,15 @@ func NewUnbondingPipelineFromConfig(
101
106
return nil , err
102
107
}
103
108
109
+ m := NewPipelineMetrics (& cfg .Metrics )
110
+
104
111
return NewUnbondingPipeline (
105
112
logger ,
106
113
store ,
107
114
signer ,
108
115
bs ,
109
116
ret ,
117
+ m ,
110
118
cfg .Btc .MustGetBtcNetworkParams (),
111
119
), nil
112
120
}
@@ -117,6 +125,7 @@ func NewUnbondingPipeline(
117
125
signer CovenantSigner ,
118
126
sender BtcSender ,
119
127
retriever ParamsRetriever ,
128
+ metrics * PipelineMetrics ,
120
129
btcParams * chaincfg.Params ,
121
130
) * UnbondingPipeline {
122
131
return & UnbondingPipeline {
@@ -125,6 +134,7 @@ func NewUnbondingPipeline(
125
134
signer : signer ,
126
135
sender : sender ,
127
136
retriever : retriever ,
137
+ Metrics : metrics ,
128
138
btcParams : btcParams ,
129
139
}
130
140
}
@@ -174,21 +184,21 @@ func (up *UnbondingPipeline) signUnbondingTransaction(
174
184
}
175
185
176
186
func (up * UnbondingPipeline ) requestSigFromCovenant (req * SignRequest , resultChan chan * SignResult ) {
177
- pkStr := pubKeyToString (req .SignerPubKey )
187
+ pkStr := pubKeyToStringCompressed (req .SignerPubKey )
178
188
up .logger .Debug ("request signatures from covenant signer" ,
179
189
"signer_pk" , pkStr )
180
190
181
191
var res SignResult
182
192
sigPair , err := up .signer .SignUnbondingTransaction (req )
183
193
if err != nil {
184
- // TODO record metrics
194
+ up . Metrics . RecordFailedSigningRequest ( pkStr )
185
195
up .logger .Error ("failed to get signatures from covenant" ,
186
196
"signer_pk" , pkStr ,
187
197
"error" , err )
188
198
189
199
res .Err = err
190
200
} else {
191
- // TODO: record metrics
201
+ up . Metrics . RecordSuccessSigningRequest ( pkStr )
192
202
up .logger .Debug ("got signatures from covenant signer" , "signer_pk" , pkStr )
193
203
194
204
res .PubKeySig = sigPair
@@ -213,6 +223,22 @@ func outputsAreEqual(a, b *wire.TxOut) bool {
213
223
return true
214
224
}
215
225
226
+ func (up * UnbondingPipeline ) pushMetrics () error {
227
+ gatewayUrl , err := up .Metrics .Config .Address ()
228
+ if err != nil {
229
+ return fmt .Errorf ("failed to get gateway address: %w" , err )
230
+ }
231
+
232
+ up .logger .Info ("Pushing metrics to gateway" , "gateway" , gatewayUrl )
233
+
234
+ return push .New (gatewayUrl , "unbonding-pipeline" ).
235
+ Collector (up .Metrics .SuccessSigningReqs ).
236
+ Collector (up .Metrics .FailedSigningReqs ).
237
+ Collector (up .Metrics .SuccessfulSentTransactions ).
238
+ Collector (up .Metrics .FailureSentTransactions ).
239
+ Push ()
240
+ }
241
+
216
242
func (up * UnbondingPipeline ) processUnbondingTransactions (
217
243
ctx context.Context ,
218
244
transactions []* UnbondingTxData ,
@@ -317,6 +343,7 @@ func (up *UnbondingPipeline) processUnbondingTransactions(
317
343
if err := up .store .SetUnbondingTransactionProcessingFailed (ctx , utx ); err != nil {
318
344
return wrapCrititical (err )
319
345
}
346
+ up .Metrics .RecordFailedUnbodingTransaction ()
320
347
} else {
321
348
up .logger .Info (
322
349
"Successfully sent unbonding transaction" ,
@@ -325,8 +352,10 @@ func (up *UnbondingPipeline) processUnbondingTransactions(
325
352
if err := up .store .SetUnbondingTransactionProcessed (ctx , utx ); err != nil {
326
353
return wrapCrititical (err )
327
354
}
355
+ up .Metrics .RecordSentUnbondingTransaction ()
328
356
}
329
357
}
358
+
330
359
return nil
331
360
}
332
361
@@ -350,6 +379,14 @@ func (up *UnbondingPipeline) ProcessNewTransactions(ctx context.Context) error {
350
379
return nil
351
380
}
352
381
382
+ defer func () {
383
+ if up .Metrics .Config .Enabled {
384
+ if err := up .pushMetrics (); err != nil {
385
+ up .logger .Error ("Failed to push metrics" , "error" , err )
386
+ }
387
+ }
388
+ }()
389
+
353
390
if err := up .processUnbondingTransactions (ctx , unbondingTransactions ); err != nil {
354
391
return err
355
392
}
@@ -372,6 +409,14 @@ func (up *UnbondingPipeline) ProcessFailedTransactions(ctx context.Context) erro
372
409
return nil
373
410
}
374
411
412
+ defer func () {
413
+ if up .Metrics .Config .Enabled {
414
+ if err := up .pushMetrics (); err != nil {
415
+ up .logger .Error ("Failed to push metrics" , "error" , err )
416
+ }
417
+ }
418
+ }()
419
+
375
420
if err := up .processUnbondingTransactions (ctx , unbondingTransactions ); err != nil {
376
421
return err
377
422
}
0 commit comments