From bd995089a870608523df6b5c4956140859ebddc4 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 6 Jun 2022 01:39:45 -0700 Subject: [PATCH] Use pre_execute signal to specify started vs queued --- .../manage/tasks/tasks.component.html | 14 ++++++++---- .../manage/tasks/tasks.component.ts | 7 ++++-- src-ui/src/app/data/paperless-task.ts | 5 ++++- src-ui/src/app/services/tasks.service.ts | 10 +++++---- .../migrations/1021_paperlesstask.py | 9 +++++--- src/documents/models.py | 3 ++- src/documents/serialisers.py | 5 ++++- src/documents/signals/handlers.py | 22 ++++++++++++++----- 8 files changed, 54 insertions(+), 21 deletions(-) diff --git a/src-ui/src/app/components/manage/tasks/tasks.component.html b/src-ui/src/app/components/manage/tasks/tasks.component.html index d6b03e207..fcffc0ba3 100644 --- a/src-ui/src/app/components/manage/tasks/tasks.component.html +++ b/src-ui/src/app/components/manage/tasks/tasks.component.html @@ -39,7 +39,7 @@ Name Created - Results + Results Info Actions @@ -104,10 +104,16 @@ -
  • - Incomplete {{tasksService.incompleteFileTasks.length}} +
  • + Started {{tasksService.startedFileTasks.length}} - + + +
  • +
  • + Queued {{tasksService.queuedFileTasks.length}} + +
  • diff --git a/src-ui/src/app/components/manage/tasks/tasks.component.ts b/src-ui/src/app/components/manage/tasks/tasks.component.ts index 249fbce39..3779e7281 100644 --- a/src-ui/src/app/components/manage/tasks/tasks.component.ts +++ b/src-ui/src/app/components/manage/tasks/tasks.component.ts @@ -77,8 +77,11 @@ export class TasksComponent implements OnInit, OnDestroy { get currentTasks(): PaperlessTask[] { let tasks: PaperlessTask[] switch (this.activeTab) { - case 'incomplete': - tasks = this.tasksService.incompleteFileTasks + case 'queued': + tasks = this.tasksService.queuedFileTasks + break + case 'started': + tasks = this.tasksService.startedFileTasks break case 'completed': tasks = this.tasksService.completedFileTasks diff --git a/src-ui/src/app/data/paperless-task.ts b/src-ui/src/app/data/paperless-task.ts index 15582913c..5984725f9 100644 --- a/src-ui/src/app/data/paperless-task.ts +++ b/src-ui/src/app/data/paperless-task.ts @@ -6,7 +6,8 @@ export enum PaperlessTaskType { } export enum PaperlessTaskStatus { - Incomplete = 'incomplete', + Queued = 'queued', + Started = 'started', Complete = 'complete', Failed = 'failed', Unknown = 'unknown', @@ -25,5 +26,7 @@ export interface PaperlessTask extends ObjectWithId { created: Date + started?: Date + result: string } diff --git a/src-ui/src/app/services/tasks.service.ts b/src-ui/src/app/services/tasks.service.ts index 952b05a2b..8518d6f0e 100644 --- a/src-ui/src/app/services/tasks.service.ts +++ b/src-ui/src/app/services/tasks.service.ts @@ -26,10 +26,12 @@ export class TasksService { return this.fileTasks.slice(0) } - public get incompleteFileTasks(): PaperlessTask[] { - return this.fileTasks.filter( - (t) => t.status == PaperlessTaskStatus.Incomplete - ) + public get queuedFileTasks(): PaperlessTask[] { + return this.fileTasks.filter((t) => t.status == PaperlessTaskStatus.Queued) + } + + public get startedFileTasks(): PaperlessTask[] { + return this.fileTasks.filter((t) => t.status == PaperlessTaskStatus.Started) } public get completedFileTasks(): PaperlessTask[] { diff --git a/src/documents/migrations/1021_paperlesstask.py b/src/documents/migrations/1021_paperlesstask.py index 8d38db802..7e97e2af3 100644 --- a/src/documents/migrations/1021_paperlesstask.py +++ b/src/documents/migrations/1021_paperlesstask.py @@ -15,6 +15,7 @@ def init_paperless_tasks(apps, schema_editor): task_id=task.id, name=task.name, created=task.started, + started=task.started, acknowledged=True, ) task.paperlesstask = paperlesstask @@ -45,9 +46,11 @@ class Migration(migrations.Migration): ("name", models.CharField(max_length=256)), ( "created", - models.DateTimeField( - auto_now=True, db_index=True, verbose_name="created" - ), + models.DateTimeField(auto_now=True, verbose_name="created"), + ), + ( + "started", + models.DateTimeField(verbose_name="started"), ), ("acknowledged", models.BooleanField(default=False)), ( diff --git a/src/documents/models.py b/src/documents/models.py index 63c1c6e33..7c65549ba 100644 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -507,7 +507,8 @@ class PaperlessTask(models.Model): task_id = models.CharField(max_length=128) name = models.CharField(max_length=256) - created = models.DateTimeField(_("created"), auto_now=True, db_index=True) + created = models.DateTimeField(_("created"), auto_now=True) + started = models.DateTimeField(_("started")) attempted_task = models.OneToOneField( Task, on_delete=models.CASCADE, diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 494efb5c4..c4c30f01f 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -622,7 +622,10 @@ class TasksViewSerializer(serializers.ModelSerializer): def get_status(self, obj): if obj.attempted_task is None: - return "incomplete" + if obj.started: + return "started" + else: + return "queued" elif obj.attempted_task.success: return "complete" elif not obj.attempted_task.success: diff --git a/src/documents/signals/handlers.py b/src/documents/signals/handlers.py index 2ae78ab80..07d0392b5 100644 --- a/src/documents/signals/handlers.py +++ b/src/documents/signals/handlers.py @@ -514,12 +514,24 @@ def init_paperless_task(sender, task, **kwargs): paperless_task.save() -@receiver(models.signals.post_save, sender=django_q.tasks.Task) -def update_paperless_task(sender, instance, **kwargs): +@receiver(django_q.signals.pre_execute) +def paperless_task_started(sender, task, **kwargs): + print(task) try: - if instance.func == "documents.tasks.consume_file": - paperless_task = PaperlessTask.objects.get(task_id=instance.id) - paperless_task.attempted_task = instance + if task["func"] == "documents.tasks.consume_file": + paperless_task = PaperlessTask.objects.get(task_id=task["id"]) + paperless_task.started = timezone.now() + paperless_task.save() + except PaperlessTask.DoesNotExist: + pass + + +@receiver(models.signals.post_save, sender=django_q.tasks.Task) +def update_paperless_task(sender, task, **kwargs): + try: + if task.func == "documents.tasks.consume_file": + paperless_task = PaperlessTask.objects.get(task_id=task.id) + paperless_task.attempted_task = task paperless_task.save() except PaperlessTask.DoesNotExist: pass