优化计划任务的添加修改,升级后可能会出现任务描述为空的情况,可以将任务ID复制填写进去

This commit is contained in:
ngfchl
2022-11-24 19:18:27 +08:00
parent b128ef85a9
commit 4a8d7eb826
4 changed files with 100 additions and 17 deletions

View File

@@ -27,7 +27,7 @@ class TaskAdmin(admin.ModelAdmin): # instead of ModelAdmin
)
# list_display_links = None
search_fields = ('name',)
readonly_fields = ('name',)
readonly_fields = ('name', 'desc')
def get_queryset(self, request):
# print(self.kwargs['username'])
@@ -45,8 +45,8 @@ class TaskAdmin(admin.ModelAdmin): # instead of ModelAdmin
return False
# 禁止修改按钮
# def has_change_permission(self, request, obj=None):
# return False
def has_change_permission(self, request, obj=None):
return False
@admin.register(TaskJob)
@@ -68,16 +68,15 @@ class TaskJobAdmin(admin.ModelAdmin): # instead of ModelAdmin
def save_model(self, request, obj: TaskJob, form, change):
# 从字符串获取function
func = getattr(tasks, obj.task.name)
# 检查任务是否存在,存在删除任务
# 检查任务是否存在,存在且job_id和任务名称不一致删除任务
exist_job = scheduler.get_job(obj.job_id)
if exist_job and obj.job_id != obj.name:
exist_job.remove()
exist_job = None
obj.job_id = obj.name
logger.info('当前任务:{} | {}'.format(obj.job_id, exist_job))
try:
if not obj.task_exec:
logger.info(obj.job_id + '任务未开启!')
super().save_model(request, obj, form, change)
# else:
# 添加任务
if obj.trigger == Trigger.cron:
if exist_job:
logger.info(obj.job_id + '任务已存在,修改中!')

View File

@@ -0,0 +1,55 @@
# Generated by Django 4.1.2 on 2022-11-24 19:01
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('auto_pt', '0002_alter_notify_name_alter_taskjob_expression_time_and_more'),
]
operations = [
migrations.AddField(
model_name='taskjob',
name='name',
field=models.CharField(default='', help_text='任务名称具有唯一性,修改任务时不要修改此项,如果确实需要修改此项,请删除后重新添加', max_length=16, verbose_name='任务名称'),
preserve_default=False,
),
migrations.AlterField(
model_name='taskjob',
name='args',
field=models.CharField(blank=True, help_text='执行代码所需要的参数。默认不需要填写,有需要填写参数的任务会特别说明', max_length=128, null=True, verbose_name='任务参数'),
),
migrations.AlterField(
model_name='taskjob',
name='end_date',
field=models.DateTimeField(blank=True, editable=False, null=True, verbose_name='任务结束时间'),
),
migrations.AlterField(
model_name='taskjob',
name='jitter',
field=models.IntegerField(default=1200, editable=False, help_text='增强时间随机性', verbose_name='时间浮动参数'),
),
migrations.AlterField(
model_name='taskjob',
name='job_id',
field=models.CharField(editable=False, help_text='任务名称具有唯一性,修改任务时不要修改此项,如果确实需要修改此项,请删除后重新添加', max_length=16, unique=True, verbose_name='任务id'),
),
migrations.AlterField(
model_name='taskjob',
name='misfire_grace_time',
field=models.IntegerField(default=600, editable=False, help_text='强制执行结束的时间, 为避免撞车导致任务丢失, 没执行完就别执行了', verbose_name='任务运行时间'),
),
migrations.AlterField(
model_name='taskjob',
name='start_date',
field=models.DateTimeField(blank=True, editable=False, null=True, verbose_name='任务开始时间'),
),
migrations.AlterField(
model_name='taskjob',
name='task',
field=models.ForeignKey(help_text='在这里选择你要执行的任务', on_delete=django.db.models.deletion.CASCADE, to='auto_pt.task', verbose_name='选择任务'),
),
]

View File

@@ -0,0 +1,23 @@
# Generated by Django 4.1.2 on 2022-11-24 19:12
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('auto_pt', '0003_taskjob_name_alter_taskjob_args_and_more'),
]
operations = [
migrations.AlterField(
model_name='taskjob',
name='job_id',
field=models.CharField(editable=False, max_length=16, unique=True, verbose_name='任务id'),
),
migrations.AlterField(
model_name='taskjob',
name='name',
field=models.CharField(help_text='你对任务的描述,此项具有唯一性', max_length=16, verbose_name='任务名称'),
),
]

View File

@@ -1,5 +1,7 @@
# Create your models here.
from django.db import models
from django.db.models.signals import pre_save, post_save
from django.dispatch import receiver
from ptools.base import BaseEntity, Trigger, PushConfig, OCRConfig
@@ -26,8 +28,11 @@ class TaskJob(BaseEntity):
next_run_time  datetime 开始执行时间
misfire_grace_time:   强制执行结束的时间, 为避免撞车导致任务丢失, 没执行完就别执行了
"""
task = models.ForeignKey(verbose_name='任务名称', to=Task, on_delete=models.CASCADE)
job_id = models.CharField(verbose_name='任务ID', max_length=16, unique=True)
task = models.ForeignKey(verbose_name='选择任务', to=Task, on_delete=models.CASCADE,
help_text='在这里选择你要执行的任务')
name = models.CharField(verbose_name='任务名称', max_length=16,
help_text='你对任务的描述,此项具有唯一性')
job_id = models.CharField(verbose_name='任务id', max_length=16, unique=True, editable=False)
trigger = models.CharField(verbose_name='任务类型', choices=Trigger.choices, default=Trigger.cron, max_length=64)
task_exec = models.BooleanField(verbose_name='开启任务', default=True)
replace_existing = models.BooleanField(verbose_name='覆盖任务', default=True,
@@ -35,14 +40,14 @@ class TaskJob(BaseEntity):
expression_time = models.CharField(verbose_name='时间表达式',
help_text='在间隔任务表示间隔时长使用数字单位corn任务中为五位corn表达式“15 8 * * 2022”',
max_length=64)
start_date = models.DateTimeField(verbose_name='任务开始时间', null=True, blank=True)
end_date = models.DateTimeField(verbose_name='任务结束时间', null=True, blank=True)
misfire_grace_time = models.IntegerField(verbose_name='任务运行时间', default=600,
start_date = models.DateTimeField(verbose_name='任务开始时间', null=True, blank=True, editable=False)
end_date = models.DateTimeField(verbose_name='任务结束时间', null=True, blank=True, editable=False)
misfire_grace_time = models.IntegerField(verbose_name='任务运行时间', default=600, editable=False,
help_text='强制执行结束的时间, 为避免撞车导致任务丢失, 没执行完就别执行了')
jitter = models.IntegerField(verbose_name='时间浮动参数', default=1200,
jitter = models.IntegerField(verbose_name='时间浮动参数', default=1200, editable=False,
help_text='增强时间随机性')
args = models.CharField(verbose_name='任务参数',
help_text='执行代码所需要的参数。',
help_text='执行代码所需要的参数。默认不需要填写,有需要填写参数的任务会特别说明',
max_length=128, null=True, blank=True)
def __str__(self):
@@ -73,7 +78,8 @@ class Notify(BaseEntity):
touser = models.CharField(verbose_name='接收者', max_length=64,
help_text='接收者用户名/UID',
null=True, blank=True)
custom_server = models.URLField(verbose_name='自定义服务器', null=True, blank=True, help_text='无自定义服务器的,请勿填写!')
custom_server = models.URLField(verbose_name='自定义服务器', null=True, blank=True,
help_text='无自定义服务器的,请勿填写!')
class Meta:
verbose_name = '通知推送'