mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-02 13:45:10 -05:00
Update views.py
[ci ckip]
This commit is contained in:
parent
1c7c703e5f
commit
a0a9e0c6c8
@ -2579,6 +2579,17 @@ class CustomFieldViewSet(ModelViewSet):
|
|||||||
class SystemStatusView(PassUserMixin):
|
class SystemStatusView(PassUserMixin):
|
||||||
permission_classes = (IsAuthenticated,)
|
permission_classes = (IsAuthenticated,)
|
||||||
|
|
||||||
|
def _get_next_scheduled_task_schedule(
|
||||||
|
self,
|
||||||
|
schedule: dict,
|
||||||
|
task_name: str,
|
||||||
|
last_run,
|
||||||
|
) -> datetime | None:
|
||||||
|
# example: {'Check all e-mail accounts': {'task': 'paperless_mail.tasks.process_mail_accounts', 'schedule': <crontab: */10 * * * * (m/h/dM/MY/d)>, 'options': {'expires': 540.0}}, 'Train the classifier': {'task': 'documents.tasks.train_classifier', 'schedule': <crontab: 5 */1 * * * (m/h/dM/MY/d)>, 'options': {'expires': 3540.0}}, 'Optimize the index': {'task': 'documents.tasks.index_optimize', 'schedule': <crontab: 0 0 * * * (m/h/dM/MY/d)>, 'options': {'expires': 82800.0}}, 'Perform sanity check': {'task': 'documents.tasks.sanity_check', 'schedule': <crontab: 30 0 * * sun (m/h/dM/MY/d)>, 'options': {'expires': 601200.0}}, 'Empty trash': {'task': 'documents.tasks.empty_trash', 'schedule': <crontab: 0 1 * * * (m/h/dM/MY/d)>, 'options': {'expires': 82800.0}}, 'Check and run scheduled workflows': {'task': 'documents.tasks.check_scheduled_workflows', 'schedule': <crontab: 5 */1 * * * (m/h/dM/MY/d)>, 'options': {'expires': 3540.0}}}
|
||||||
|
for _, task_data in schedule.items():
|
||||||
|
if task_data["task"] and task_data["task"].find(task_name) != -1:
|
||||||
|
return task_data["schedule"]
|
||||||
|
|
||||||
def get(self, request, format=None):
|
def get(self, request, format=None):
|
||||||
if not request.user.is_staff:
|
if not request.user.is_staff:
|
||||||
return HttpResponseForbidden("Insufficient permissions")
|
return HttpResponseForbidden("Insufficient permissions")
|
||||||
@ -2633,10 +2644,12 @@ class SystemStatusView(PassUserMixin):
|
|||||||
|
|
||||||
celery_error = None
|
celery_error = None
|
||||||
celery_url = None
|
celery_url = None
|
||||||
|
schedule = None
|
||||||
try:
|
try:
|
||||||
celery_ping = celery_app.control.inspect().ping()
|
celery_ping = celery_app.control.inspect().ping()
|
||||||
celery_url = next(iter(celery_ping.keys()))
|
celery_url = next(iter(celery_ping.keys()))
|
||||||
first_worker_ping = celery_ping[celery_url]
|
first_worker_ping = celery_ping[celery_url]
|
||||||
|
schedule = celery_app.conf.beat_schedule
|
||||||
if first_worker_ping["ok"] == "pong":
|
if first_worker_ping["ok"] == "pong":
|
||||||
celery_active = "OK"
|
celery_active = "OK"
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -2670,6 +2683,7 @@ class SystemStatusView(PassUserMixin):
|
|||||||
)
|
)
|
||||||
classifier_status = "OK"
|
classifier_status = "OK"
|
||||||
classifier_error = None
|
classifier_error = None
|
||||||
|
classifier_next_training = None
|
||||||
if last_trained_task is None:
|
if last_trained_task is None:
|
||||||
classifier_status = "WARNING"
|
classifier_status = "WARNING"
|
||||||
classifier_error = "No classifier training tasks found"
|
classifier_error = "No classifier training tasks found"
|
||||||
@ -2679,6 +2693,20 @@ class SystemStatusView(PassUserMixin):
|
|||||||
classifier_last_trained = (
|
classifier_last_trained = (
|
||||||
last_trained_task.date_done if last_trained_task else None
|
last_trained_task.date_done if last_trained_task else None
|
||||||
)
|
)
|
||||||
|
last_scheduled_trained_task = (
|
||||||
|
PaperlessTask.objects.filter(
|
||||||
|
task_name=PaperlessTask.TaskName.TRAIN_CLASSIFIER,
|
||||||
|
type=PaperlessTask.TaskType.SCHEDULED_TASK,
|
||||||
|
)
|
||||||
|
.order_by("-date_done")
|
||||||
|
.first()
|
||||||
|
)
|
||||||
|
if last_scheduled_trained_task and schedule:
|
||||||
|
classifier_next_training: datetime = self._get_next_scheduled_task_schedule(
|
||||||
|
schedule=schedule,
|
||||||
|
task_name=PaperlessTask.TaskName.TRAIN_CLASSIFIER,
|
||||||
|
last_run=last_trained_task.date_done,
|
||||||
|
)
|
||||||
|
|
||||||
last_sanity_check = (
|
last_sanity_check = (
|
||||||
PaperlessTask.objects.filter(
|
PaperlessTask.objects.filter(
|
||||||
@ -2689,6 +2717,7 @@ class SystemStatusView(PassUserMixin):
|
|||||||
)
|
)
|
||||||
sanity_check_status = "OK"
|
sanity_check_status = "OK"
|
||||||
sanity_check_error = None
|
sanity_check_error = None
|
||||||
|
sanity_check_next_run = None
|
||||||
if last_sanity_check is None:
|
if last_sanity_check is None:
|
||||||
sanity_check_status = "WARNING"
|
sanity_check_status = "WARNING"
|
||||||
sanity_check_error = "No sanity check tasks found"
|
sanity_check_error = "No sanity check tasks found"
|
||||||
@ -2698,6 +2727,20 @@ class SystemStatusView(PassUserMixin):
|
|||||||
sanity_check_last_run = (
|
sanity_check_last_run = (
|
||||||
last_sanity_check.date_done if last_sanity_check else None
|
last_sanity_check.date_done if last_sanity_check else None
|
||||||
)
|
)
|
||||||
|
last_scheduled_sanity_check = (
|
||||||
|
PaperlessTask.objects.filter(
|
||||||
|
task_name=PaperlessTask.TaskName.CHECK_SANITY,
|
||||||
|
type=PaperlessTask.TaskType.SCHEDULED_TASK,
|
||||||
|
)
|
||||||
|
.order_by("-date_done")
|
||||||
|
.first()
|
||||||
|
)
|
||||||
|
if last_scheduled_sanity_check and schedule:
|
||||||
|
sanity_check_next_run: datetime = self._get_next_scheduled_task_schedule(
|
||||||
|
schedule=schedule,
|
||||||
|
task_name=PaperlessTask.TaskName.CHECK_SANITY,
|
||||||
|
last_run=last_sanity_check.date_done,
|
||||||
|
)
|
||||||
|
|
||||||
return Response(
|
return Response(
|
||||||
{
|
{
|
||||||
@ -2732,9 +2775,11 @@ class SystemStatusView(PassUserMixin):
|
|||||||
"index_error": index_error,
|
"index_error": index_error,
|
||||||
"classifier_status": classifier_status,
|
"classifier_status": classifier_status,
|
||||||
"classifier_last_trained": classifier_last_trained,
|
"classifier_last_trained": classifier_last_trained,
|
||||||
|
"classifier_next_training": classifier_next_training,
|
||||||
"classifier_error": classifier_error,
|
"classifier_error": classifier_error,
|
||||||
"sanity_check_status": sanity_check_status,
|
"sanity_check_status": sanity_check_status,
|
||||||
"sanity_check_last_run": sanity_check_last_run,
|
"sanity_check_last_run": sanity_check_last_run,
|
||||||
|
"sanity_check_next_run": sanity_check_next_run,
|
||||||
"sanity_check_error": sanity_check_error,
|
"sanity_check_error": sanity_check_error,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user