From 3e198854cf20efc02bbd4f92fae9dbfe72c8719d Mon Sep 17 00:00:00 2001 From: ngfchl Date: Tue, 11 Oct 2022 09:31:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=87=AA=E5=8A=A8=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auto_pt/admin.py | 36 ++++++++++++++++++++++-------------- auto_pt/models.py | 10 +++++----- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/auto_pt/admin.py b/auto_pt/admin.py index bd1852b..b98d573 100644 --- a/auto_pt/admin.py +++ b/auto_pt/admin.py @@ -7,6 +7,7 @@ from django.http import JsonResponse from simpleui.admin import AjaxAdmin from auto_pt.models import Task, TaskJob, Notify, OCR +from auto_pt.views import logger from pt_site import views as tasks from pt_site.views import pt_spider from ptools.base import Trigger @@ -15,7 +16,7 @@ from ptools.base import Trigger # Register your models here. -@admin.register(Task) +# @admin.register(Task) class TaskAdmin(admin.ModelAdmin): # instead of ModelAdmin # 显示字段 list_display = ( @@ -59,24 +60,26 @@ class TaskJobAdmin(admin.ModelAdmin): # instead of ModelAdmin ) search_fields = ('task', 'job_id') list_filter = ('task', 'trigger', 'task_exec',) - autocomplete_fields = ('task',) + # autocomplete_fields = ('task',) list_editable = ('task_exec',) def save_model(self, request, obj: TaskJob, form, change): + obj.save() # 从字符串获取function func = getattr(tasks, obj.task.name) + # 检查任务是否存在,已存在就删除任务 exist_job = tasks.scheduler.get_job(obj.job_id) if exist_job: - print(exist_job.id) + logger.info(exist_job.id + '任务已存在,将移除后重新添加!') exist_job.remove() - print(tasks.scheduler.get_jobs()) - # 如果任务未启用,只保存,不入库,已存在任务就删除 + logger.info(exist_job.id + '任务移除成功!') if not obj.task_exec: - obj.save() - messages.success(request, obj.job_id + ' 保存成功!如需执行任务,请勾选开启任务!') + logger.info(exist_job.id + '任务未开启,将只入库不执行!') + super().save_model(request, obj, form, change) else: try: - # new_job = None + # 添加任务 + logger.info(exist_job.id + ' 任务添加中!') if obj.trigger == Trigger.cron: new_job = tasks.scheduler.add_job(func, trigger=CronTrigger.from_crontab(obj.expression_time), @@ -97,15 +100,20 @@ class TaskJobAdmin(admin.ModelAdmin): # instead of ModelAdmin misfire_grace_time=obj.misfire_grace_time, jitter=obj.jitter, ) - print(new_job.pending) - info = ' 添加成功!' if not exist_job else '更新成功!' - pt_spider.send_text('计划任务:' + new_job.id + info) - messages.success(request, new_job.id + info) - obj.save() + # print(new_job.pending) + # pt_spider.send_text('计划任务:' + new_job.id + info) + # messages.success(request, new_job.id + info) + # 如果任务未启用,只保存,不入库,已存在任务就删除 + logger.info(exist_job.id + ' 任务添加成功!') + logger.info(obj.job_id + ' 任务状态是否暂停:' + str(new_job.pending)) + logger.info('当前存在的所有自动任务:') + logger.info(tasks.scheduler.get_jobs()) + messages.success(request, + obj.job_id + ' 保存成功!' + ('如需执行任务,请勾选开启任务!' if obj.task_exec else '')) except Exception as e: obj.task_exec = False obj.save() - raise + # raise pt_spider.send_text('计划任务:' + obj.job_id + '任务添加失败!原因:' + str(e)) messages.error(request, obj.job_id + '任务添加失败!原因:' + str(e)) diff --git a/auto_pt/models.py b/auto_pt/models.py index c845b75..a420dec 100644 --- a/auto_pt/models.py +++ b/auto_pt/models.py @@ -29,18 +29,18 @@ class TaskJob(BaseEntity): task = models.ForeignKey(verbose_name='任务名称', to=Task, on_delete=models.CASCADE) job_id = models.CharField(verbose_name='任务ID', max_length=16, unique=True) trigger = models.CharField(verbose_name='任务类型', choices=Trigger.choices, default=Trigger.cron, max_length=64) - task_exec = models.BooleanField(verbose_name='开启任务', default=False) + task_exec = models.BooleanField(verbose_name='开启任务', default=True) replace_existing = models.BooleanField(verbose_name='覆盖任务', default=True, help_text='不设置此项重启项目后会报任务id已存在的错误, 设置此参数后会对已有的任务进行覆盖') expression_time = models.CharField(verbose_name='时间表达式', - help_text='在间隔任务表示间隔时长使用数字,单位:秒,corn任务中为corn表达式:“0 15 8 ? * * 2022”', + 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=120, + misfire_grace_time = models.IntegerField(verbose_name='任务运行时间', default=600, help_text='强制执行结束的时间, 为避免撞车导致任务丢失, 没执行完就别执行了') - jitter = models.IntegerField(verbose_name='时间浮动参数', default=120, - help_text='强制执行结束的时间, 为避免撞车导致任务丢失, 没执行完就别执行了') + jitter = models.IntegerField(verbose_name='时间浮动参数', default=1200, + help_text='增强时间随机性') args = models.CharField(verbose_name='任务参数', help_text='执行代码所需要的参数。', max_length=128, null=True, blank=True)