mirror of
https://github.com/PeernetOfficial/Cmd.git
synced 2026-07-19 03:47:50 +01:00
New "transfer list" command. Fix speed calculation in file transfer.
This commit is contained in:
@@ -53,6 +53,7 @@ func transferCompareFile(peer *core.PeerInfo, fileHash []byte, output io.Writer)
|
||||
fmt.Fprintf(output, "Error reading file transfer header: %s\n", err)
|
||||
return
|
||||
}
|
||||
virtualConn.Stats.(*core.FileTransferStats).FileSize = fileSize
|
||||
|
||||
if fileSize != fileSizeLocal {
|
||||
fmt.Fprintf(output, "Error expected local file size %d mismatch with remote file size %d\n", fileSizeLocal, fileSize)
|
||||
@@ -68,6 +69,7 @@ func transferCompareFile(peer *core.PeerInfo, fileHash []byte, output io.Writer)
|
||||
// Now use 4 KB buffer.
|
||||
fileOffset := 0
|
||||
totalRead := 0
|
||||
totalReadLast := 0
|
||||
timeStart := time.Now()
|
||||
timeUpdateLast := time.Now()
|
||||
dataRemaining := fileSize
|
||||
@@ -93,6 +95,7 @@ func transferCompareFile(peer *core.PeerInfo, fileHash []byte, output io.Writer)
|
||||
break
|
||||
} else if dataRemaining <= 0 {
|
||||
fmt.Fprintf(output, "-- TERMINATE: EVERYTHING READ. Read %d bytes. Total read %d : %v\n", n, fileOffset+n, err)
|
||||
timeUpdateLast = time.Now()
|
||||
break
|
||||
}
|
||||
|
||||
@@ -121,9 +124,11 @@ func transferCompareFile(peer *core.PeerInfo, fileHash []byte, output io.Writer)
|
||||
// status update every few seconds
|
||||
//fmt.Fprintf(output, "Offset %08X read %d SUCCESS\n", fileOffset, n)
|
||||
if time.Now().After(timeUpdateLast.Add(time.Second)) {
|
||||
speed := float64(totalRead) / time.Since(timeStart).Seconds() / 1024
|
||||
speed := float64(totalRead-totalReadLast) / time.Since(timeUpdateLast).Seconds() / 1024
|
||||
fmt.Fprintf(output, "Offset %08X progress %.2f %% MATCHING. Speed: %.2f KB/s\n", fileOffset, float64((fileOffset+n)*100)/float64(fileSize), speed)
|
||||
|
||||
timeUpdateLast = time.Now()
|
||||
totalReadLast = totalRead
|
||||
}
|
||||
|
||||
fileOffset += n
|
||||
@@ -131,9 +136,9 @@ func transferCompareFile(peer *core.PeerInfo, fileHash []byte, output io.Writer)
|
||||
|
||||
fmt.Fprintf(output, "Terminate reason %d: %s\n", virtualConn.GetTerminateReason(), translateTerminateReason(virtualConn.GetTerminateReason()))
|
||||
|
||||
speed := float64(totalRead) / time.Since(timeStart).Seconds() / 1024
|
||||
speed := float64(totalRead) / timeUpdateLast.Sub(timeStart).Seconds() / 1024
|
||||
|
||||
fmt.Fprintf(output, "Transfer took %s. Speed is %.2f KB/s\n", time.Since(timeStart).String(), speed)
|
||||
fmt.Fprintf(output, "Transfer took %s. Average speed is %.2f KB/s\n", timeUpdateLast.Sub(timeStart).String(), speed)
|
||||
|
||||
if totalRead != int(fileSizeLocal) {
|
||||
fmt.Fprintf(output, "Error transferred data %d mismatch with reported file size %d\n", totalRead, fileSize)
|
||||
@@ -181,9 +186,9 @@ func translateTerminateReason(reason int) string {
|
||||
func outputUDTMetrics(metrics *udt.Metrics, output io.Writer) {
|
||||
fmt.Fprintf(output, "---- UDT Metrics ----\nPacket Type Sent Received\n")
|
||||
fmt.Fprintf(output, "HandShake %-8d %-8d\n", metrics.PktSendHandShake, metrics.PktRecvHandShake)
|
||||
fmt.Fprintf(output, "Shutdown %-8d %-8d\n", metrics.PktSentShutdown, metrics.PktRecvShutdown)
|
||||
fmt.Fprintf(output, "ACK %-8d %-8d\n", metrics.PktSentACK, metrics.PktRecvACK)
|
||||
fmt.Fprintf(output, "NAK %-8d %-8d\n", metrics.PktSentNAK, metrics.PktRecvNAK)
|
||||
fmt.Fprintf(output, "Shutdown %-8d %-8d\n", metrics.PktSentShutdown, metrics.PktRecvShutdown)
|
||||
fmt.Fprintf(output, "ACK2 %-8d %-8d\n", metrics.PktSentACK2, metrics.PktRecvACK2)
|
||||
fmt.Fprintf(output, "Data %-8d %-8d\n", metrics.PktSentData, metrics.PktRecvData)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user