@@ -30,29 +30,11 @@ const (
30
30
)
31
31
32
32
var (
33
- remoteVerifyTaskCounter = metrics .NewRegisteredCounter ("remote/state/verify/task/total" , nil )
34
-
35
- statusFullVerifiedMeter = metrics .NewRegisteredMeter ("status/full/verified/messages/total" , nil )
36
- statusUntrustedVerifiedMeter = metrics .NewRegisteredMeter ("status/untrusted/verified/messages/total" , nil )
37
-
38
- statusDiffHashMismatchMeter = metrics .NewRegisteredMeter ("status/diffhash/mismatch/messages/total" , nil )
39
- statusImpossibleForkMeter = metrics .NewRegisteredMeter ("status/impossible/fork/messages/total" , nil )
40
-
41
- statusBlockTooNewMeter = metrics .NewRegisteredMeter ("status/block/too/new/messages/total" , nil )
42
- statusBlockNewerMeter = metrics .NewRegisteredMeter ("status/block/newer/messages/total" , nil )
43
- statusPossibleForkMeter = metrics .NewRegisteredMeter ("status/possible/fork/messages/total" , nil )
44
- statusUnexpectedErrorMeter = metrics .NewRegisteredMeter ("status/unexpected/error/total" , nil )
45
-
46
- codeMap = map [uint16 ]metrics.Meter {
47
- 0x101 : statusFullVerifiedMeter ,
48
- 0x102 : statusUntrustedVerifiedMeter ,
49
- 0x201 : statusDiffHashMismatchMeter ,
50
- 0x202 : statusImpossibleForkMeter ,
51
- 0x301 : statusBlockTooNewMeter ,
52
- 0x302 : statusBlockNewerMeter ,
53
- 0x303 : statusPossibleForkMeter ,
54
- 0x400 : statusUnexpectedErrorMeter ,
55
- }
33
+ remoteVerifyTaskCounter = metrics .NewRegisteredCounter ("remote/state/verify/task/total" , nil )
34
+ succeedRemoteVerifyTaskMeter = metrics .NewRegisteredMeter ("succeed/remote/verify/task" , nil )
35
+ failedRemoteVerifyTaskMeter = metrics .NewRegisteredMeter ("failed/remote/verify/task" , nil )
36
+
37
+ succeedTaskExecutionTimer = metrics .NewRegisteredTimer ("succeed/task/execution" , nil )
56
38
)
57
39
58
40
type remoteVerifyManager struct {
@@ -106,6 +88,8 @@ func (vm *remoteVerifyManager) mainLoop() {
106
88
if task , ok := vm .tasks [hash ]; ok {
107
89
delete (vm .tasks , hash )
108
90
remoteVerifyTaskCounter .Dec (1 )
91
+ succeedRemoteVerifyTaskMeter .Mark (1 )
92
+ succeedTaskExecutionTimer .Update (time .Since (task .startAt ))
109
93
close (task .terminalCh )
110
94
}
111
95
case <- pruneTicker .C :
@@ -114,6 +98,7 @@ func (vm *remoteVerifyManager) mainLoop() {
114
98
vm .bc .CurrentHeader ().Number .Uint64 ()- task .blockHeader .Number .Uint64 () > pruneHeightDiff {
115
99
delete (vm .tasks , hash )
116
100
remoteVerifyTaskCounter .Dec (1 )
101
+ failedRemoteVerifyTaskMeter .Mark (1 )
117
102
close (task .terminalCh )
118
103
}
119
104
}
@@ -247,24 +232,41 @@ func (vt *verifyTask) Start(verifyCh chan common.Hash) {
247
232
for {
248
233
select {
249
234
case msg := <- vt .messageCh :
250
- if metric , exist := codeMap [msg .verifyResult .Status .Code ]; exist {
251
- metric .Mark (1 )
252
- }
253
- switch msg .verifyResult .Status {
254
- case types .StatusFullVerified :
255
- statusFullVerifiedMeter .Mark (1 )
256
- vt .compareRootHashAndWrite (msg , verifyCh )
257
- case types .StatusPartiallyVerified :
258
- statusUntrustedVerifiedMeter .Mark (1 )
259
- log .Warn ("block %s , num= %s is untrusted verified" , msg .verifyResult .BlockHash , msg .verifyResult .BlockNumber )
260
- if vt .allowUntrusted {
235
+ switch msg .verifyResult .Status .Code / 100 {
236
+ case 1 :
237
+ switch msg .verifyResult .Status {
238
+ case types .StatusFullVerified :
261
239
vt .compareRootHashAndWrite (msg , verifyCh )
240
+ newRecievedMsgTypeGauge ("fullVerified" , msg .peerId ).Inc (1 )
241
+ case types .StatusPartiallyVerified :
242
+ log .Warn ("block %s , num= %s is untrusted verified" , msg .verifyResult .BlockHash , msg .verifyResult .BlockNumber )
243
+ if vt .allowUntrusted {
244
+ vt .compareRootHashAndWrite (msg , verifyCh )
245
+ }
246
+ newRecievedMsgTypeGauge ("partialVerified" , msg .peerId ).Inc (1 )
262
247
}
263
- case types .StatusUnexpectedError , types .StatusImpossibleFork , types .StatusDiffHashMismatch :
248
+
249
+ case 2 , 4 :
264
250
vt .BadPeers [msg .peerId ] = struct {}{}
265
251
log .Info ("peer %s is not available: code %d, msg %s," , msg .peerId , msg .verifyResult .Status .Code , msg .verifyResult .Status .Msg )
266
- case types .StatusBlockTooNew , types .StatusBlockNewer , types .StatusPossibleFork :
252
+ switch msg .verifyResult .Status {
253
+ case types .StatusDiffHashMismatch :
254
+ newRecievedMsgTypeGauge ("diffHashMismatch" , msg .peerId ).Inc (1 )
255
+ case types .StatusImpossibleFork :
256
+ newRecievedMsgTypeGauge ("impossibleFork" , msg .peerId ).Inc (1 )
257
+ case types .StatusUnexpectedError :
258
+ newRecievedMsgTypeGauge ("unexpectedError" , msg .peerId ).Inc (1 )
259
+ }
260
+ case 3 :
267
261
log .Info ("return msg from peer %s for block %s is %s" , msg .peerId , msg .verifyResult .BlockHash , msg .verifyResult .Status .Msg )
262
+ switch msg .verifyResult .Status {
263
+ case types .StatusBlockTooNew :
264
+ newRecievedMsgTypeGauge ("blockTooNew" , msg .peerId ).Inc (1 )
265
+ case types .StatusBlockNewer :
266
+ newRecievedMsgTypeGauge ("blockNewer" , msg .peerId ).Inc (1 )
267
+ case types .StatusPossibleFork :
268
+ newRecievedMsgTypeGauge ("possibleFork" , msg .peerId ).Inc (1 )
269
+ }
268
270
}
269
271
case <- resend .C :
270
272
// if a task has run over 15s, try all the vaild peers to verify.
@@ -390,3 +392,8 @@ func (mode *VerifyMode) UnmarshalText(text []byte) error {
390
392
func (mode VerifyMode ) NeedRemoteVerify () bool {
391
393
return mode == FullVerify || mode == InsecureVerify
392
394
}
395
+
396
+ func newRecievedMsgTypeGauge (msgType , peerId string ) metrics.Gauge {
397
+ m := fmt .Sprintf ("recieved/%s/message/from/%s" , msgType , peerId )
398
+ return metrics .GetOrRegisterGauge (m , nil )
399
+ }
0 commit comments