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 0" class="badge bg-secondary ms-1">{{tasksService.incompleteFileTasks.length}}
+
+ Started 0" class="badge bg-secondary ms-1">{{tasksService.startedFileTasks.length}}
-
+
+
+
+
+ Queued 0" class="badge bg-secondary ms-1">{{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