From c1090703e2f25901657fc7aac8ef543b8ba7408b Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 30 Jan 2023 08:27:40 -0800 Subject: [PATCH] Adds a ping-able celery url This will let admins set up a check to notify you if celery is not running. --- bookwyrm/urls.py | 3 +++ bookwyrm/views/__init__.py | 2 +- bookwyrm/views/admin/celery_status.py | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 73bdd3755..9828936e1 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -329,6 +329,9 @@ urlpatterns = [ re_path( r"^settings/celery/?$", views.CeleryStatus.as_view(), name="settings-celery" ), + re_path( + r"^settings/celery/ping?$", views.celery_ping, name="settings-celery-ping" + ), re_path( r"^settings/email-config/?$", views.EmailConfig.as_view(), diff --git a/bookwyrm/views/__init__.py b/bookwyrm/views/__init__.py index 353275c46..cbc7998fa 100644 --- a/bookwyrm/views/__init__.py +++ b/bookwyrm/views/__init__.py @@ -4,7 +4,7 @@ from .admin.announcements import Announcements, Announcement from .admin.announcements import EditAnnouncement, delete_announcement from .admin.automod import AutoMod, automod_delete, run_automod from .admin.automod import schedule_automod_task, unschedule_automod_task -from .admin.celery_status import CeleryStatus +from .admin.celery_status import CeleryStatus, celery_ping from .admin.dashboard import Dashboard from .admin.federation import Federation, FederatedServer from .admin.federation import AddFederatedServer, ImportServerBlocklist diff --git a/bookwyrm/views/admin/celery_status.py b/bookwyrm/views/admin/celery_status.py index 0e88f55f1..61fedd341 100644 --- a/bookwyrm/views/admin/celery_status.py +++ b/bookwyrm/views/admin/celery_status.py @@ -1,8 +1,10 @@ """ celery status """ from django.contrib.auth.decorators import login_required, permission_required +from django.http import HttpResponse from django.template.response import TemplateResponse from django.utils.decorators import method_decorator from django.views import View +from django.views.decorators.http import require_GET import redis from celerywyrm import settings @@ -50,3 +52,18 @@ class CeleryStatus(View): "errors": errors, } return TemplateResponse(request, "settings/celery.html", data) + + +@require_GET +# pylint: disable=unused-argument +def celery_ping(request): + """Just tells you if Celery is on or not""" + try: + ping = celery.control.inspect().ping() + if ping: + return HttpResponse() + # pylint: disable=broad-except + except Exception: + pass + + return HttpResponse(500)