added dynamic timeout. #295

This commit is contained in:
clinton-hall 2014-04-01 17:20:22 +10:30
commit 800bb84c3e
7 changed files with 29 additions and 15 deletions

View file

@ -85,9 +85,9 @@ def processEpisode(dirName, nzbName=None, failed=False, clientAgent=None, inputC
except (ConfigParser.NoOptionError, ValueError): except (ConfigParser.NoOptionError, ValueError):
delay = 0 delay = 0
try: try:
wait_for = int(config.get(section, "wait_for")) TimePerGiB = int(config.get(section, "TimePerGiB"))
except (ConfigParser.NoOptionError, ValueError): except (ConfigParser.NoOptionError, ValueError):
wait_for = 5 TimePerGiB = 1 # note, if using Network to transfer on 100Mbit LAN, expect ~ 600 MB/minute.
try: try:
SampleIDs = (config.get("Extensions", "SampleIDs")).split(',') SampleIDs = (config.get("Extensions", "SampleIDs")).split(',')
except (ConfigParser.NoOptionError, ValueError): except (ConfigParser.NoOptionError, ValueError):
@ -100,10 +100,7 @@ def processEpisode(dirName, nzbName=None, failed=False, clientAgent=None, inputC
process_method = config.get(section, "process_method") process_method = config.get(section, "process_method")
except ConfigParser.NoOptionError: except ConfigParser.NoOptionError:
process_method = None process_method = None
TimeOut = 60 * int(wait_for) # SickBeard needs to complete all moving and renaming before returning the log sequence via url.
socket.setdefaulttimeout(int(TimeOut)) #initialize socket timeout.
mediaContainer = (config.get("Extensions", "mediaExtensions")).split(',') mediaContainer = (config.get("Extensions", "mediaExtensions")).split(',')
minSampleSize = int(config.get("Extensions", "minSampleSize")) minSampleSize = int(config.get("Extensions", "minSampleSize"))
@ -146,6 +143,11 @@ def processEpisode(dirName, nzbName=None, failed=False, clientAgent=None, inputC
if watch_dir != "" and (not host in ['localhost', '127.0.0.1'] or nzbName == "Manual Run"): if watch_dir != "" and (not host in ['localhost', '127.0.0.1'] or nzbName == "Manual Run"):
dirName = watch_dir dirName = watch_dir
dirSize = getDirectorySize(dirName) # get total directory size to calculate needed processing time.
TimeOut = 60 * int(TimePerGiB) * dirSize # SickBeard needs to complete all moving and renaming before returning the log sequence via url.
TimeOut += 60 # Add an extra minute for over-head/processing/metadata.
socket.setdefaulttimeout(int(TimeOut)) #initialize socket timeout.
# configure SB params to pass # configure SB params to pass
params['quiet'] = 1 params['quiet'] = 1
if nzbName is not None: if nzbName is not None:

View file

@ -58,6 +58,8 @@ def migrate():
option, value = item option, value = item
if option == "category": # change this old format if option == "category": # change this old format
option = "sbCategory" option = "sbCategory"
if option == "wait_for": # remove old format
continue
if option == "failed_fork": # change this old format if option == "failed_fork": # change this old format
option = "fork" option = "fork"
if value not in ["default", "failed", "failed-torrent", "auto"]: if value not in ["default", "failed", "failed-torrent", "auto"]:
@ -305,8 +307,8 @@ def addnzbget():
section = "SickBeard" section = "SickBeard"
envKeys = ['CATEGORY', 'HOST', 'PORT', 'USERNAME', 'PASSWORD', 'SSL', 'WEB_ROOT', 'WATCH_DIR', 'FORK', 'DELETE_FAILED', 'DELAY', 'WAIT_FOR', 'PROCESS_METHOD'] envKeys = ['CATEGORY', 'HOST', 'PORT', 'USERNAME', 'PASSWORD', 'SSL', 'WEB_ROOT', 'WATCH_DIR', 'FORK', 'DELETE_FAILED', 'DELAY', 'TIMEPERGIB', 'PROCESS_METHOD']
cfgKeys = ['sbCategory', 'host', 'port', 'username', 'password', 'ssl', 'web_root', 'watch_dir', 'fork', 'delete_failed', 'delay', 'wait_for', 'process_method'] cfgKeys = ['sbCategory', 'host', 'port', 'username', 'password', 'ssl', 'web_root', 'watch_dir', 'fork', 'delete_failed', 'delay', 'TimePerGiB', 'process_method']
for index in range(len(envKeys)): for index in range(len(envKeys)):
key = 'NZBPO_SB' + envKeys[index] key = 'NZBPO_SB' + envKeys[index]
if os.environ.has_key(key): if os.environ.has_key(key):

View file

@ -13,6 +13,15 @@ import linktastic.linktastic as linktastic
Logger = logging.getLogger() Logger = logging.getLogger()
def getDirectorySize(directory):
dir_size = 0
for (path, dirs, files) in os.walk(directory):
for file in files:
filename = os.path.join(path, file)
dir_size += os.path.getsize(filename)
dir_size = dir_size / (1024.0 * 1024.0 * 1024.0) # convert to GB
return dir_size
def safeName(name): def safeName(name):
safename = re.sub(r"[\/\\\:\*\?\"\<\>\|]", "", name) #make this name safe for use in directories for windows etc. safename = re.sub(r"[\/\\\:\*\?\"\<\>\|]", "", name) #make this name safe for use in directories for windows etc.

View file

@ -31,7 +31,7 @@ password =
web_root = web_root =
ssl = 0 ssl = 0
delay = 0 delay = 0
wait_for = 5 TimePerGiB = 1
watch_dir = watch_dir =
fork = auto fork = auto
delete_failed = 0 delete_failed = 0

View file

@ -7,6 +7,7 @@ Allow Headphones to remove torrents and data after processing.
Delete torrent if uselink = move Delete torrent if uselink = move
Added forceClean for outputDir. Works in file permissions prevent CP/SB from moving files. Added forceClean for outputDir. Works in file permissions prevent CP/SB from moving files.
Ignore .x264 from archive "part" checks. Ignore .x264 from archive "part" checks.
Added dynamic timeout based on directory size.
Impacts NZBs Impacts NZBs
Fix setting of Mylar config from NZBGet. Fix setting of Mylar config from NZBGet.

View file

@ -97,10 +97,10 @@
# Set the number of seconds to wait before calling post-process in SickBeard. # Set the number of seconds to wait before calling post-process in SickBeard.
#sbdelay=0 #sbdelay=0
# SickBeard wait_for # SickBeard process Time Per GiB
# #
# Set the number of minutes to wait before timing out. If transferring files across drives or network, increase this to longer than the time it takes to copy an episode. # Set the number of minutes to wait, for each GiB of data, before timing out. If transfering files across drives or network, increase this value as needed.
#sbwait_for=5 #sbTimePerGiB=5
# SickBeard watch directory. # SickBeard watch directory.
# #

View file

@ -46,10 +46,10 @@
# Set the number of seconds to wait before calling post-process in SickBeard. # Set the number of seconds to wait before calling post-process in SickBeard.
#sbdelay=0 #sbdelay=0
# SickBeard wait_for # SickBeard process Time Per GiB
# #
# Set the number of minutes to wait before timing out. If transfering files across drives or network, increase this to longer than the time it takes to copy an episode. # Set the number of minutes to wait, for each GiB of data, before timing out. If transfering files across drives or network, increase this value as needed.
#sbwait_for=5 #sbTimePerGiB=5
# SickBeard watch directory. # SickBeard watch directory.
# #