mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-06 13:11:15 -07:00
Support apscheduler cron expressions
This commit is contained in:
parent
9ca8d59372
commit
3cf6560de3
2 changed files with 28 additions and 13 deletions
|
@ -50,7 +50,10 @@
|
||||||
</div>
|
</div>
|
||||||
<p class="help-block">
|
<p class="help-block">
|
||||||
<span id="simple_cron_message">Set the schedule for the newsletter.</span>
|
<span id="simple_cron_message">Set the schedule for the newsletter.</span>
|
||||||
<span id="custom_cron_message">Set the schedule for the newsletter using a <a href="${anon_url('https://crontab.guru')}" target="_blank" rel="noreferrer">custom crontab</a>. Only standard cron values are valid.</span>
|
<span id="custom_cron_message">
|
||||||
|
Set the schedule for the newsletter using a <a href="${anon_url('https://crontab.guru')}" target="_blank" rel="noreferrer">custom crontab</a>.
|
||||||
|
<a href="${anon_url('https://apscheduler.readthedocs.io/en/3.x/modules/triggers/cron.html#expression-types')}" target="_blank" rel="noreferrer">Click here</a> for a list of supported expressions.
|
||||||
|
</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
@ -481,7 +484,7 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
if (${newsletter['config']['custom_cron']}) {
|
if (${newsletter['config']['custom_cron']}) {
|
||||||
$('#cron_value').val('${newsletter['cron']}');
|
$('#cron_value').val('${newsletter['cron'] | n}');
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
cron_widget.cron('value', '${newsletter['cron']}');
|
cron_widget.cron('value', '${newsletter['cron']}');
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
from io import open
|
from io import open
|
||||||
import os
|
import os
|
||||||
|
import shlex
|
||||||
|
|
||||||
from apscheduler.triggers.cron import CronTrigger
|
from apscheduler.triggers.cron import CronTrigger
|
||||||
import email.utils
|
import email.utils
|
||||||
|
@ -58,25 +59,36 @@ def schedule_newsletters(newsletter_id=None):
|
||||||
|
|
||||||
|
|
||||||
def schedule_newsletter_job(newsletter_job_id, name='', func=None, remove_job=False, args=None, cron=None):
|
def schedule_newsletter_job(newsletter_job_id, name='', func=None, remove_job=False, args=None, cron=None):
|
||||||
# apscheduler day_of_week uses 0-6 = mon-sun
|
|
||||||
if cron:
|
if cron:
|
||||||
cron = cron.split(' ')
|
values = shlex.split(cron)
|
||||||
cron[4] = str((int(cron[4]) - 1) % 7) if cron[4].isdigit() else cron[4]
|
# apscheduler day_of_week uses 0-6 = mon-sun
|
||||||
cron = ' '.join(cron)
|
values[4] = str((int(values[4]) - 1) % 7) if values[4].isdigit() else values[4]
|
||||||
|
|
||||||
if NEWSLETTER_SCHED.get_job(newsletter_job_id):
|
if NEWSLETTER_SCHED.get_job(newsletter_job_id):
|
||||||
if remove_job:
|
if remove_job:
|
||||||
NEWSLETTER_SCHED.remove_job(newsletter_job_id)
|
NEWSLETTER_SCHED.remove_job(newsletter_job_id)
|
||||||
logger.info("Tautulli NewsletterHandler :: Removed scheduled newsletter: %s" % name)
|
logger.info("Tautulli NewsletterHandler :: Removed scheduled newsletter: %s" % name)
|
||||||
else:
|
else:
|
||||||
|
try:
|
||||||
NEWSLETTER_SCHED.reschedule_job(
|
NEWSLETTER_SCHED.reschedule_job(
|
||||||
newsletter_job_id, args=args, trigger=CronTrigger.from_crontab(cron))
|
newsletter_job_id, args=args, trigger=CronTrigger(
|
||||||
|
minute=values[0], hour=values[1], day=values[2], month=values[3], day_of_week=values[4]
|
||||||
|
)
|
||||||
|
)
|
||||||
logger.info("Tautulli NewsletterHandler :: Re-scheduled newsletter: %s" % name)
|
logger.info("Tautulli NewsletterHandler :: Re-scheduled newsletter: %s" % name)
|
||||||
|
except ValueError as e:
|
||||||
|
logger.error("Tautulli NewsletterHandler :: Failed to re-schedule newsletter: %s" % e)
|
||||||
elif not remove_job:
|
elif not remove_job:
|
||||||
|
try:
|
||||||
NEWSLETTER_SCHED.add_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(
|
||||||
misfire_grace_time=None)
|
minute=values[0], hour=values[1], day=values[2], month=values[3], day_of_week=values[4]
|
||||||
|
),
|
||||||
|
misfire_grace_time=None
|
||||||
|
)
|
||||||
logger.info("Tautulli NewsletterHandler :: Scheduled newsletter: %s" % name)
|
logger.info("Tautulli NewsletterHandler :: Scheduled newsletter: %s" % name)
|
||||||
|
except ValueError as e:
|
||||||
|
logger.error("Tautulli NewsletterHandler :: Failed to schedule newsletter: %s" % e)
|
||||||
|
|
||||||
|
|
||||||
def notify(newsletter_id=None, notify_action=None, **kwargs):
|
def notify(newsletter_id=None, notify_action=None, **kwargs):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue