Peter Surda
c85d52b8e8
- asyncore is now on by default - inv announcements implemented - bandwidth limit implemented / fixed - stats on download / upload speed now work - make prints into logger - limit knownNodes to 20k as it was before - green light fixed - other minor fixes
89 lines
3.2 KiB
Python
89 lines
3.2 KiB
Python
import time
|
|
|
|
from bmconfigparser import BMConfigParser
|
|
from network.connectionpool import BMConnectionPool
|
|
from inventory import PendingDownloadQueue, PendingUpload
|
|
import asyncore_pollchoose as asyncore
|
|
import shared
|
|
import throttle
|
|
|
|
lastReceivedTimestamp = time.time()
|
|
lastReceivedBytes = 0
|
|
currentReceivedSpeed = 0
|
|
lastSentTimestamp = time.time()
|
|
lastSentBytes = 0
|
|
currentSentSpeed = 0
|
|
|
|
def connectedHostsList():
|
|
if BMConfigParser().safeGetBoolean("network", "asyncore"):
|
|
retval = []
|
|
for i in BMConnectionPool().inboundConnections.values() + BMConnectionPool().outboundConnections.values():
|
|
if not i.connected:
|
|
continue
|
|
try:
|
|
retval.append((i.destination, i.streams[0]))
|
|
except AttributeError:
|
|
pass
|
|
return retval
|
|
else:
|
|
return shared.connectedHostsList.items()
|
|
|
|
def sentBytes():
|
|
if BMConfigParser().safeGetBoolean("network", "asyncore"):
|
|
return asyncore.sentBytes
|
|
else:
|
|
return throttle.SendThrottle().total
|
|
|
|
def uploadSpeed():
|
|
global lastSentTimestamp, lastSentBytes, currentSentSpeed
|
|
if BMConfigParser().safeGetBoolean("network", "asyncore"):
|
|
currentTimestamp = time.time()
|
|
if int(lastSentTimestamp) < int(currentTimestamp):
|
|
currentSentBytes = asyncore.sentBytes
|
|
currentSentSpeed = int((currentSentBytes - lastSentBytes) / (currentTimestamp - lastSentTimestamp))
|
|
lastSentBytes = currentSentBytes
|
|
lastSentTimestamp = currentTimestamp
|
|
return currentSentSpeed
|
|
else:
|
|
return throttle.sendThrottle().getSpeed()
|
|
|
|
def receivedBytes():
|
|
if BMConfigParser().safeGetBoolean("network", "asyncore"):
|
|
return asyncore.receivedBytes
|
|
else:
|
|
return throttle.ReceiveThrottle().total
|
|
|
|
def downloadSpeed():
|
|
global lastReceivedTimestamp, lastReceivedBytes, currentReceivedSpeed
|
|
if BMConfigParser().safeGetBoolean("network", "asyncore"):
|
|
currentTimestamp = time.time()
|
|
if int(lastReceivedTimestamp) < int(currentTimestamp):
|
|
currentReceivedBytes = asyncore.receivedBytes
|
|
currentReceivedSpeed = int((currentReceivedBytes - lastReceivedBytes) / (currentTimestamp - lastReceivedTimestamp))
|
|
lastReceivedBytes = currentReceivedBytes
|
|
lastReceivedTimestamp = currentTimestamp
|
|
return currentReceivedSpeed
|
|
else:
|
|
return throttle.ReceiveThrottle().getSpeed()
|
|
|
|
def pendingDownload():
|
|
if BMConfigParser().safeGetBoolean("network", "asyncore"):
|
|
tmp = {}
|
|
for connection in BMConnectionPool().inboundConnections.values() + BMConnectionPool().outboundConnections.values():
|
|
for k in connection.objectsNewToMe.keys():
|
|
tmp[k] = True
|
|
return len(tmp)
|
|
else:
|
|
return PendingDownloadQueue.totalSize()
|
|
|
|
def pendingUpload():
|
|
if BMConfigParser().safeGetBoolean("network", "asyncore"):
|
|
return 0
|
|
tmp = {}
|
|
for connection in BMConnectionPool().inboundConnections.values() + BMConnectionPool().outboundConnections.values():
|
|
for k in connection.objectsNewToThem.keys():
|
|
tmp[k] = True
|
|
return len(tmp)
|
|
else:
|
|
return PendingUpload().len()
|