mirror of https://github.com/zlatinb/muwire
add speed column to uploads table
parent
817dd68faf
commit
9bd3c4f141
|
@ -62,11 +62,13 @@ class ContentUploader extends Uploader {
|
||||||
mapped = channel.map(FileChannel.MapMode.READ_ONLY, range.start, range.end - range.start + 1)
|
mapped = channel.map(FileChannel.MapMode.READ_ONLY, range.start, range.end - range.start + 1)
|
||||||
byte [] tmp = new byte[0x1 << 13]
|
byte [] tmp = new byte[0x1 << 13]
|
||||||
while(mapped.hasRemaining()) {
|
while(mapped.hasRemaining()) {
|
||||||
int start = mapped.position()
|
int read
|
||||||
synchronized(this) {
|
synchronized(this) {
|
||||||
|
int start = mapped.position()
|
||||||
mapped.get(tmp, 0, Math.min(tmp.length, mapped.remaining()))
|
mapped.get(tmp, 0, Math.min(tmp.length, mapped.remaining()))
|
||||||
|
read = mapped.position() - start
|
||||||
|
dataSinceLastRead += read
|
||||||
}
|
}
|
||||||
int read = mapped.position() - start
|
|
||||||
endpoint.getOutputStream().write(tmp, 0, read)
|
endpoint.getOutputStream().write(tmp, 0, read)
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
|
|
|
@ -26,11 +26,13 @@ class HashListUploader extends Uploader {
|
||||||
|
|
||||||
byte[]tmp = new byte[0x1 << 13]
|
byte[]tmp = new byte[0x1 << 13]
|
||||||
while(mapped.hasRemaining()) {
|
while(mapped.hasRemaining()) {
|
||||||
int start = mapped.position()
|
int read
|
||||||
synchronized(this) {
|
synchronized(this) {
|
||||||
|
int start = mapped.position()
|
||||||
mapped.get(tmp, 0, Math.min(tmp.length, mapped.remaining()))
|
mapped.get(tmp, 0, Math.min(tmp.length, mapped.remaining()))
|
||||||
|
read = mapped.position() - start
|
||||||
|
dataSinceLastRead += read
|
||||||
}
|
}
|
||||||
int read = mapped.position() - start
|
|
||||||
endpoint.getOutputStream().write(tmp, 0, read)
|
endpoint.getOutputStream().write(tmp, 0, read)
|
||||||
}
|
}
|
||||||
endpoint.getOutputStream().flush()
|
endpoint.getOutputStream().flush()
|
||||||
|
|
|
@ -11,7 +11,13 @@ import com.muwire.core.connection.Endpoint
|
||||||
abstract class Uploader {
|
abstract class Uploader {
|
||||||
protected final Endpoint endpoint
|
protected final Endpoint endpoint
|
||||||
protected ByteBuffer mapped
|
protected ByteBuffer mapped
|
||||||
|
|
||||||
|
private long lastSpeedRead
|
||||||
|
protected int dataSinceLastRead
|
||||||
|
|
||||||
|
private final ArrayList<Integer> speedArr = [0,0,0,0,0]
|
||||||
|
private int speedPos, speedAvg
|
||||||
|
|
||||||
Uploader(Endpoint endpoint) {
|
Uploader(Endpoint endpoint) {
|
||||||
this.endpoint = endpoint
|
this.endpoint = endpoint
|
||||||
}
|
}
|
||||||
|
@ -38,4 +44,34 @@ abstract class Uploader {
|
||||||
abstract int getTotalPieces();
|
abstract int getTotalPieces();
|
||||||
|
|
||||||
abstract long getTotalSize();
|
abstract long getTotalSize();
|
||||||
|
|
||||||
|
synchronized int speed() {
|
||||||
|
final long now = System.currentTimeMillis()
|
||||||
|
long interval = Math.max(1000, now - lastSpeedRead)
|
||||||
|
lastSpeedRead = now;
|
||||||
|
int currSpeed = (int) (dataSinceLastRead * 1000.0 / interval)
|
||||||
|
dataSinceLastRead = 0
|
||||||
|
|
||||||
|
// normalize to speedArr.size
|
||||||
|
currSpeed /= speedArr.size()
|
||||||
|
|
||||||
|
// compute new speedAvg and update speedArr
|
||||||
|
if ( speedArr[speedPos] > speedAvg ) {
|
||||||
|
speedAvg = 0
|
||||||
|
} else {
|
||||||
|
speedAvg -= speedArr[speedPos]
|
||||||
|
}
|
||||||
|
speedAvg += currSpeed
|
||||||
|
speedArr[speedPos] = currSpeed
|
||||||
|
// this might be necessary due to rounding errors
|
||||||
|
if (speedAvg < 0)
|
||||||
|
speedAvg = 0
|
||||||
|
|
||||||
|
// rolling index over the speedArr
|
||||||
|
speedPos++
|
||||||
|
if (speedPos >= speedArr.size())
|
||||||
|
speedPos=0
|
||||||
|
|
||||||
|
speedAvg
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -293,6 +293,10 @@ class MainFrameView {
|
||||||
}
|
}
|
||||||
String.format("%02d", percent) + "% ${totalSize} ($done/$pieces pcs)".toString()
|
String.format("%02d", percent) + "% ${totalSize} ($done/$pieces pcs)".toString()
|
||||||
})
|
})
|
||||||
|
closureColumn(header : "Speed", type : String, read : { row ->
|
||||||
|
int speed = row.uploader.speed()
|
||||||
|
DataHelper.formatSize2Decimal(speed, false) + "B/sec"
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue