mirror of
https://github.com/KevinMidboe/transatlanticTorrentExpress.git
synced 2025-10-29 18:00:19 +00:00
Calculate, log & save estimated & actual transfer speed
This commit is contained in:
@@ -4,7 +4,71 @@ from subprocess import check_output, Popen, PIPE
|
|||||||
|
|
||||||
# Local files
|
# Local files
|
||||||
from logger import logger
|
from logger import logger
|
||||||
from utils import getConfig
|
from utils import getConfig, readAvgSpeedFromDisk, writeAvgSpeedToDisk
|
||||||
|
|
||||||
|
ESTIMATED_TRANSFER_SPEED=readAvgSpeedFromDisk()
|
||||||
|
TRANSFER_SPEED_UNIT="Mb/s"
|
||||||
|
LAST_FILE_TRANSFER_SPEED=None
|
||||||
|
|
||||||
|
def fileSizeByPath(path):
|
||||||
|
filename = path.split('/')[-1]
|
||||||
|
config = getConfig()
|
||||||
|
host = config['SSH']['host']
|
||||||
|
user = config['SSH']['user']
|
||||||
|
remotePath = config['FILES']['remote']
|
||||||
|
|
||||||
|
diskUsageCmd = 'du -hs'
|
||||||
|
if (remotePath in path):
|
||||||
|
cmd = 'ssh {}@{} {} "\'{}\'"'.format(user, host, diskUsageCmd, path)
|
||||||
|
else:
|
||||||
|
cmd = '{} "{}"'.format(diskUsageCmd, path)
|
||||||
|
|
||||||
|
diskusageOutput = check_output(cmd, shell=True)
|
||||||
|
|
||||||
|
diskusageOutput = diskusageOutput.decode('utf-8').split('\t')
|
||||||
|
return diskusageOutput[0] + 'B'
|
||||||
|
|
||||||
|
def fileSizeInBytes(fileSize, blockSize=1024):
|
||||||
|
try:
|
||||||
|
if fileSize[-2] == 'G':
|
||||||
|
fileSizeInBytes = float(fileSize[:-2]) * 1024 * 1024 * 1024
|
||||||
|
elif fileSize[-2] == 'M':
|
||||||
|
fileSizeInBytes = float(fileSize[:-2]) * 1024 * 1024
|
||||||
|
elif fileSize[-2] == 'K':
|
||||||
|
fileSizeInBytes = float(fileSize[:-2]) * 1024
|
||||||
|
except:
|
||||||
|
logger.error('Filesize to float. Filesize:', es={'output': fileSize})
|
||||||
|
return
|
||||||
|
|
||||||
|
return fileSizeInBytes
|
||||||
|
|
||||||
|
def estimateFileTransferTime(fileSize, filename):
|
||||||
|
global ESTIMATED_TRANSFER_SPEED,TRANSFER_SPEED_UNIT,LAST_FILE_TRANSFER_SPEED
|
||||||
|
|
||||||
|
fileSizeBytes = fileSizeInBytes(fileSize)
|
||||||
|
if fileSizeBytes == None:
|
||||||
|
logger.info('Unable to calculate transfer time for file', es={'filename': filename})
|
||||||
|
return
|
||||||
|
|
||||||
|
if (LAST_FILE_TRANSFER_SPEED):
|
||||||
|
estimatedTransferSpeed = LAST_FILE_TRANSFER_SPEED
|
||||||
|
else:
|
||||||
|
estimatedTransferSpeed = ESTIMATED_TRANSFER_SPEED
|
||||||
|
logger.debug('Guessing transfer speed with static speed variable', es={'transferSpeed': ESTIMATED_TRANSFER_SPEED,
|
||||||
|
'transferSpeedUnit': TRANSFER_SPEED_UNIT})
|
||||||
|
|
||||||
|
elapsedTimeInSeconds = (fileSizeBytes / 1000 / 1000 * 8) / estimatedTransferSpeed
|
||||||
|
estimatedTransferTime = str(timedelta(seconds=elapsedTimeInSeconds)).split('.')[0]
|
||||||
|
|
||||||
|
# trying to find the speed we average transfer at
|
||||||
|
logger.info('Estimated transfer time'.format(estimatedTransferTime), es={'filename': filename,
|
||||||
|
'filesize': fileSize,
|
||||||
|
'bytes': fileSizeBytes,
|
||||||
|
'seconds': elapsedTimeInSeconds,
|
||||||
|
'transferTime': estimatedTransferTime,
|
||||||
|
'transferSpeed': estimatedTransferSpeed,
|
||||||
|
'transferSpeedUnit': TRANSFER_SPEED_UNIT})
|
||||||
|
return estimatedTransferSpeed
|
||||||
|
|
||||||
def getFiles(path, host=None, user=None):
|
def getFiles(path, host=None, user=None):
|
||||||
logger.info('Getting filenames from path: {}'.format(path), es={'path': path})
|
logger.info('Getting filenames from path: {}'.format(path), es={'path': path})
|
||||||
|
|||||||
21
utils.py
21
utils.py
@@ -15,4 +15,23 @@ def getConfig():
|
|||||||
config.read(path)
|
config.read(path)
|
||||||
|
|
||||||
# logger.debug('Sections parsed: {}'.format(config.sections()))
|
# logger.debug('Sections parsed: {}'.format(config.sections()))
|
||||||
return config
|
return config
|
||||||
|
|
||||||
|
def writeAvgSpeedToDisk(speed):
|
||||||
|
path = os.path.join(pwd, '.avgspeed.txt')
|
||||||
|
|
||||||
|
with open(path, 'w') as f:
|
||||||
|
f.write(str(int(speed)))
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
def readAvgSpeedFromDisk():
|
||||||
|
path = os.path.join(pwd, '.avgspeed.txt')
|
||||||
|
|
||||||
|
with open(path, 'r') as f:
|
||||||
|
data = f.readline()
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
if data == '':
|
||||||
|
data = '1'
|
||||||
|
|
||||||
|
return int(data)
|
||||||
Reference in New Issue
Block a user