Schedule jobs using UTC to prevent tiggers in the past

This commit is contained in:
JonnyWong16 2019-05-02 20:01:39 -07:00
parent 43b350a1cc
commit eea1cf1d2c
5 changed files with 25 additions and 17 deletions

View file

@ -1,7 +1,7 @@
<%
import datetime
from plexpy import helpers
from plexpy.activity_handler import ACTIVITY_SCHED, schedule_callback
import plexpy
from plexpy import activity_handler, helpers
if queue == 'active sessions':
filter_key = 'session_key-'
@ -14,7 +14,7 @@
title_key = title_format.format('Rating Key', 'Title')
description = 'Queue to flush recently added items to the database and send notifications if enabled.'
scheduled_jobs = [j.id for j in ACTIVITY_SCHED.get_jobs() if j.id.startswith(filter_key)]
scheduled_jobs = [j.id for j in activity_handler.ACTIVITY_SCHED.get_jobs() if j.id.startswith(filter_key)]
%>
<div class="modal-dialog" role="document">
<div class="modal-content">
@ -44,13 +44,13 @@
% if scheduled_jobs:
% for job in scheduled_jobs:
<%
sched_job = ACTIVITY_SCHED.get_job(job)
sched_job = activity_handler.ACTIVITY_SCHED.get_job(job)
now = datetime.datetime.now(sched_job.next_run_time.tzinfo)
%>
<tr>
<td><strong>${title_format.format(*sched_job.args)}</strong></td>
<td>${helpers.format_timedelta_Hms(sched_job.next_run_time - now)}</td>
<td>${sched_job.next_run_time.strftime('%Y-%m-%d %H:%M:%S')}</td>
<td>${sched_job.next_run_time.astimezone(plexpy.SYS_TIMEZONE).strftime('%Y-%m-%d %H:%M:%S')}</td>
</tr>
% endfor
% else:

View file

@ -39,7 +39,7 @@ DOCUMENTATION :: END
<td><i class="fa fa-sm fa-fw fa-check"></i> Active</td>
<td>${helpers.format_timedelta_Hms(sched_job.trigger.interval)}</td>
<td>${helpers.format_timedelta_Hms(sched_job.next_run_time - now)}</td>
<td>${sched_job.next_run_time.strftime('%Y-%m-%d %H:%M:%S')}</td>
<td>${sched_job.next_run_time.astimezone(plexpy.SYS_TIMEZONE).strftime('%Y-%m-%d %H:%M:%S')}</td>
</tr>
% elif job in ('Check for server response', 'Check for active sessions', 'Check for recently added items') and plexpy.WS_CONNECTED:
<tr>

View file

@ -71,7 +71,7 @@ PIDFILE = None
NOFORK = False
DOCKER = False
SCHED = BackgroundScheduler()
SCHED = None
SCHED_LOCK = threading.Lock()
NOTIFY_QUEUE = Queue()
@ -509,11 +509,11 @@ def schedule_job(func, name, hours=0, minutes=0, seconds=0, args=None):
logger.info(u"Removed background task: %s", name)
elif job.trigger.interval != datetime.timedelta(hours=hours, minutes=minutes):
SCHED.reschedule_job(name, trigger=IntervalTrigger(
hours=hours, minutes=minutes, seconds=seconds), args=args)
hours=hours, minutes=minutes, seconds=seconds, timezone=pytz.UTC), args=args)
logger.info(u"Re-scheduled background task: %s", name)
elif hours > 0 or minutes > 0 or seconds > 0:
SCHED.add_job(func, id=name, trigger=IntervalTrigger(
hours=hours, minutes=minutes, seconds=seconds), args=args)
hours=hours, minutes=minutes, seconds=seconds, timezone=pytz.UTC), args=args)
logger.info(u"Scheduled background task: %s", name)
@ -521,6 +521,11 @@ def start():
global _STARTED
if _INITIALIZED:
global SCHED
SCHED = BackgroundScheduler(timezone=pytz.UTC)
activity_handler.ACTIVITY_SCHED = BackgroundScheduler(timezone=pytz.UTC)
newsletter_handler.NEWSLETTER_SCHED = BackgroundScheduler(timezone=pytz.UTC)
# Start the scheduler for stale stream callbacks
activity_handler.ACTIVITY_SCHED.start()

View file

@ -17,8 +17,8 @@ import datetime
import os
import time
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.date import DateTrigger
import pytz
import plexpy
import activity_processor
@ -29,7 +29,7 @@ import notification_handler
import pmsconnect
ACTIVITY_SCHED = BackgroundScheduler()
ACTIVITY_SCHED = None
RECENTLY_ADDED_QUEUE = {}
@ -488,11 +488,13 @@ def schedule_callback(id, func=None, remove_job=False, args=None, **kwargs):
else:
ACTIVITY_SCHED.reschedule_job(
id, args=args, trigger=DateTrigger(
run_date=datetime.datetime.now() + datetime.timedelta(**kwargs)))
run_date=datetime.datetime.now(pytz.UTC) + datetime.timedelta(**kwargs),
timezone=pytz.UTC))
elif not remove_job:
ACTIVITY_SCHED.add_job(
func, args=args, id=id, trigger=DateTrigger(
run_date=datetime.datetime.now() + datetime.timedelta(**kwargs)))
run_date=datetime.datetime.now(pytz.UTC) + datetime.timedelta(**kwargs),
timezone=pytz.UTC))
def force_stop_stream(session_key, title, user):

View file

@ -16,7 +16,6 @@
import os
import time
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.cron import CronTrigger
import email.utils
@ -26,7 +25,7 @@ import logger
import newsletters
NEWSLETTER_SCHED = BackgroundScheduler()
NEWSLETTER_SCHED = None
def add_newsletter_each(newsletter_id=None, notify_action=None, **kwargs):
@ -62,11 +61,13 @@ def schedule_newsletter_job(newsletter_job_id, name='', func=None, remove_job=Fa
logger.info(u"Tautulli NewsletterHandler :: Removed scheduled newsletter: %s" % name)
else:
NEWSLETTER_SCHED.reschedule_job(
newsletter_job_id, args=args, trigger=CronTrigger().from_crontab(cron))
newsletter_job_id, args=args, trigger=CronTrigger().from_crontab(
cron, timezone=plexpy.SYS_TIMEZONE))
logger.info(u"Tautulli NewsletterHandler :: Re-scheduled newsletter: %s" % name)
elif not remove_job:
NEWSLETTER_SCHED.add_job(
func, args=args, id=newsletter_job_id, trigger=CronTrigger.from_crontab(cron))
func, args=args, id=newsletter_job_id, trigger=CronTrigger().from_crontab(
cron, timezone=plexpy.SYS_TIMEZONE))
logger.info(u"Tautulli NewsletterHandler :: Scheduled newsletter: %s" % name)