diff --git a/bookwyrm/templates/settings/celery.html b/bookwyrm/templates/settings/celery.html index 7ce6553fb..6a3ee6574 100644 --- a/bookwyrm/templates/settings/celery.html +++ b/bookwyrm/templates/settings/celery.html @@ -9,6 +9,14 @@ {% block panel %} +
+

+ {% trans "You can set up monitoring to check if Celery is running by querying:" %} + {% url "settings-celery-ping" as url %} + {{ url }} +

+
+ {% if queues %}

{% trans "Queues" %}

diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index cd07cbf00..586af137d 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -334,6 +334,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 cb4d79abd..7cfa227a5 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..8c6b9f5a3 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(status=500)