Add warning for stale index / classifier

This commit is contained in:
shamoon 2024-02-13 22:01:22 -08:00
parent d56eb2eed5
commit 86c7bf6310
5 changed files with 31 additions and 10 deletions

View File

@ -410,10 +410,10 @@ describe('SettingsComponent', () => {
'Error 61 connecting to localhost:6379. Connection refused.', 'Error 61 connecting to localhost:6379. Connection refused.',
celery_status: SystemStatusItemStatus.ERROR, celery_status: SystemStatusItemStatus.ERROR,
index_status: SystemStatusItemStatus.OK, index_status: SystemStatusItemStatus.OK,
index_last_modified: new Date(), index_last_modified: new Date().toISOString(),
index_error: null, index_error: null,
classifier_status: SystemStatusItemStatus.OK, classifier_status: SystemStatusItemStatus.OK,
classifier_last_modified: new Date(), classifier_last_modified: new Date().toISOString(),
classifier_error: null, classifier_error: null,
}, },
} }

View File

@ -106,25 +106,33 @@
<dd> <dd>
{{status.tasks.index_status}} {{status.tasks.index_status}}
@if (status.tasks.index_status === 'OK') { @if (status.tasks.index_status === 'OK') {
<i-bs name="check-circle-fill" class="text-success ms-1" [ngbPopover]="indexStatus" triggers="mouseenter:mouseleave"></i-bs> @if (isStale(status.tasks.index_last_modified)) {
<i-bs name="exclamation-triangle-fill" class="text-warning ms-1" [ngbPopover]="indexStatus" triggers="mouseenter:mouseleave"></i-bs>
} @else {
<i-bs name="check-circle-fill" class="text-success ms-1" [ngbPopover]="indexStatus" triggers="mouseenter:mouseleave"></i-bs>
}
} @else { } @else {
<i-bs name="exclamation-triangle-fill" class="text-danger ms-1" ngbPopover="{{status.tasks.index_error}}" triggers="mouseenter:mouseleave"></i-bs> <i-bs name="exclamation-triangle-fill" class="text-danger ms-1" ngbPopover="{{status.tasks.index_error}}" triggers="mouseenter:mouseleave"></i-bs>
} }
</dd> </dd>
<ng-template #indexStatus> <ng-template #indexStatus>
<h6><ng-container i18n>Last Updated</ng-container>:</h6> <span class="font-monospace small">{{status.tasks.index_last_modified}}</span> <h6><ng-container i18n>Last Updated</ng-container>:</h6> <span class="font-monospace small">{{status.tasks.index_last_modified | customDate:'medium'}}</span>
</ng-template> </ng-template>
<dt i18n>Classifier Status</dt> <dt i18n>Classifier Status</dt>
<dd> <dd>
{{status.tasks.classifier_status}} {{status.tasks.classifier_status}}
@if (status.tasks.classifier_status === 'OK') { @if (status.tasks.classifier_status === 'OK') {
<i-bs name="check-circle-fill" class="text-success ms-1" [ngbPopover]="classifierStatus" triggers="mouseenter:mouseleave"></i-bs> @if (isStale(status.tasks.classifier_last_modified)) {
<i-bs name="exclamation-triangle-fill" class="text-warning ms-1" [ngbPopover]="classifierStatus" triggers="mouseenter:mouseleave"></i-bs>
} @else {
<i-bs name="check-circle-fill" class="text-success ms-1" [ngbPopover]="classifierStatus" triggers="mouseenter:mouseleave"></i-bs>
}
} @else { } @else {
<i-bs name="exclamation-triangle-fill" class="text-danger ms-1" ngbPopover="{{status.tasks.classifier_error}}" triggers="mouseenter:mouseleave"></i-bs> <i-bs name="exclamation-triangle-fill" class="text-danger ms-1" ngbPopover="{{status.tasks.classifier_error}}" triggers="mouseenter:mouseleave"></i-bs>
} }
</dd> </dd>
<ng-template #classifierStatus> <ng-template #classifierStatus>
<h6><ng-container i18n>Last Updated</ng-container>:</h6> <span class="font-monospace small">{{status.tasks.classifier_last_modified}}</span> <h6><ng-container i18n>Last Updated</ng-container>:</h6> <span class="font-monospace small">{{status.tasks.classifier_last_modified | customDate:'medium'}}</span>
</ng-template> </ng-template>
</dl> </dl>
</div> </div>

View File

@ -42,10 +42,10 @@ const status: SystemStatus = {
redis_error: 'Error 61 connecting to localhost:6379. Connection refused.', redis_error: 'Error 61 connecting to localhost:6379. Connection refused.',
celery_status: SystemStatusItemStatus.ERROR, celery_status: SystemStatusItemStatus.ERROR,
index_status: SystemStatusItemStatus.OK, index_status: SystemStatusItemStatus.OK,
index_last_modified: new Date(), index_last_modified: new Date().toISOString(),
index_error: null, index_error: null,
classifier_status: SystemStatusItemStatus.OK, classifier_status: SystemStatusItemStatus.OK,
classifier_last_modified: new Date(), classifier_last_modified: new Date().toISOString(),
classifier_error: null, classifier_error: null,
}, },
} }
@ -93,4 +93,11 @@ describe('SystemStatusDialogComponent', () => {
tick(3000) tick(3000)
expect(component.copied).toBeFalsy() expect(component.copied).toBeFalsy()
})) }))
it('should calculate if date is stale', () => {
const date = new Date()
date.setHours(date.getHours() - 25)
expect(component.isStale(date.toISOString())).toBeTruthy()
expect(component.isStale(date.toISOString(), 26)).toBeFalsy()
})
}) })

View File

@ -30,4 +30,10 @@ export class SystemStatusDialogComponent {
this.copied = false this.copied = false
}, 3000) }, 3000)
} }
public isStale(dateStr: string, hours: number = 24): boolean {
const date = new Date(dateStr)
const now = new Date()
return now.getTime() - date.getTime() > hours * 60 * 60 * 1000
}
} }

View File

@ -32,10 +32,10 @@ export interface SystemStatus {
redis_error: string redis_error: string
celery_status: SystemStatusItemStatus celery_status: SystemStatusItemStatus
index_status: SystemStatusItemStatus index_status: SystemStatusItemStatus
index_last_modified: Date index_last_modified: string // ISO date string
index_error: string index_error: string
classifier_status: SystemStatusItemStatus classifier_status: SystemStatusItemStatus
classifier_last_modified: Date classifier_last_modified: string // ISO date string
classifier_error: string classifier_error: string
} }
} }