github.com/arieschain/arieschain@v0.0.0-20191023063405-37c074544356/les/metrics.go (about) 1 package les 2 3 import ( 4 "github.com/quickchainproject/quickchain/metrics" 5 "github.com/quickchainproject/quickchain/p2p" 6 ) 7 8 var ( 9 /* propTxnInPacketsMeter = metrics.NewMeter("let/prop/txns/in/packets") 10 propTxnInTrafficMeter = metrics.NewMeter("let/prop/txns/in/traffic") 11 propTxnOutPacketsMeter = metrics.NewMeter("let/prop/txns/out/packets") 12 propTxnOutTrafficMeter = metrics.NewMeter("let/prop/txns/out/traffic") 13 propHashInPacketsMeter = metrics.NewMeter("let/prop/hashes/in/packets") 14 propHashInTrafficMeter = metrics.NewMeter("let/prop/hashes/in/traffic") 15 propHashOutPacketsMeter = metrics.NewMeter("let/prop/hashes/out/packets") 16 propHashOutTrafficMeter = metrics.NewMeter("let/prop/hashes/out/traffic") 17 propBlockInPacketsMeter = metrics.NewMeter("let/prop/blocks/in/packets") 18 propBlockInTrafficMeter = metrics.NewMeter("let/prop/blocks/in/traffic") 19 propBlockOutPacketsMeter = metrics.NewMeter("let/prop/blocks/out/packets") 20 propBlockOutTrafficMeter = metrics.NewMeter("let/prop/blocks/out/traffic") 21 reqHashInPacketsMeter = metrics.NewMeter("let/req/hashes/in/packets") 22 reqHashInTrafficMeter = metrics.NewMeter("let/req/hashes/in/traffic") 23 reqHashOutPacketsMeter = metrics.NewMeter("let/req/hashes/out/packets") 24 reqHashOutTrafficMeter = metrics.NewMeter("let/req/hashes/out/traffic") 25 reqBlockInPacketsMeter = metrics.NewMeter("let/req/blocks/in/packets") 26 reqBlockInTrafficMeter = metrics.NewMeter("let/req/blocks/in/traffic") 27 reqBlockOutPacketsMeter = metrics.NewMeter("let/req/blocks/out/packets") 28 reqBlockOutTrafficMeter = metrics.NewMeter("let/req/blocks/out/traffic") 29 reqHeaderInPacketsMeter = metrics.NewMeter("let/req/headers/in/packets") 30 reqHeaderInTrafficMeter = metrics.NewMeter("let/req/headers/in/traffic") 31 reqHeaderOutPacketsMeter = metrics.NewMeter("let/req/headers/out/packets") 32 reqHeaderOutTrafficMeter = metrics.NewMeter("let/req/headers/out/traffic") 33 reqBodyInPacketsMeter = metrics.NewMeter("let/req/bodies/in/packets") 34 reqBodyInTrafficMeter = metrics.NewMeter("let/req/bodies/in/traffic") 35 reqBodyOutPacketsMeter = metrics.NewMeter("let/req/bodies/out/packets") 36 reqBodyOutTrafficMeter = metrics.NewMeter("let/req/bodies/out/traffic") 37 reqStateInPacketsMeter = metrics.NewMeter("let/req/states/in/packets") 38 reqStateInTrafficMeter = metrics.NewMeter("let/req/states/in/traffic") 39 reqStateOutPacketsMeter = metrics.NewMeter("let/req/states/out/packets") 40 reqStateOutTrafficMeter = metrics.NewMeter("let/req/states/out/traffic") 41 reqReceiptInPacketsMeter = metrics.NewMeter("let/req/receipts/in/packets") 42 reqReceiptInTrafficMeter = metrics.NewMeter("let/req/receipts/in/traffic") 43 reqReceiptOutPacketsMeter = metrics.NewMeter("let/req/receipts/out/packets") 44 reqReceiptOutTrafficMeter = metrics.NewMeter("let/req/receipts/out/traffic")*/ 45 miscInPacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets", nil) 46 miscInTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic", nil) 47 miscOutPacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets", nil) 48 miscOutTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic", nil) 49 ) 50 51 // meteredMsgReadWriter is a wrapper around a p2p.MsgReadWriter, capable of 52 // accumulating the above defined metrics based on the data stream contents. 53 type meteredMsgReadWriter struct { 54 p2p.MsgReadWriter // Wrapped message stream to meter 55 version int // Protocol version to select correct meters 56 } 57 58 // newMeteredMsgWriter wraps a p2p MsgReadWriter with metering support. If the 59 // metrics system is disabled, this function returns the original object. 60 func newMeteredMsgWriter(rw p2p.MsgReadWriter) p2p.MsgReadWriter { 61 if !metrics.Enabled { 62 return rw 63 } 64 return &meteredMsgReadWriter{MsgReadWriter: rw} 65 } 66 67 // Init sets the protocol version used by the stream to know which meters to 68 // increment in case of overlapping message ids between protocol versions. 69 func (rw *meteredMsgReadWriter) Init(version int) { 70 rw.version = version 71 } 72 73 func (rw *meteredMsgReadWriter) ReadMsg() (p2p.Msg, error) { 74 // Read the message and short circuit in case of an error 75 msg, err := rw.MsgReadWriter.ReadMsg() 76 if err != nil { 77 return msg, err 78 } 79 // Account for the data traffic 80 packets, traffic := miscInPacketsMeter, miscInTrafficMeter 81 packets.Mark(1) 82 traffic.Mark(int64(msg.Size)) 83 84 return msg, err 85 } 86 87 func (rw *meteredMsgReadWriter) WriteMsg(msg p2p.Msg) error { 88 // Account for the data traffic 89 packets, traffic := miscOutPacketsMeter, miscOutTrafficMeter 90 packets.Mark(1) 91 traffic.Mark(int64(msg.Size)) 92 93 // Send the packet to the p2p layer 94 return rw.MsgReadWriter.WriteMsg(msg) 95 }