mirror of
https://github.com/SickGear/SickGear.git
synced 2025-01-05 17:43:37 +00:00
Merge pull request #609 from JackDandy/refactor_scheduler_and_ports
Refactor scheduler and upstream ports.
This commit is contained in:
commit
6e3f52c6f4
5 changed files with 79 additions and 91 deletions
|
@ -945,70 +945,76 @@ def initialize(consoleLogging=True):
|
|||
newznabProviderList = providers.getNewznabProviderList(NEWZNAB_DATA)
|
||||
providerList = providers.makeProviderList()
|
||||
|
||||
maintenanceScheduler = scheduler.Scheduler(maintenance.Maintenance(),
|
||||
cycleTime=datetime.timedelta(hours=1),
|
||||
threadName="MAINTENANCE",
|
||||
silent=True,
|
||||
runImmediately=True)
|
||||
|
||||
dailySearchScheduler = scheduler.Scheduler(dailysearcher.DailySearcher(),
|
||||
cycleTime=datetime.timedelta(minutes=DAILYSEARCH_FREQUENCY),
|
||||
threadName="DAILYSEARCHER",
|
||||
silent=True,
|
||||
runImmediately=DAILYSEARCH_STARTUP)
|
||||
|
||||
showUpdateScheduler = scheduler.Scheduler(showUpdater.ShowUpdater(),
|
||||
cycleTime=showUpdater.ShowUpdater().updateInterval,
|
||||
threadName="SHOWUPDATER",
|
||||
runImmediately=False)
|
||||
|
||||
# initialize schedulers
|
||||
# updaters
|
||||
update_now = datetime.timedelta(minutes=0)
|
||||
versionCheckScheduler = scheduler.Scheduler(versionChecker.CheckVersion(),
|
||||
cycleTime=datetime.timedelta(hours=UPDATE_FREQUENCY),
|
||||
threadName="CHECKVERSION",
|
||||
runImmediately=True)
|
||||
silent=False)
|
||||
|
||||
maintenanceScheduler = scheduler.Scheduler(maintenance.Maintenance(),
|
||||
cycleTime=datetime.timedelta(hours=1),
|
||||
threadName="MAINTENANCE")
|
||||
|
||||
showQueueScheduler = scheduler.Scheduler(show_queue.ShowQueue(),
|
||||
cycleTime=datetime.timedelta(seconds=3),
|
||||
threadName="SHOWQUEUE",
|
||||
silent=True,
|
||||
runImmediately=True)
|
||||
threadName="SHOWQUEUE")
|
||||
|
||||
showUpdateScheduler = scheduler.Scheduler(showUpdater.ShowUpdater(),
|
||||
cycleTime=datetime.timedelta(hours=1),
|
||||
threadName="SHOWUPDATER",
|
||||
start_time=datetime.time(hour=3)) # 3 AM
|
||||
|
||||
# searchers
|
||||
searchQueueScheduler = scheduler.Scheduler(search_queue.SearchQueue(),
|
||||
cycleTime=datetime.timedelta(seconds=3),
|
||||
threadName="SEARCHQUEUE",
|
||||
silent=True)
|
||||
threadName="SEARCHQUEUE")
|
||||
|
||||
update_interval = datetime.timedelta(minutes=DAILYSEARCH_FREQUENCY)
|
||||
dailySearchScheduler = scheduler.Scheduler(dailysearcher.DailySearcher(),
|
||||
cycleTime=update_interval,
|
||||
threadName="DAILYSEARCHER",
|
||||
run_delay=update_now if DAILYSEARCH_STARTUP
|
||||
else update_interval)
|
||||
|
||||
update_interval = datetime.timedelta(minutes=BACKLOG_FREQUENCY)
|
||||
backlogSearchScheduler = searchBacklog.BacklogSearchScheduler(searchBacklog.BacklogSearcher(),
|
||||
cycleTime=update_interval,
|
||||
threadName="BACKLOG",
|
||||
run_delay=update_now if BACKLOG_STARTUP
|
||||
else update_interval)
|
||||
|
||||
search_intervals = {'15m': 15, '45m': 45, '90m': 90, '4h': 4*60, 'daily': 24*60}
|
||||
if CHECK_PROPERS_INTERVAL in search_intervals:
|
||||
update_interval = datetime.timedelta(minutes=search_intervals[CHECK_PROPERS_INTERVAL])
|
||||
run_at = None
|
||||
else:
|
||||
update_interval = datetime.timedelta(hours=1)
|
||||
run_at = datetime.time(hour=1) # 1 AM
|
||||
|
||||
properFinderScheduler = scheduler.Scheduler(properFinder.ProperFinder(),
|
||||
cycleTime=properFinder.ProperFinder().updateInterval,
|
||||
cycleTime=update_interval,
|
||||
threadName="FINDPROPERS",
|
||||
silent=False if DOWNLOAD_PROPERS else True,
|
||||
runImmediately=True)
|
||||
start_time=run_at,
|
||||
run_delay=update_interval)
|
||||
|
||||
# processors
|
||||
autoPostProcesserScheduler = scheduler.Scheduler(autoPostProcesser.PostProcesser(),
|
||||
cycleTime=datetime.timedelta(
|
||||
minutes=AUTOPOSTPROCESSER_FREQUENCY),
|
||||
threadName="POSTPROCESSER",
|
||||
silent=False if PROCESS_AUTOMATICALLY else True,
|
||||
runImmediately=True)
|
||||
silent=not PROCESS_AUTOMATICALLY)
|
||||
|
||||
traktWatchListCheckerScheduler = scheduler.Scheduler(traktWatchListChecker.TraktChecker(),
|
||||
cycleTime=datetime.timedelta(hours=1),
|
||||
threadName="TRAKTWATCHLIST",
|
||||
silent=False if USE_TRAKT else True,
|
||||
runImmediately=True)
|
||||
silent=not USE_TRAKT)
|
||||
|
||||
subtitlesFinderScheduler = scheduler.Scheduler(subtitles.SubtitlesFinder(),
|
||||
cycleTime=datetime.timedelta(hours=SUBTITLES_FINDER_FREQUENCY),
|
||||
threadName="FINDSUBTITLES",
|
||||
silent=False if USE_SUBTITLES else True,
|
||||
runImmediately=True)
|
||||
|
||||
backlogSearchScheduler = searchBacklog.BacklogSearchScheduler(searchBacklog.BacklogSearcher(),
|
||||
cycleTime=datetime.timedelta(
|
||||
minutes=BACKLOG_FREQUENCY),
|
||||
threadName="BACKLOG",
|
||||
silent=True,
|
||||
runImmediately=BACKLOG_STARTUP)
|
||||
silent=not USE_SUBTITLES)
|
||||
|
||||
# dynamically load provider settings
|
||||
for curTorrentProvider in [curProvider for curProvider in providers.sortedProviderList() if
|
||||
|
@ -1834,4 +1840,4 @@ def autoreload_shutdown():
|
|||
halt()
|
||||
|
||||
# save settings
|
||||
saveAll()
|
||||
saveAll()
|
||||
|
|
|
@ -39,31 +39,12 @@ from name_parser.parser import NameParser, InvalidNameException
|
|||
class ProperFinder():
|
||||
def __init__(self):
|
||||
self.amActive = False
|
||||
self.updateInterval = datetime.timedelta(hours=1)
|
||||
|
||||
check_propers_interval = {'15m': 15, '45m': 45, '90m': 90, '4h': 4*60, 'daily': 24*60}
|
||||
for curInterval in ('15m', '45m', '90m', '4h', 'daily'):
|
||||
if sickbeard.CHECK_PROPERS_INTERVAL == curInterval:
|
||||
self.updateInterval = datetime.timedelta(minutes = check_propers_interval[curInterval])
|
||||
|
||||
def run(self, force=False):
|
||||
|
||||
if not sickbeard.DOWNLOAD_PROPERS:
|
||||
return
|
||||
|
||||
# look for propers every night at 1 AM
|
||||
updateTime = datetime.time(hour=1)
|
||||
|
||||
logger.log(u"Checking proper time", logger.DEBUG)
|
||||
|
||||
hourDiff = datetime.datetime.today().time().hour - updateTime.hour
|
||||
dayDiff = (datetime.date.today() - self._get_lastProperSearch()).days
|
||||
|
||||
if sickbeard.CHECK_PROPERS_INTERVAL == "daily" and not force:
|
||||
# if it's less than an interval after the update time then do an update
|
||||
if not (hourDiff >= 0 and hourDiff < self.updateInterval.seconds / 3600 or dayDiff >= 1):
|
||||
return
|
||||
|
||||
logger.log(u"Beginning the search for new propers")
|
||||
|
||||
self.amActive = True
|
||||
|
@ -75,11 +56,14 @@ class ProperFinder():
|
|||
|
||||
self._set_lastProperSearch(datetime.datetime.today().toordinal())
|
||||
|
||||
msg = u"Completed the search for new propers, next check "
|
||||
if sickbeard.CHECK_PROPERS_INTERVAL == "daily":
|
||||
logger.log(u"%sat 1am tomorrow" % msg)
|
||||
else:
|
||||
logger.log(u"%sin ~%s" % (msg, sickbeard.CHECK_PROPERS_INTERVAL))
|
||||
run_at = ""
|
||||
if None is sickbeard.properFinderScheduler.start_time:
|
||||
run_in = sickbeard.properFinderScheduler.lastRun + sickbeard.properFinderScheduler.cycleTime - datetime.datetime.now()
|
||||
hours, remainder = divmod(run_in.seconds, 3600)
|
||||
minutes, seconds = divmod(remainder, 60)
|
||||
run_at = u", next check in approx. " + ("%dh, %dm" % (hours, minutes) if 0 < hours else "%dm, %ds" % (minutes, seconds))
|
||||
|
||||
logger.log(u"Completed the search for new propers%s" % run_at)
|
||||
|
||||
self.amActive = False
|
||||
|
||||
|
|
|
@ -26,16 +26,14 @@ from sickbeard.exceptions import ex
|
|||
|
||||
|
||||
class Scheduler:
|
||||
def __init__(self, action, cycleTime=datetime.timedelta(minutes=10), runImmediately=True,
|
||||
threadName="ScheduledThread", silent=False):
|
||||
def __init__(self, action, cycleTime=datetime.timedelta(minutes=10), run_delay=datetime.timedelta(minutes=0),
|
||||
start_time=None, threadName="ScheduledThread", silent=True):
|
||||
|
||||
if runImmediately:
|
||||
self.lastRun = datetime.datetime.fromordinal(1)
|
||||
else:
|
||||
self.lastRun = datetime.datetime.now()
|
||||
self.lastRun = datetime.datetime.now() + run_delay - cycleTime
|
||||
|
||||
self.action = action
|
||||
self.cycleTime = cycleTime
|
||||
self.start_time = start_time
|
||||
|
||||
self.thread = None
|
||||
self.threadName = threadName
|
||||
|
@ -64,10 +62,25 @@ class Scheduler:
|
|||
|
||||
while True:
|
||||
|
||||
currentTime = datetime.datetime.now()
|
||||
current_time = datetime.datetime.now()
|
||||
should_run = False
|
||||
|
||||
# check if interval has passed
|
||||
if current_time - self.lastRun >= self.cycleTime:
|
||||
# check if wanting to start around certain time taking interval into account
|
||||
if self.start_time:
|
||||
hour_diff = current_time.time().hour - self.start_time.hour
|
||||
if not hour_diff < 0 and hour_diff < self.cycleTime.seconds / 3600:
|
||||
should_run = True
|
||||
else:
|
||||
# set lastRun to only check start_time after another cycleTime
|
||||
self.lastRun = current_time
|
||||
else:
|
||||
should_run = True
|
||||
|
||||
if should_run:
|
||||
self.lastRun = current_time
|
||||
|
||||
if currentTime - self.lastRun > self.cycleTime:
|
||||
self.lastRun = currentTime
|
||||
try:
|
||||
if not self.silent:
|
||||
logger.log(u"Starting new thread: " + self.threadName, logger.DEBUG)
|
||||
|
|
|
@ -31,26 +31,13 @@ from sickbeard import network_timezones
|
|||
from sickbeard import failed_history
|
||||
|
||||
class ShowUpdater():
|
||||
def __init__(self):
|
||||
self.updateInterval = datetime.timedelta(hours=1)
|
||||
|
||||
def run(self, force=False):
|
||||
|
||||
# update at 3 AM
|
||||
run_updater_time = datetime.time(hour=3)
|
||||
|
||||
update_datetime = datetime.datetime.now()
|
||||
update_date = update_datetime.date()
|
||||
|
||||
logger.log(u"Checking update interval", logger.DEBUG)
|
||||
|
||||
hour_diff = update_datetime.time().hour - run_updater_time.hour
|
||||
|
||||
# if it's less than an interval after the update time then do an update (or if we're forcing it)
|
||||
if hour_diff >= 0 and hour_diff < self.updateInterval.seconds / 3600 or force:
|
||||
logger.log(u"Doing full update on all shows")
|
||||
else:
|
||||
return
|
||||
logger.log(u"Doing full update on all shows")
|
||||
|
||||
# clean out cache directory, remove everything > 12 hours old
|
||||
if sickbeard.CACHE_DIR:
|
||||
|
@ -114,3 +101,5 @@ class ShowUpdater():
|
|||
logger.log(u"Automatic update failed: " + ex(e), logger.ERROR)
|
||||
|
||||
ui.ProgressIndicators.setIndicator('dailyUpdate', ui.QueueProgressIndicator("Daily Update", piList))
|
||||
|
||||
logger.log(u"Completed full update on all shows")
|
||||
|
|
|
@ -1566,10 +1566,6 @@ class ConfigSearch(MainHandler):
|
|||
sickbeard.IGNORE_WORDS = ignore_words if ignore_words else ""
|
||||
|
||||
sickbeard.DOWNLOAD_PROPERS = config.checkbox_to_value(download_propers)
|
||||
if sickbeard.DOWNLOAD_PROPERS:
|
||||
sickbeard.properFinderScheduler.silent = False
|
||||
else:
|
||||
sickbeard.properFinderScheduler.silent = True
|
||||
sickbeard.CHECK_PROPERS_INTERVAL = check_propers_interval
|
||||
|
||||
sickbeard.ALLOW_HIGH_PRIORITY = config.checkbox_to_value(allow_high_priority)
|
||||
|
|
Loading…
Reference in a new issue