X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=conn_stats.go;h=0c5bfc784e88d4ce142cff68bb552e681cac9e1e;hb=8dcc4cc187ee73b84620e2db261a58422bebb1b7;hp=06ec23f2cb6eed31c149f65629180bb673bad82e;hpb=25d76e04495c333df1241c8588732c5be4799fe8;p=btrtrc.git diff --git a/conn_stats.go b/conn_stats.go index 06ec23f2..0c5bfc78 100644 --- a/conn_stats.go +++ b/conn_stats.go @@ -1,28 +1,29 @@ package torrent import ( + "encoding/json" "fmt" "io" "reflect" "sync/atomic" - "encoding/json" pp "github.com/anacrolix/torrent/peer_protocol" ) -// Various connection-level metrics. At the Torrent level these are -// aggregates. Chunks are messages with data payloads. Data is actual torrent -// content without any overhead. Useful is something we needed locally. -// Unwanted is something we didn't ask for (but may still be useful). Written -// is things sent to the peer, and Read is stuff received from them. +// Various connection-level metrics. At the Torrent level these are aggregates. Chunks are messages +// with data payloads. Data is actual torrent content without any overhead. Useful is something we +// needed locally. Unwanted is something we didn't ask for (but may still be useful). Written is +// things sent to the peer, and Read is stuff received from them. Due to the implementation of +// Count, must be aligned on some platforms: See https://github.com/anacrolix/torrent/issues/262. type ConnStats struct { // Total bytes on the wire. Includes handshakes and encryption. BytesWritten Count BytesWrittenData Count - BytesRead Count - BytesReadData Count - BytesReadUsefulData Count + BytesRead Count + BytesReadData Count + BytesReadUsefulData Count + BytesReadUsefulIntendedData Count ChunksWritten Count @@ -34,9 +35,8 @@ type ConnStats struct { // Number of pieces data was written to, that subsequently passed verification. PiecesDirtiedGood Count - // Number of pieces data was written to, that subsequently failed - // verification. Note that a connection may not have been the sole dirtier - // of a piece. + // Number of pieces data was written to, that subsequently failed verification. Note that a + // connection may not have been the sole dirtier of a piece. PiecesDirtiedBad Count } @@ -79,14 +79,9 @@ func (cs *ConnStats) wroteMsg(msg *pp.Message) { } } -func (cs *ConnStats) readMsg(msg *pp.Message) { - // We want to also handle extended metadata pieces here, but we wouldn't - // have decoded the extended payload yet. - switch msg.Type { - case pp.Piece: - cs.ChunksRead.Add(1) - cs.BytesReadData.Add(int64(len(msg.Piece))) - } +func (cs *ConnStats) receivedChunk(size int64) { + cs.ChunksRead.Add(1) + cs.BytesReadData.Add(size) } func (cs *ConnStats) incrementPiecesDirtiedGood() { @@ -106,7 +101,7 @@ func add(n int64, f func(*ConnStats) *Count) func(*ConnStats) { type connStatsReadWriter struct { rw io.ReadWriter - c *connection + c *PeerConn } func (me connStatsReadWriter) Write(b []byte) (n int, err error) {