Use pre_execute signal to specify started vs queued

This commit is contained in:
Michael Shamoon 2022-06-06 01:39:45 -07:00
parent a90dd2ad1e
commit bd995089a8
8 changed files with 54 additions and 21 deletions

View File

@ -39,7 +39,7 @@
</th> </th>
<th scope="col" i18n>Name</th> <th scope="col" i18n>Name</th>
<th scope="col" class="d-none d-lg-table-cell" i18n>Created</th> <th scope="col" class="d-none d-lg-table-cell" i18n>Created</th>
<th scope="col" class="d-none d-lg-table-cell" *ngIf="activeTab != 'incomplete'" i18n>Results</th> <th scope="col" class="d-none d-lg-table-cell" *ngIf="activeTab != 'started' && activeTab != 'queued'" i18n>Results</th>
<th scope="col" class="d-table-cell d-lg-none" i18n>Info</th> <th scope="col" class="d-table-cell d-lg-none" i18n>Info</th>
<th scope="col" i18n>Actions</th> <th scope="col" i18n>Actions</th>
</tr> </tr>
@ -104,10 +104,16 @@
<ng-container [ngTemplateOutlet]="tasksTemplate" [ngTemplateOutletContext]="{tasks:tasksService.completedFileTasks}"></ng-container> <ng-container [ngTemplateOutlet]="tasksTemplate" [ngTemplateOutletContext]="{tasks:tasksService.completedFileTasks}"></ng-container>
</ng-template> </ng-template>
</li> </li>
<li ngbNavItem="incomplete"> <li ngbNavItem="started">
<a ngbNavLink i18n>Incomplete&nbsp;<span *ngIf="tasksService.incompleteFileTasks.length > 0" class="badge bg-secondary ms-1">{{tasksService.incompleteFileTasks.length}}</span></a> <a ngbNavLink i18n>Started&nbsp;<span *ngIf="tasksService.startedFileTasks.length > 0" class="badge bg-secondary ms-1">{{tasksService.startedFileTasks.length}}</span></a>
<ng-template ngbNavContent> <ng-template ngbNavContent>
<ng-container [ngTemplateOutlet]="tasksTemplate" [ngTemplateOutletContext]="{tasks:tasksService.incompleteFileTasks}"></ng-container> <ng-container [ngTemplateOutlet]="tasksTemplate" [ngTemplateOutletContext]="{tasks:tasksService.startedFileTasks}"></ng-container>
</ng-template>
</li>
<li ngbNavItem="queued">
<a ngbNavLink i18n>Queued&nbsp;<span *ngIf="tasksService.queuedFileTasks.length > 0" class="badge bg-secondary ms-1">{{tasksService.queuedFileTasks.length}}</span></a>
<ng-template ngbNavContent>
<ng-container [ngTemplateOutlet]="tasksTemplate" [ngTemplateOutletContext]="{tasks:tasksService.queuedFileTasks}"></ng-container>
</ng-template> </ng-template>
</li> </li>
</ul> </ul>

View File

@ -77,8 +77,11 @@ export class TasksComponent implements OnInit, OnDestroy {
get currentTasks(): PaperlessTask[] { get currentTasks(): PaperlessTask[] {
let tasks: PaperlessTask[] let tasks: PaperlessTask[]
switch (this.activeTab) { switch (this.activeTab) {
case 'incomplete': case 'queued':
tasks = this.tasksService.incompleteFileTasks tasks = this.tasksService.queuedFileTasks
break
case 'started':
tasks = this.tasksService.startedFileTasks
break break
case 'completed': case 'completed':
tasks = this.tasksService.completedFileTasks tasks = this.tasksService.completedFileTasks

View File

@ -6,7 +6,8 @@ export enum PaperlessTaskType {
} }
export enum PaperlessTaskStatus { export enum PaperlessTaskStatus {
Incomplete = 'incomplete', Queued = 'queued',
Started = 'started',
Complete = 'complete', Complete = 'complete',
Failed = 'failed', Failed = 'failed',
Unknown = 'unknown', Unknown = 'unknown',
@ -25,5 +26,7 @@ export interface PaperlessTask extends ObjectWithId {
created: Date created: Date
started?: Date
result: string result: string
} }

View File

@ -26,10 +26,12 @@ export class TasksService {
return this.fileTasks.slice(0) return this.fileTasks.slice(0)
} }
public get incompleteFileTasks(): PaperlessTask[] { public get queuedFileTasks(): PaperlessTask[] {
return this.fileTasks.filter( return this.fileTasks.filter((t) => t.status == PaperlessTaskStatus.Queued)
(t) => t.status == PaperlessTaskStatus.Incomplete }
)
public get startedFileTasks(): PaperlessTask[] {
return this.fileTasks.filter((t) => t.status == PaperlessTaskStatus.Started)
} }
public get completedFileTasks(): PaperlessTask[] { public get completedFileTasks(): PaperlessTask[] {

View File

@ -15,6 +15,7 @@ def init_paperless_tasks(apps, schema_editor):
task_id=task.id, task_id=task.id,
name=task.name, name=task.name,
created=task.started, created=task.started,
started=task.started,
acknowledged=True, acknowledged=True,
) )
task.paperlesstask = paperlesstask task.paperlesstask = paperlesstask
@ -45,9 +46,11 @@ class Migration(migrations.Migration):
("name", models.CharField(max_length=256)), ("name", models.CharField(max_length=256)),
( (
"created", "created",
models.DateTimeField( models.DateTimeField(auto_now=True, verbose_name="created"),
auto_now=True, db_index=True, verbose_name="created" ),
), (
"started",
models.DateTimeField(verbose_name="started"),
), ),
("acknowledged", models.BooleanField(default=False)), ("acknowledged", models.BooleanField(default=False)),
( (

View File

@ -507,7 +507,8 @@ class PaperlessTask(models.Model):
task_id = models.CharField(max_length=128) task_id = models.CharField(max_length=128)
name = models.CharField(max_length=256) 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( attempted_task = models.OneToOneField(
Task, Task,
on_delete=models.CASCADE, on_delete=models.CASCADE,

View File

@ -622,7 +622,10 @@ class TasksViewSerializer(serializers.ModelSerializer):
def get_status(self, obj): def get_status(self, obj):
if obj.attempted_task is None: if obj.attempted_task is None:
return "incomplete" if obj.started:
return "started"
else:
return "queued"
elif obj.attempted_task.success: elif obj.attempted_task.success:
return "complete" return "complete"
elif not obj.attempted_task.success: elif not obj.attempted_task.success:

View File

@ -514,12 +514,24 @@ def init_paperless_task(sender, task, **kwargs):
paperless_task.save() paperless_task.save()
@receiver(models.signals.post_save, sender=django_q.tasks.Task) @receiver(django_q.signals.pre_execute)
def update_paperless_task(sender, instance, **kwargs): def paperless_task_started(sender, task, **kwargs):
print(task)
try: try:
if instance.func == "documents.tasks.consume_file": if task["func"] == "documents.tasks.consume_file":
paperless_task = PaperlessTask.objects.get(task_id=instance.id) paperless_task = PaperlessTask.objects.get(task_id=task["id"])
paperless_task.attempted_task = instance 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() paperless_task.save()
except PaperlessTask.DoesNotExist: except PaperlessTask.DoesNotExist:
pass pass