diff --git a/cmd/gexp/blocktestcmd.go b/cmd/gexp/blocktestcmd.go index 8b759e0a38..cec14509a5 100644 --- a/cmd/gexp/blocktestcmd.go +++ b/cmd/gexp/blocktestcmd.go @@ -22,7 +22,7 @@ import ( "github.com/codegangsta/cli" "github.com/expanse-project/go-expanse/cmd/utils" - "github.com/expanse-project/go-expanse/eth" + "github.com/expanse-project/go-expanse/exp" "github.com/expanse-project/go-expanse/ethdb" "github.com/expanse-project/go-expanse/tests" ) diff --git a/eth/fetcher/metrics.go b/eth/fetcher/metrics.go deleted file mode 100644 index 9dad34e6a0..0000000000 --- a/eth/fetcher/metrics.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2015 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Contains the metrics collected by the fetcher. - -package fetcher - -import ( - "github.com/expanse-project/go-expanse/metrics" -) - -var ( - propAnnounceInMeter = metrics.NewMeter("eth/fetcher/prop/announces/in") - propAnnounceOutTimer = metrics.NewTimer("eth/fetcher/prop/announces/out") - propAnnounceDropMeter = metrics.NewMeter("eth/fetcher/prop/announces/drop") - propAnnounceDOSMeter = metrics.NewMeter("eth/fetcher/prop/announces/dos") - - propBroadcastInMeter = metrics.NewMeter("eth/fetcher/prop/broadcasts/in") - propBroadcastOutTimer = metrics.NewTimer("eth/fetcher/prop/broadcasts/out") - propBroadcastDropMeter = metrics.NewMeter("eth/fetcher/prop/broadcasts/drop") - propBroadcastDOSMeter = metrics.NewMeter("eth/fetcher/prop/broadcasts/dos") - - blockFetchMeter = metrics.NewMeter("eth/fetcher/fetch/blocks") - headerFetchMeter = metrics.NewMeter("eth/fetcher/fetch/headers") - bodyFetchMeter = metrics.NewMeter("eth/fetcher/fetch/bodies") - - blockFilterInMeter = metrics.NewMeter("eth/fetcher/filter/blocks/in") - blockFilterOutMeter = metrics.NewMeter("eth/fetcher/filter/blocks/out") - headerFilterInMeter = metrics.NewMeter("eth/fetcher/filter/headers/in") - headerFilterOutMeter = metrics.NewMeter("eth/fetcher/filter/headers/out") - bodyFilterInMeter = metrics.NewMeter("eth/fetcher/filter/bodies/in") - bodyFilterOutMeter = metrics.NewMeter("eth/fetcher/filter/bodies/out") -) diff --git a/eth/metrics.go b/eth/metrics.go deleted file mode 100644 index 3e38d62c2c..0000000000 --- a/eth/metrics.go +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright 2015 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package eth - -import ( - "github.com/expanse-project/go-expanse/metrics" - "github.com/expanse-project/go-expanse/p2p" -) - -var ( - propTxnInPacketsMeter = metrics.NewMeter("eth/prop/txns/in/packets") - propTxnInTrafficMeter = metrics.NewMeter("eth/prop/txns/in/traffic") - propTxnOutPacketsMeter = metrics.NewMeter("eth/prop/txns/out/packets") - propTxnOutTrafficMeter = metrics.NewMeter("eth/prop/txns/out/traffic") - propHashInPacketsMeter = metrics.NewMeter("eth/prop/hashes/in/packets") - propHashInTrafficMeter = metrics.NewMeter("eth/prop/hashes/in/traffic") - propHashOutPacketsMeter = metrics.NewMeter("eth/prop/hashes/out/packets") - propHashOutTrafficMeter = metrics.NewMeter("eth/prop/hashes/out/traffic") - propBlockInPacketsMeter = metrics.NewMeter("eth/prop/blocks/in/packets") - propBlockInTrafficMeter = metrics.NewMeter("eth/prop/blocks/in/traffic") - propBlockOutPacketsMeter = metrics.NewMeter("eth/prop/blocks/out/packets") - propBlockOutTrafficMeter = metrics.NewMeter("eth/prop/blocks/out/traffic") - reqHashInPacketsMeter = metrics.NewMeter("eth/req/hashes/in/packets") - reqHashInTrafficMeter = metrics.NewMeter("eth/req/hashes/in/traffic") - reqHashOutPacketsMeter = metrics.NewMeter("eth/req/hashes/out/packets") - reqHashOutTrafficMeter = metrics.NewMeter("eth/req/hashes/out/traffic") - reqBlockInPacketsMeter = metrics.NewMeter("eth/req/blocks/in/packets") - reqBlockInTrafficMeter = metrics.NewMeter("eth/req/blocks/in/traffic") - reqBlockOutPacketsMeter = metrics.NewMeter("eth/req/blocks/out/packets") - reqBlockOutTrafficMeter = metrics.NewMeter("eth/req/blocks/out/traffic") - reqHeaderInPacketsMeter = metrics.NewMeter("eth/req/headers/in/packets") - reqHeaderInTrafficMeter = metrics.NewMeter("eth/req/headers/in/traffic") - reqHeaderOutPacketsMeter = metrics.NewMeter("eth/req/headers/out/packets") - reqHeaderOutTrafficMeter = metrics.NewMeter("eth/req/headers/out/traffic") - reqBodyInPacketsMeter = metrics.NewMeter("eth/req/bodies/in/packets") - reqBodyInTrafficMeter = metrics.NewMeter("eth/req/bodies/in/traffic") - reqBodyOutPacketsMeter = metrics.NewMeter("eth/req/bodies/out/packets") - reqBodyOutTrafficMeter = metrics.NewMeter("eth/req/bodies/out/traffic") - reqStateInPacketsMeter = metrics.NewMeter("eth/req/states/in/packets") - reqStateInTrafficMeter = metrics.NewMeter("eth/req/states/in/traffic") - reqStateOutPacketsMeter = metrics.NewMeter("eth/req/states/out/packets") - reqStateOutTrafficMeter = metrics.NewMeter("eth/req/states/out/traffic") - reqReceiptInPacketsMeter = metrics.NewMeter("eth/req/receipts/in/packets") - reqReceiptInTrafficMeter = metrics.NewMeter("eth/req/receipts/in/traffic") - reqReceiptOutPacketsMeter = metrics.NewMeter("eth/req/receipts/out/packets") - reqReceiptOutTrafficMeter = metrics.NewMeter("eth/req/receipts/out/traffic") - miscInPacketsMeter = metrics.NewMeter("eth/misc/in/packets") - miscInTrafficMeter = metrics.NewMeter("eth/misc/in/traffic") - miscOutPacketsMeter = metrics.NewMeter("eth/misc/out/packets") - miscOutTrafficMeter = metrics.NewMeter("eth/misc/out/traffic") -) - -// meteredMsgReadWriter is a wrapper around a p2p.MsgReadWriter, capable of -// accumulating the above defined metrics based on the data stream contents. -type meteredMsgReadWriter struct { - p2p.MsgReadWriter // Wrapped message stream to meter - version int // Protocol version to select correct meters -} - -// newMeteredMsgWriter wraps a p2p MsgReadWriter with metering support. If the -// metrics system is disabled, this fucntion returns the original object. -func newMeteredMsgWriter(rw p2p.MsgReadWriter) p2p.MsgReadWriter { - if !metrics.Enabled { - return rw - } - return &meteredMsgReadWriter{MsgReadWriter: rw} -} - -// Init sets the protocol version used by the stream to know which meters to -// increment in case of overlapping message ids between protocol versions. -func (rw *meteredMsgReadWriter) Init(version int) { - rw.version = version -} - -func (rw *meteredMsgReadWriter) ReadMsg() (p2p.Msg, error) { - // Read the message and short circuit in case of an error - msg, err := rw.MsgReadWriter.ReadMsg() - if err != nil { - return msg, err - } - // Account for the data traffic - packets, traffic := miscInPacketsMeter, miscInTrafficMeter - switch { - case rw.version < eth62 && msg.Code == BlockHashesMsg: - packets, traffic = reqHashInPacketsMeter, reqHashInTrafficMeter - case rw.version < eth62 && msg.Code == BlocksMsg: - packets, traffic = reqBlockInPacketsMeter, reqBlockInTrafficMeter - - case rw.version >= eth62 && msg.Code == BlockHeadersMsg: - packets, traffic = reqBlockInPacketsMeter, reqBlockInTrafficMeter - case rw.version >= eth62 && msg.Code == BlockBodiesMsg: - packets, traffic = reqBodyInPacketsMeter, reqBodyInTrafficMeter - - case rw.version >= eth63 && msg.Code == NodeDataMsg: - packets, traffic = reqStateInPacketsMeter, reqStateInTrafficMeter - case rw.version >= eth63 && msg.Code == ReceiptsMsg: - packets, traffic = reqReceiptInPacketsMeter, reqReceiptInTrafficMeter - - case msg.Code == NewBlockHashesMsg: - packets, traffic = propHashInPacketsMeter, propHashInTrafficMeter - case msg.Code == NewBlockMsg: - packets, traffic = propBlockInPacketsMeter, propBlockInTrafficMeter - case msg.Code == TxMsg: - packets, traffic = propTxnInPacketsMeter, propTxnInTrafficMeter - } - packets.Mark(1) - traffic.Mark(int64(msg.Size)) - - return msg, err -} - -func (rw *meteredMsgReadWriter) WriteMsg(msg p2p.Msg) error { - // Account for the data traffic - packets, traffic := miscOutPacketsMeter, miscOutTrafficMeter - switch { - case rw.version < eth62 && msg.Code == BlockHashesMsg: - packets, traffic = reqHashOutPacketsMeter, reqHashOutTrafficMeter - case rw.version < eth62 && msg.Code == BlocksMsg: - packets, traffic = reqBlockOutPacketsMeter, reqBlockOutTrafficMeter - - case rw.version >= eth62 && msg.Code == BlockHeadersMsg: - packets, traffic = reqHeaderOutPacketsMeter, reqHeaderOutTrafficMeter - case rw.version >= eth62 && msg.Code == BlockBodiesMsg: - packets, traffic = reqBodyOutPacketsMeter, reqBodyOutTrafficMeter - - case rw.version >= eth63 && msg.Code == NodeDataMsg: - packets, traffic = reqStateOutPacketsMeter, reqStateOutTrafficMeter - case rw.version >= eth63 && msg.Code == ReceiptsMsg: - packets, traffic = reqReceiptOutPacketsMeter, reqReceiptOutTrafficMeter - - case msg.Code == NewBlockHashesMsg: - packets, traffic = propHashOutPacketsMeter, propHashOutTrafficMeter - case msg.Code == NewBlockMsg: - packets, traffic = propBlockOutPacketsMeter, propBlockOutTrafficMeter - case msg.Code == TxMsg: - packets, traffic = propTxnOutPacketsMeter, propTxnOutTrafficMeter - } - packets.Mark(1) - traffic.Mark(int64(msg.Size)) - - // Send the packet to the p2p layer - return rw.MsgReadWriter.WriteMsg(msg) -} diff --git a/eth/downloader/metrics.go b/exp/downloader/metrics.go similarity index 100% rename from eth/downloader/metrics.go rename to exp/downloader/metrics.go diff --git a/exp/fetcher/metrics.go b/exp/fetcher/metrics.go index 7bb8cd5c4b..9dad34e6a0 100644 --- a/exp/fetcher/metrics.go +++ b/exp/fetcher/metrics.go @@ -1,18 +1,18 @@ -// Copyright 2015 The go-expanse Authors -// This file is part of the go-expanse library. +// Copyright 2015 The go-ethereum Authors +// This file is part of the go-ethereum library. // -// The go-expanse library is free software: you can redistribute it and/or modify +// The go-ethereum library is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // -// The go-expanse library is distributed in the hope that it will be useful, +// The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License -// along with the go-expanse library. If not, see . +// along with the go-ethereum library. If not, see . // Contains the metrics collected by the fetcher. @@ -23,10 +23,24 @@ import ( ) var ( - announceMeter = metrics.NewMeter("exp/sync/RemoteAnnounces") - announceTimer = metrics.NewTimer("exp/sync/LocalAnnounces") - broadcastMeter = metrics.NewMeter("exp/sync/RemoteBroadcasts") - broadcastTimer = metrics.NewTimer("exp/sync/LocalBroadcasts") - discardMeter = metrics.NewMeter("exp/sync/DiscardedBlocks") - futureMeter = metrics.NewMeter("exp/sync/FutureBlocks") + propAnnounceInMeter = metrics.NewMeter("eth/fetcher/prop/announces/in") + propAnnounceOutTimer = metrics.NewTimer("eth/fetcher/prop/announces/out") + propAnnounceDropMeter = metrics.NewMeter("eth/fetcher/prop/announces/drop") + propAnnounceDOSMeter = metrics.NewMeter("eth/fetcher/prop/announces/dos") + + propBroadcastInMeter = metrics.NewMeter("eth/fetcher/prop/broadcasts/in") + propBroadcastOutTimer = metrics.NewTimer("eth/fetcher/prop/broadcasts/out") + propBroadcastDropMeter = metrics.NewMeter("eth/fetcher/prop/broadcasts/drop") + propBroadcastDOSMeter = metrics.NewMeter("eth/fetcher/prop/broadcasts/dos") + + blockFetchMeter = metrics.NewMeter("eth/fetcher/fetch/blocks") + headerFetchMeter = metrics.NewMeter("eth/fetcher/fetch/headers") + bodyFetchMeter = metrics.NewMeter("eth/fetcher/fetch/bodies") + + blockFilterInMeter = metrics.NewMeter("eth/fetcher/filter/blocks/in") + blockFilterOutMeter = metrics.NewMeter("eth/fetcher/filter/blocks/out") + headerFilterInMeter = metrics.NewMeter("eth/fetcher/filter/headers/in") + headerFilterOutMeter = metrics.NewMeter("eth/fetcher/filter/headers/out") + bodyFilterInMeter = metrics.NewMeter("eth/fetcher/filter/bodies/in") + bodyFilterOutMeter = metrics.NewMeter("eth/fetcher/filter/bodies/out") ) diff --git a/exp/handler.go b/exp/handler.go index f382f0a48e..7695b1b250 100644 --- a/exp/handler.go +++ b/exp/handler.go @@ -26,8 +26,8 @@ import ( "github.com/expanse-project/go-expanse/common" "github.com/expanse-project/go-expanse/core" "github.com/expanse-project/go-expanse/core/types" - "github.com/expanse-project/go-expanse/eth/downloader" - "github.com/expanse-project/go-expanse/eth/fetcher" + "github.com/expanse-project/go-expanse/exp/downloader" + "github.com/expanse-project/go-expanse/exp/fetcher" "github.com/expanse-project/go-expanse/ethdb" "github.com/expanse-project/go-expanse/event" "github.com/expanse-project/go-expanse/logger" diff --git a/eth/handler_test.go b/exp/handler_test.go similarity index 99% rename from eth/handler_test.go rename to exp/handler_test.go index a3970e018b..6d12539726 100644 --- a/eth/handler_test.go +++ b/exp/handler_test.go @@ -1,4 +1,4 @@ -package eth +package exp import ( "fmt" @@ -11,7 +11,7 @@ import ( "github.com/expanse-project/go-expanse/core/state" "github.com/expanse-project/go-expanse/core/types" "github.com/expanse-project/go-expanse/crypto" - "github.com/expanse-project/go-expanse/eth/downloader" + "github.com/expanse-project/go-expanse/exp/downloader" "github.com/expanse-project/go-expanse/ethdb" "github.com/expanse-project/go-expanse/p2p" "github.com/expanse-project/go-expanse/params" diff --git a/eth/helper_test.go b/exp/helper_test.go similarity index 99% rename from eth/helper_test.go rename to exp/helper_test.go index 012404ff12..578c2020dc 100644 --- a/eth/helper_test.go +++ b/exp/helper_test.go @@ -1,7 +1,7 @@ // This file contains some shares testing functionality, common to multiple // different files and modules being tested. -package eth +package exp import ( "crypto/rand" diff --git a/exp/metrics.go b/exp/metrics.go index 2bce1e89da..f18d8bcb24 100644 --- a/exp/metrics.go +++ b/exp/metrics.go @@ -1,44 +1,157 @@ -// Copyright 2015 The go-expanse Authors -// This file is part of the go-expanse library. +// Copyright 2015 The go-ethereum Authors +// This file is part of the go-ethereum library. // -// The go-expanse library is free software: you can redistribute it and/or modify +// The go-ethereum library is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // -// The go-expanse library is distributed in the hope that it will be useful, +// The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License -// along with the go-expanse library. If not, see . +// along with the go-ethereum library. If not, see . package exp import ( "github.com/expanse-project/go-expanse/metrics" + "github.com/expanse-project/go-expanse/p2p" ) var ( - propTxnInPacketsMeter = metrics.NewMeter("exp/prop/txns/in/packets") - propTxnInTrafficMeter = metrics.NewMeter("exp/prop/txns/in/traffic") - propTxnOutPacketsMeter = metrics.NewMeter("exp/prop/txns/out/packets") - propTxnOutTrafficMeter = metrics.NewMeter("exp/prop/txns/out/traffic") - propHashInPacketsMeter = metrics.NewMeter("exp/prop/hashes/in/packets") - propHashInTrafficMeter = metrics.NewMeter("exp/prop/hashes/in/traffic") - propHashOutPacketsMeter = metrics.NewMeter("exp/prop/hashes/out/packets") - propHashOutTrafficMeter = metrics.NewMeter("exp/prop/hashes/out/traffic") - propBlockInPacketsMeter = metrics.NewMeter("exp/prop/blocks/in/packets") - propBlockInTrafficMeter = metrics.NewMeter("exp/prop/blocks/in/traffic") - propBlockOutPacketsMeter = metrics.NewMeter("exp/prop/blocks/out/packets") - propBlockOutTrafficMeter = metrics.NewMeter("exp/prop/blocks/out/traffic") - reqHashInPacketsMeter = metrics.NewMeter("exp/req/hashes/in/packets") - reqHashInTrafficMeter = metrics.NewMeter("exp/req/hashes/in/traffic") - reqHashOutPacketsMeter = metrics.NewMeter("exp/req/hashes/out/packets") - reqHashOutTrafficMeter = metrics.NewMeter("exp/req/hashes/out/traffic") - reqBlockInPacketsMeter = metrics.NewMeter("exp/req/blocks/in/packets") - reqBlockInTrafficMeter = metrics.NewMeter("exp/req/blocks/in/traffic") - reqBlockOutPacketsMeter = metrics.NewMeter("exp/req/blocks/out/packets") - reqBlockOutTrafficMeter = metrics.NewMeter("exp/req/blocks/out/traffic") + propTxnInPacketsMeter = metrics.NewMeter("eth/prop/txns/in/packets") + propTxnInTrafficMeter = metrics.NewMeter("eth/prop/txns/in/traffic") + propTxnOutPacketsMeter = metrics.NewMeter("eth/prop/txns/out/packets") + propTxnOutTrafficMeter = metrics.NewMeter("eth/prop/txns/out/traffic") + propHashInPacketsMeter = metrics.NewMeter("eth/prop/hashes/in/packets") + propHashInTrafficMeter = metrics.NewMeter("eth/prop/hashes/in/traffic") + propHashOutPacketsMeter = metrics.NewMeter("eth/prop/hashes/out/packets") + propHashOutTrafficMeter = metrics.NewMeter("eth/prop/hashes/out/traffic") + propBlockInPacketsMeter = metrics.NewMeter("eth/prop/blocks/in/packets") + propBlockInTrafficMeter = metrics.NewMeter("eth/prop/blocks/in/traffic") + propBlockOutPacketsMeter = metrics.NewMeter("eth/prop/blocks/out/packets") + propBlockOutTrafficMeter = metrics.NewMeter("eth/prop/blocks/out/traffic") + reqHashInPacketsMeter = metrics.NewMeter("eth/req/hashes/in/packets") + reqHashInTrafficMeter = metrics.NewMeter("eth/req/hashes/in/traffic") + reqHashOutPacketsMeter = metrics.NewMeter("eth/req/hashes/out/packets") + reqHashOutTrafficMeter = metrics.NewMeter("eth/req/hashes/out/traffic") + reqBlockInPacketsMeter = metrics.NewMeter("eth/req/blocks/in/packets") + reqBlockInTrafficMeter = metrics.NewMeter("eth/req/blocks/in/traffic") + reqBlockOutPacketsMeter = metrics.NewMeter("eth/req/blocks/out/packets") + reqBlockOutTrafficMeter = metrics.NewMeter("eth/req/blocks/out/traffic") + reqHeaderInPacketsMeter = metrics.NewMeter("eth/req/headers/in/packets") + reqHeaderInTrafficMeter = metrics.NewMeter("eth/req/headers/in/traffic") + reqHeaderOutPacketsMeter = metrics.NewMeter("eth/req/headers/out/packets") + reqHeaderOutTrafficMeter = metrics.NewMeter("eth/req/headers/out/traffic") + reqBodyInPacketsMeter = metrics.NewMeter("eth/req/bodies/in/packets") + reqBodyInTrafficMeter = metrics.NewMeter("eth/req/bodies/in/traffic") + reqBodyOutPacketsMeter = metrics.NewMeter("eth/req/bodies/out/packets") + reqBodyOutTrafficMeter = metrics.NewMeter("eth/req/bodies/out/traffic") + reqStateInPacketsMeter = metrics.NewMeter("eth/req/states/in/packets") + reqStateInTrafficMeter = metrics.NewMeter("eth/req/states/in/traffic") + reqStateOutPacketsMeter = metrics.NewMeter("eth/req/states/out/packets") + reqStateOutTrafficMeter = metrics.NewMeter("eth/req/states/out/traffic") + reqReceiptInPacketsMeter = metrics.NewMeter("eth/req/receipts/in/packets") + reqReceiptInTrafficMeter = metrics.NewMeter("eth/req/receipts/in/traffic") + reqReceiptOutPacketsMeter = metrics.NewMeter("eth/req/receipts/out/packets") + reqReceiptOutTrafficMeter = metrics.NewMeter("eth/req/receipts/out/traffic") + miscInPacketsMeter = metrics.NewMeter("eth/misc/in/packets") + miscInTrafficMeter = metrics.NewMeter("eth/misc/in/traffic") + miscOutPacketsMeter = metrics.NewMeter("eth/misc/out/packets") + miscOutTrafficMeter = metrics.NewMeter("eth/misc/out/traffic") ) + +// meteredMsgReadWriter is a wrapper around a p2p.MsgReadWriter, capable of +// accumulating the above defined metrics based on the data stream contents. +type meteredMsgReadWriter struct { + p2p.MsgReadWriter // Wrapped message stream to meter + version int // Protocol version to select correct meters +} + +// newMeteredMsgWriter wraps a p2p MsgReadWriter with metering support. If the +// metrics system is disabled, this fucntion returns the original object. +func newMeteredMsgWriter(rw p2p.MsgReadWriter) p2p.MsgReadWriter { + if !metrics.Enabled { + return rw + } + return &meteredMsgReadWriter{MsgReadWriter: rw} +} + +// Init sets the protocol version used by the stream to know which meters to +// increment in case of overlapping message ids between protocol versions. +func (rw *meteredMsgReadWriter) Init(version int) { + rw.version = version +} + +func (rw *meteredMsgReadWriter) ReadMsg() (p2p.Msg, error) { + // Read the message and short circuit in case of an error + msg, err := rw.MsgReadWriter.ReadMsg() + if err != nil { + return msg, err + } + // Account for the data traffic + packets, traffic := miscInPacketsMeter, miscInTrafficMeter + switch { + case rw.version < eth62 && msg.Code == BlockHashesMsg: + packets, traffic = reqHashInPacketsMeter, reqHashInTrafficMeter + case rw.version < eth62 && msg.Code == BlocksMsg: + packets, traffic = reqBlockInPacketsMeter, reqBlockInTrafficMeter + + case rw.version >= eth62 && msg.Code == BlockHeadersMsg: + packets, traffic = reqBlockInPacketsMeter, reqBlockInTrafficMeter + case rw.version >= eth62 && msg.Code == BlockBodiesMsg: + packets, traffic = reqBodyInPacketsMeter, reqBodyInTrafficMeter + + case rw.version >= eth63 && msg.Code == NodeDataMsg: + packets, traffic = reqStateInPacketsMeter, reqStateInTrafficMeter + case rw.version >= eth63 && msg.Code == ReceiptsMsg: + packets, traffic = reqReceiptInPacketsMeter, reqReceiptInTrafficMeter + + case msg.Code == NewBlockHashesMsg: + packets, traffic = propHashInPacketsMeter, propHashInTrafficMeter + case msg.Code == NewBlockMsg: + packets, traffic = propBlockInPacketsMeter, propBlockInTrafficMeter + case msg.Code == TxMsg: + packets, traffic = propTxnInPacketsMeter, propTxnInTrafficMeter + } + packets.Mark(1) + traffic.Mark(int64(msg.Size)) + + return msg, err +} + +func (rw *meteredMsgReadWriter) WriteMsg(msg p2p.Msg) error { + // Account for the data traffic + packets, traffic := miscOutPacketsMeter, miscOutTrafficMeter + switch { + case rw.version < eth62 && msg.Code == BlockHashesMsg: + packets, traffic = reqHashOutPacketsMeter, reqHashOutTrafficMeter + case rw.version < eth62 && msg.Code == BlocksMsg: + packets, traffic = reqBlockOutPacketsMeter, reqBlockOutTrafficMeter + + case rw.version >= eth62 && msg.Code == BlockHeadersMsg: + packets, traffic = reqHeaderOutPacketsMeter, reqHeaderOutTrafficMeter + case rw.version >= eth62 && msg.Code == BlockBodiesMsg: + packets, traffic = reqBodyOutPacketsMeter, reqBodyOutTrafficMeter + + case rw.version >= eth63 && msg.Code == NodeDataMsg: + packets, traffic = reqStateOutPacketsMeter, reqStateOutTrafficMeter + case rw.version >= eth63 && msg.Code == ReceiptsMsg: + packets, traffic = reqReceiptOutPacketsMeter, reqReceiptOutTrafficMeter + + case msg.Code == NewBlockHashesMsg: + packets, traffic = propHashOutPacketsMeter, propHashOutTrafficMeter + case msg.Code == NewBlockMsg: + packets, traffic = propBlockOutPacketsMeter, propBlockOutTrafficMeter + case msg.Code == TxMsg: + packets, traffic = propTxnOutPacketsMeter, propTxnOutTrafficMeter + } + packets.Mark(1) + traffic.Mark(int64(msg.Size)) + + // Send the packet to the p2p layer + return rw.MsgReadWriter.WriteMsg(msg) +} diff --git a/exp/peer.go b/exp/peer.go index b31f832eca..786963af13 100644 --- a/exp/peer.go +++ b/exp/peer.go @@ -25,7 +25,7 @@ import ( "github.com/expanse-project/go-expanse/common" "github.com/expanse-project/go-expanse/core/types" - "github.com/expanse-project/go-expanse/eth/downloader" + "github.com/expanse-project/go-expanse/exp/downloader" "github.com/expanse-project/go-expanse/logger" "github.com/expanse-project/go-expanse/logger/glog" "github.com/expanse-project/go-expanse/p2p" diff --git a/jsre/expanse_js.go b/jsre/expanse_js.go index aa46a776fd..2d5c685b40 100644 --- a/jsre/expanse_js.go +++ b/jsre/expanse_js.go @@ -6081,7 +6081,7 @@ module.exports = IsSyncing; },{"../utils/utils":20,"./formatters":29,"./method":35,"./requestmanager":43}],45:[function(require,module,exports){ /* - This file is part of ethereum.js. + This file is part of expanse.js. ethereum.js is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by diff --git a/rpc/api/eth.go b/rpc/api/eth.go index 134c3c4781..4434524089 100644 --- a/rpc/api/eth.go +++ b/rpc/api/eth.go @@ -97,6 +97,54 @@ var ( "eth_resend": (*ethApi).Resend, "eth_pendingTransactions": (*ethApi).PendingTransactions, "eth_getTransactionReceipt": (*ethApi).GetTransactionReceipt, + "exp_accounts": (*ethApi).Accounts, + "exp_blockNumber": (*ethApi).BlockNumber, + "exp_getBalance": (*ethApi).GetBalance, + "exp_protocolVersion": (*ethApi).ProtocolVersion, + "exp_coinbase": (*ethApi).Coinbase, + "exp_mining": (*ethApi).IsMining, + "exp_syncing": (*ethApi).IsSyncing, + "exp_gasPrice": (*ethApi).GasPrice, + "exp_getStorage": (*ethApi).GetStorage, + "exp_storageAt": (*ethApi).GetStorage, + "exp_getStorageAt": (*ethApi).GetStorageAt, + "exp_getTransactionCount": (*ethApi).GetTransactionCount, + "exp_getBlockTransactionCountByHash": (*ethApi).GetBlockTransactionCountByHash, + "exp_getBlockTransactionCountByNumber": (*ethApi).GetBlockTransactionCountByNumber, + "exp_getUncleCountByBlockHash": (*ethApi).GetUncleCountByBlockHash, + "exp_getUncleCountByBlockNumber": (*ethApi).GetUncleCountByBlockNumber, + "exp_getData": (*ethApi).GetData, + "exp_getCode": (*ethApi).GetData, + "exp_sign": (*ethApi).Sign, + "exp_sendRawTransaction": (*ethApi).SendRawTransaction, + "exp_sendTransaction": (*ethApi).SendTransaction, + "exp_transact": (*ethApi).SendTransaction, + "exp_estimateGas": (*ethApi).EstimateGas, + "exp_call": (*ethApi).Call, + "exp_flush": (*ethApi).Flush, + "exp_getBlockByHash": (*ethApi).GetBlockByHash, + "exp_getBlockByNumber": (*ethApi).GetBlockByNumber, + "exp_getTransactionByHash": (*ethApi).GetTransactionByHash, + "exp_getTransactionByBlockNumberAndIndex": (*ethApi).GetTransactionByBlockNumberAndIndex, + "exp_getTransactionByBlockHashAndIndex": (*ethApi).GetTransactionByBlockHashAndIndex, + "exp_getUncleByBlockHashAndIndex": (*ethApi).GetUncleByBlockHashAndIndex, + "exp_getUncleByBlockNumberAndIndex": (*ethApi).GetUncleByBlockNumberAndIndex, + "exp_getCompilers": (*ethApi).GetCompilers, + "exp_compileSolidity": (*ethApi).CompileSolidity, + "exp_newFilter": (*ethApi).NewFilter, + "exp_newBlockFilter": (*ethApi).NewBlockFilter, + "exp_newPendingTransactionFilter": (*ethApi).NewPendingTransactionFilter, + "exp_uninstallFilter": (*ethApi).UninstallFilter, + "exp_getFilterChanges": (*ethApi).GetFilterChanges, + "exp_getFilterLogs": (*ethApi).GetFilterLogs, + "exp_getLogs": (*ethApi).GetLogs, + "exp_hashrate": (*ethApi).Hashrate, + "exp_getWork": (*ethApi).GetWork, + "exp_submitWork": (*ethApi).SubmitWork, + "exp_submitHashrate": (*ethApi).SubmitHashrate, + "exp_resend": (*ethApi).Resend, + "exp_pendingTransactions": (*ethApi).PendingTransactions, + "exp_getTransactionReceipt": (*ethApi).GetTransactionReceipt, } ) @@ -168,8 +216,8 @@ func (self *ethApi) IsMining(req *shared.Request) (interface{}, error) { } func (self *ethApi) IsSyncing(req *shared.Request) (interface{}, error) { - current := self.ethereum.ChainManager().CurrentBlock().NumberU64() - origin, height := self.ethereum.Downloader().Boundaries() + current := self.expanse.ChainManager().CurrentBlock().NumberU64() + origin, height := self.expanse.Downloader().Boundaries() if current < height { return map[string]interface{}{ diff --git a/rpc/comms/ipc_unix.go b/rpc/comms/ipc_unix.go index 203f65959a..d5e1552867 100644 --- a/rpc/comms/ipc_unix.go +++ b/rpc/comms/ipc_unix.go @@ -71,7 +71,7 @@ func (self *ipcClient) reconnect() error { } -func startIpc(cfg IpcConfig, codec codec.Codec, initializer func(conn net.Conn) (shared.EthereumApi, error)) error { +func startIpc(cfg IpcConfig, codec codec.Codec, initializer func(conn net.Conn) (shared.ExpanseApi, error)) error { // Ensure the IPC path exists and remove any previous leftover if err := os.MkdirAll(filepath.Dir(cfg.Endpoint), 0751); err != nil { return err diff --git a/rpc/jeth.go b/rpc/jeth.go index 86969bdadb..479a937fc0 100644 --- a/rpc/jeth.go +++ b/rpc/jeth.go @@ -40,7 +40,7 @@ type Jeth struct { } -func NewJeth(ethApi shared.EthereumApi, re *jsre.JSRE, client comms.EthereumClient, fe xeth.Frontend) *Jeth { +func NewJeth(ethApi shared.ExpanseApi, re *jsre.JSRE, client comms.ExpanseClient, fe xeth.Frontend) *Jeth { return &Jeth{ethApi, re, client, fe} } diff --git a/tests/block_test_util.go b/tests/block_test_util.go index 3ac6a5fc9b..536af3fcab 100644 --- a/tests/block_test_util.go +++ b/tests/block_test_util.go @@ -177,13 +177,13 @@ func runBlockTest(test *BlockTest) error { // import pre accounts - _, err = test.InsertPreState(ethereum) + _, err = test.InsertPreState(expanse) if err != nil { return fmt.Errorf("InsertPreState: %v", err) } - cm := ethereum.ChainManager() + cm := expanse.ChainManager() validBlocks, err := test.TryBlocksInsert(cm) if err != nil { return err