@@ -93,12 +93,12 @@ func (b *DownloadBuffer) IsDone() bool {
9393 return b .done && len (b .data ) == 0
9494}
9595
96- func downloadToBuffer (buf * DownloadBuffer ) {
96+ func downloadToBuffer (buf * DownloadBuffer ) int64 {
9797 startTime := time .Now ()
9898 resp , err := client .Get (buf .url )
9999 if err != nil {
100100 fmt .Fprintf (os .Stderr , "Error fetching %s: %v\n " , buf .url , err )
101- return
101+ return 0
102102 }
103103 defer resp .Body .Close ()
104104
@@ -118,11 +118,11 @@ func downloadToBuffer(buf *DownloadBuffer) {
118118 throughput := float64 (resp .ContentLength ) / elapsed .Seconds () / 1024 / 1024
119119 fmt .Fprintf (os .Stderr , "Downloaded %s in %s (%.2f MB/s)\n " , resp .Request .URL , elapsed , throughput )
120120 buf .chunkPool .Put (chunk )
121- return
121+ return resp . ContentLength
122122 }
123123 if err != nil {
124124 fmt .Fprintf (os .Stderr , "Error reading from %s: %v\n " , resp .Request .URL , err )
125- return
125+ return 0
126126 }
127127 }
128128}
@@ -177,15 +177,20 @@ func main() {
177177 }
178178 bufChan := make (chan * DownloadBuffer )
179179 go func (bufChan chan * DownloadBuffer ) {
180+ total_size := int64 (0 )
181+ start := time .Now ()
180182 for _ , url := range os .Args [1 :] {
181183 // ignore curl args
182184 if url == "-s" || url == "-v" {
183185 continue
184186 }
185187 buf := NewBuffer (url )
186188 bufChan <- buf
187- downloadToBuffer (buf )
189+ total_size += downloadToBuffer (buf )
188190 }
191+ elapsed := time .Since (start )
192+ throughput := float64 (total_size ) / elapsed .Seconds () / 1024 / 1024
193+ fmt .Fprintf (os .Stderr , "Overall downloaded %d MB in %s (%.2f MB/s)\n " , total_size / 1024 / 1024 , elapsed , throughput )
189194 close (bufChan )
190195 }(bufChan )
191196 for buf := range bufChan {
0 commit comments