aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTaylor Gerring <taylor.gerring@gmail.com>2015-02-11 02:21:13 +0800
committerTaylor Gerring <taylor.gerring@gmail.com>2015-02-11 02:21:13 +0800
commitd53e5646ecfce75790fea45a1ee552494ef88668 (patch)
treef00d3e151227b4e31be2293401692927473bc17e
parentc14900dbb007af8aefc5f5583f3c17a613c66802 (diff)
downloadgo-tangerine-d53e5646ecfce75790fea45a1ee552494ef88668.tar.gz
go-tangerine-d53e5646ecfce75790fea45a1ee552494ef88668.tar.zst
go-tangerine-d53e5646ecfce75790fea45a1ee552494ef88668.zip
Use strongly-typed objects
-rw-r--r--eth/backend.go15
-rw-r--r--logger/loggers.go17
-rw-r--r--logger/types.go294
-rw-r--r--p2p/server.go55
4 files changed, 305 insertions, 76 deletions
diff --git a/eth/backend.go b/eth/backend.go
index 5057aa3aa..cdccd3940 100644
--- a/eth/backend.go
+++ b/eth/backend.go
@@ -222,14 +222,13 @@ func (s *Ethereum) MaxPeers() int {
// Start the ethereum
func (s *Ethereum) Start(seed bool) error {
- evd := map[string]interface{}{
- "version_string": s.ClientIdentity().String(),
- "guid": ethutil.Bytes2Hex(s.ClientIdentity().Pubkey()),
- "level": "debug",
- "coinbase": ethutil.Bytes2Hex(s.KeyManager().Address()),
- "eth_version": ProtocolVersion,
- }
- jsonlogger.LogJson("starting", evd)
+ jsonlogger.LogJson("starting", &ethlogger.LogStarting{
+ ClientString: s.ClientIdentity().String(),
+ Guid: ethutil.Bytes2Hex(s.ClientIdentity().Pubkey()),
+ Coinbase: ethutil.Bytes2Hex(s.KeyManager().Address()),
+ ProtocolVersion: ProtocolVersion,
+ })
+
err := s.net.Start()
if err != nil {
return err
diff --git a/logger/loggers.go b/logger/loggers.go
index cd465ce87..36bc38116 100644
--- a/logger/loggers.go
+++ b/logger/loggers.go
@@ -16,7 +16,6 @@ import (
"encoding/json"
"fmt"
"os"
- "time"
)
type LogLevel uint32
@@ -121,20 +120,12 @@ func NewJsonLogger() *JsonLogger {
return &JsonLogger{}
}
-func (logger *JsonLogger) LogJson(msgname string, dict map[string]interface{}) {
- if _, ok := dict["ts"]; !ok {
- dict["ts"] = time.Now().Local().Format(time.RFC3339Nano)
- }
-
- // FIX
- if _, ok := dict["level"]; !ok {
- dict["level"] = "debug"
- }
-
+func (logger *JsonLogger) LogJson(msgname string, v interface{}) {
obj := map[string]interface{}{
- msgname: dict,
+ msgname: v,
}
jsontxt, _ := json.Marshal(obj)
- logMessageC <- message{JsonLevel, fmt.Sprintf("%s", jsontxt)}
+ logMessageC <- message{JsonLevel, string(jsontxt)}
+
}
diff --git a/logger/types.go b/logger/types.go
new file mode 100644
index 000000000..ee53394f0
--- /dev/null
+++ b/logger/types.go
@@ -0,0 +1,294 @@
+package logger
+
+import (
+ "time"
+)
+
+type utctime8601 struct{}
+
+func (utctime8601) MarshalJSON() ([]byte, error) {
+ // FIX This should be re-formated for proper ISO 8601
+ return []byte(`"` + time.Now().UTC().Format(time.RFC3339Nano)[:26] + `Z"`), nil
+}
+
+//"starting"
+type LogStarting struct {
+ ClientString string `json:"version_string"`
+ Guid string `json:"guid"`
+ Coinbase string `json:"coinbase"`
+ ProtocolVersion int `json:"eth_version"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"p2p.connecting"
+type P2PConnecting struct {
+ RemoteId string `json:"remote_id"`
+ RemoteEndpoint string `json:"remote_endpoint"`
+ Guid string `json:"guid"`
+ NumConnections int `json:"num_connections"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"p2p.connected"
+type P2PConnected struct {
+ Guid string `json:"guid"`
+ NumConnections int `json:"num_connections"`
+ RemoteId string `json:"remote_id"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"p2p.handshaked"
+type P2PHandshaked struct {
+ RemoteCapabilities []string `json:"remote_capabilities"`
+ RemoteId string `json:"remote_id"`
+ Guid string `json:"guid"`
+ NumConnections int `json:"num_connections"`
+ Ts string `json:"ts"`
+}
+
+//"p2p.disconnected"
+type P2PDisconnected struct {
+ Guid string `json:"guid"`
+ NumConnections int `json:"num_connections"`
+ RemoteId string `json:"remote_id"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"p2p.disconnecting"
+type P2PDisconnecting struct {
+ Reason string `json:"reason"`
+ RemoteId string `json:"remote_id"`
+ Guid string `json:"guid"`
+ NumConnections int `json:"num_connections"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"p2p.disconnecting.bad_handshake"
+type P2PDisconnectingBadHandshake struct {
+ Reason string `json:"reason"`
+ RemoteId string `json:"remote_id"`
+ Guid string `json:"guid"`
+ NumConnections int `json:"num_connections"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"p2p.disconnecting.bad_protocol"
+type P2PDisconnectingBadProtocol struct {
+ Reason string `json:"reason"`
+ RemoteId string `json:"remote_id"`
+ Guid string `json:"guid"`
+ NumConnections int `json:"num_connections"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"p2p.disconnecting.reputation"
+type P2PDisconnectingReputation struct {
+ Reason string `json:"reason"`
+ RemoteId string `json:"remote_id"`
+ Guid string `json:"guid"`
+ NumConnections int `json:"num_connections"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"p2p.disconnecting.dht"
+type P2PDisconnectingDHT struct {
+ Reason string `json:"reason"`
+ RemoteId string `json:"remote_id"`
+ Guid string `json:"guid"`
+ NumConnections int `json:"num_connections"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"p2p.eth.disconnecting.bad_block"
+type P2PEthDisconnectingBadBlock struct {
+ Reason string `json:"reason"`
+ RemoteId string `json:"remote_id"`
+ Guid string `json:"guid"`
+ NumConnections int `json:"num_connections"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"p2p.eth.disconnecting.bad_tx"
+type P2PEthDisconnectingBadTx struct {
+ Reason string `json:"reason"`
+ RemoteId string `json:"remote_id"`
+ Guid string `json:"guid"`
+ NumConnections int `json:"num_connections"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"eth.newblock.mined"
+type EthNewBlockMined struct {
+ BlockNumber int `json:"block_number"`
+ HeadHash string `json:"head_hash"`
+ BlockHash string `json:"block_hash"`
+ BlockHexRlp string `json:"block_hexrlp"`
+ BlockDifficulty int `json:"block_difficulty"`
+ Guid string `json:"guid"`
+ BlockPrevHash string `json:"block_prev_hash"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"eth.newblock.broadcasted"
+type EthNewBlockBroadcasted struct {
+ BlockNumber int `json:"block_number"`
+ HeadHash string `json:"head_hash"`
+ BlockHash string `json:"block_hash"`
+ BlockDifficulty int `json:"block_difficulty"`
+ Guid string `json:"guid"`
+ BlockPrevHash string `json:"block_prev_hash"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"eth.newblock.received"
+type EthNewBlockReceived struct {
+ BlockNumber int `json:"block_number"`
+ HeadHash string `json:"head_hash"`
+ BlockHash string `json:"block_hash"`
+ BlockDifficulty int `json:"block_difficulty"`
+ Guid string `json:"guid"`
+ BlockPrevHash string `json:"block_prev_hash"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"eth.newblock.is_known"
+type EthNewBlockIsKnown struct {
+ BlockNumber int `json:"block_number"`
+ HeadHash string `json:"head_hash"`
+ BlockHash string `json:"block_hash"`
+ BlockDifficulty int `json:"block_difficulty"`
+ Guid string `json:"guid"`
+ BlockPrevHash string `json:"block_prev_hash"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"eth.newblock.is_new"
+type EthNewBlockIsNew struct {
+ BlockNumber int `json:"block_number"`
+ HeadHash string `json:"head_hash"`
+ BlockHash string `json:"block_hash"`
+ BlockDifficulty int `json:"block_difficulty"`
+ Guid string `json:"guid"`
+ BlockPrevHash string `json:"block_prev_hash"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"eth.newblock.missing_parent"
+type EthNewBlockMissingParent struct {
+ BlockNumber int `json:"block_number"`
+ HeadHash string `json:"head_hash"`
+ BlockHash string `json:"block_hash"`
+ BlockDifficulty int `json:"block_difficulty"`
+ Guid string `json:"guid"`
+ BlockPrevHash string `json:"block_prev_hash"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"eth.newblock.is_invalid"
+type EthNewBlockIsInvalid struct {
+ BlockNumber int `json:"block_number"`
+ HeadHash string `json:"head_hash"`
+ BlockHash string `json:"block_hash"`
+ BlockDifficulty int `json:"block_difficulty"`
+ Guid string `json:"guid"`
+ BlockPrevHash string `json:"block_prev_hash"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"eth.newblock.chain.is_older"
+type EthNewBlockChainIsOlder struct {
+ BlockNumber int `json:"block_number"`
+ HeadHash string `json:"head_hash"`
+ BlockHash string `json:"block_hash"`
+ BlockDifficulty int `json:"block_difficulty"`
+ Guid string `json:"guid"`
+ BlockPrevHash string `json:"block_prev_hash"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"eth.newblock.chain.is_cannonical"
+type EthNewBlockChainIsCanonical struct {
+ BlockNumber int `json:"block_number"`
+ HeadHash string `json:"head_hash"`
+ BlockHash string `json:"block_hash"`
+ BlockDifficulty int `json:"block_difficulty"`
+ Guid string `json:"guid"`
+ BlockPrevHash string `json:"block_prev_hash"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"eth.newblock.chain.not_cannonical"
+type EthNewBlockChainNotCanonical struct {
+ BlockNumber int `json:"block_number"`
+ HeadHash string `json:"head_hash"`
+ BlockHash string `json:"block_hash"`
+ BlockDifficulty int `json:"block_difficulty"`
+ Guid string `json:"guid"`
+ BlockPrevHash string `json:"block_prev_hash"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"eth.newblock.chain.switched"
+type EthNewBlockChainSwitched struct {
+ BlockNumber int `json:"block_number"`
+ HeadHash string `json:"head_hash"`
+ OldHeadHash string `json:"old_head_hash"`
+ BlockHash string `json:"block_hash"`
+ BlockDifficulty int `json:"block_difficulty"`
+ Guid string `json:"guid"`
+ BlockPrevHash string `json:"block_prev_hash"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"eth.tx.created"
+type EthTxCreated struct {
+ TxHash string `json:"tx_hash"`
+ TxSender string `json:"tx_sender"`
+ TxAddress string `json:"tx_address"`
+ TxHexRLP string `json:"tx_hexrlp"`
+ TxNonce int `json:"tx_nonce"`
+ Guid string `json:"guid"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"eth.tx.received"
+type EthTxReceived struct {
+ TxHash string `json:"tx_hash"`
+ TxAddress string `json:"tx_address"`
+ TxHexRLP string `json:"tx_hexrlp"`
+ RemoteId string `json:"remote_id"`
+ TxNonce int `json:"tx_nonce"`
+ Guid string `json:"guid"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"eth.tx.broadcasted"
+type EthTxBroadcasted struct {
+ TxHash string `json:"tx_hash"`
+ TxSender string `json:"tx_sender"`
+ TxAddress string `json:"tx_address"`
+ TxNonce int `json:"tx_nonce"`
+ Guid string `json:"guid"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"eth.tx.validated"
+type EthTxValidated struct {
+ TxHash string `json:"tx_hash"`
+ TxSender string `json:"tx_sender"`
+ TxAddress string `json:"tx_address"`
+ TxNonce int `json:"tx_nonce"`
+ Guid string `json:"guid"`
+ Ts utctime8601 `json:"ts"`
+}
+
+//"eth.tx.is_invalid"
+type EthTxIsInvalid struct {
+ TxHash string `json:"tx_hash"`
+ TxSender string `json:"tx_sender"`
+ TxAddress string `json:"tx_address"`
+ Reason string `json:"reason"`
+ TxNonce int `json:"tx_nonce"`
+ Guid string `json:"guid"`
+ Ts utctime8601 `json:"ts"`
+}
diff --git a/p2p/server.go b/p2p/server.go
index 7dcbc9d11..ee2d26dbe 100644
--- a/p2p/server.go
+++ b/p2p/server.go
@@ -8,7 +8,6 @@ import (
"sync"
"time"
- "github.com/ethereum/go-ethereum/ethutil"
"github.com/ethereum/go-ethereum/logger"
)
@@ -356,25 +355,9 @@ func (srv *Server) dialLoop() {
// connect to peer via dial out
func (srv *Server) dialPeer(desc *peerAddr, slot int) {
srvlog.Debugf("Dialing %v (slot %d)\n", desc, slot)
- evd := map[string]interface{}{
- "remote_id": ethutil.Bytes2Hex(desc.Pubkey),
- "remote_endpoint": desc.String(),
- "level": "debug",
- "guid": ethutil.Bytes2Hex(srv.Identity.Pubkey()),
- "num_connections": srv.PeerCount(),
- }
- jsonlogger.LogJson("p2p.connecting", evd)
conn, err := srv.Dialer.Dial(desc.Network(), desc.String())
if err != nil {
srvlog.DebugDetailf("dial error: %v", err)
- evd := map[string]interface{}{
- "reason": "dial error",
- "remote_id": desc.String(),
- "level": "debug",
- "guid": ethutil.Bytes2Hex(srv.Identity.Pubkey()),
- "num_connections": srv.PeerCount(),
- }
- jsonlogger.LogJson("p2p.disconnecting", evd)
srv.peerSlots <- slot
return
}
@@ -395,13 +378,6 @@ func (srv *Server) addPeer(conn net.Conn, desc *peerAddr, slot int) *Peer {
srv.peers[slot] = peer
srv.peerCount++
go func() {
- evd := map[string]interface{}{
- "guid": ethutil.Bytes2Hex(srv.Identity.Pubkey()),
- "num_connections": srv.PeerCount(),
- "remote_id": desc.String(),
- "level": "debug",
- }
- jsonlogger.LogJson("p2p.connected", evd)
peer.loop()
srv.peerDisconnect <- peer
}()
@@ -422,36 +398,13 @@ func (srv *Server) removePeer(peer *Peer) {
srv.peers[peer.slot] = nil
// release slot to signal need for a new peer, last!
srv.peerSlots <- peer.slot
- evd := map[string]interface{}{
- "guid": ethutil.Bytes2Hex(srv.Identity.Pubkey()),
- "num_connections": srv.PeerCount(),
- "remote_id": ethutil.Bytes2Hex(peer.Identity().Pubkey()),
- "level": "debug",
- }
- jsonlogger.LogJson("p2p.disconnected", evd)
}
func (srv *Server) verifyPeer(addr *peerAddr) error {
if srv.Blacklist.Exists(addr.Pubkey) {
- evd := map[string]interface{}{
- "reason": "blacklisted",
- "remote_id": addr.String(),
- "level": "debug",
- "guid": ethutil.Bytes2Hex(srv.Identity.Pubkey()),
- "num_connections": srv.PeerCount(),
- }
- jsonlogger.LogJson("p2p.disconnecting.reputation", evd)
return errors.New("blacklisted")
}
if bytes.Equal(srv.Identity.Pubkey()[1:], addr.Pubkey) {
- evd := map[string]interface{}{
- "reason": "not allowed to connect to srv",
- "remote_id": addr.String(),
- "level": "debug",
- "guid": ethutil.Bytes2Hex(srv.Identity.Pubkey()),
- "num_connections": srv.PeerCount(),
- }
- jsonlogger.LogJson("p2p.disconnecting", evd)
return newPeerError(errPubkeyForbidden, "not allowed to connect to srv")
}
srv.lock.RLock()
@@ -460,14 +413,6 @@ func (srv *Server) verifyPeer(addr *peerAddr) error {
if peer != nil {
id := peer.Identity()
if id != nil && bytes.Equal(id.Pubkey(), addr.Pubkey) {
- evd := map[string]interface{}{
- "reason": "already connected",
- "remote_id": addr.String(),
- "level": "debug",
- "guid": ethutil.Bytes2Hex(srv.Identity.Pubkey()),
- "num_connections": srv.PeerCount(),
- }
- jsonlogger.LogJson("p2p.disconnecting", evd)
return errors.New("already connected")
}
}