mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-12-02 14:26:41 +00:00
Adds celery status view
This commit is contained in:
parent
fcf796abe1
commit
0f55b76a93
6 changed files with 119 additions and 0 deletions
59
bookwyrm/templates/settings/celery.html
Normal file
59
bookwyrm/templates/settings/celery.html
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
{% extends 'settings/layout.html' %}
|
||||||
|
{% load humanize %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% load celery_tags %}
|
||||||
|
|
||||||
|
{% block title %}{% trans "Celery Status" %}{% endblock %}
|
||||||
|
|
||||||
|
{% block header %}{% trans "Celery Status" %}{% endblock %}
|
||||||
|
|
||||||
|
{% block panel %}
|
||||||
|
|
||||||
|
{% if stats %}
|
||||||
|
<section class="block content">
|
||||||
|
<h2>{% trans "Workers" %}</h2>
|
||||||
|
|
||||||
|
{% for worker_name, worker in stats.items %}
|
||||||
|
<div class="box">
|
||||||
|
<h3>{{ worker_name }}</h3>
|
||||||
|
{% trans "Uptime:" %} {{ worker.uptime|uptime }}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
<section class="block content">
|
||||||
|
<h2>{% trans "Active Tasks" %}</h2>
|
||||||
|
{% for worker in active_tasks.values %}
|
||||||
|
<div class="table-container">
|
||||||
|
<table class="table is-striped is-fullwidth">
|
||||||
|
<tr>
|
||||||
|
<th>{% trans "ID" %}</th>
|
||||||
|
<th>{% trans "Task name" %}</th>
|
||||||
|
<th>{% trans "Start time" %}</th>
|
||||||
|
<th>{% trans "Priority" %}</th>
|
||||||
|
</tr>
|
||||||
|
{% for task in worker %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ task.id }}</td>
|
||||||
|
<td>{{ task.name|shortname }}</td>
|
||||||
|
<td>{{ task.time_start|datestamp }} (UTC)</td>
|
||||||
|
<td>{{ task.delivery_info.routing_key }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
<div class="notification is-danger is-flex is-align-items-start">
|
||||||
|
<span class="icon icon-warning is-size-4 pr-3" aria-hidden="true"></span>
|
||||||
|
<span>
|
||||||
|
{% trans "Could not connect to Celery" %}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -74,6 +74,15 @@
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% if perms.edit_instance_settings %}
|
||||||
|
<h2 class="menu-label">{% trans "System" %}</h2>
|
||||||
|
<ul class="menu-list">
|
||||||
|
<li>
|
||||||
|
{% url 'settings-celery' as url %}
|
||||||
|
<a href="{{ url }}"{% if url in request.path %} class="is-active" aria-selected="true"{% endif %}>{% trans "Celery status" %}</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
{% endif %}
|
||||||
{% if perms.bookwyrm.edit_instance_settings %}
|
{% if perms.bookwyrm.edit_instance_settings %}
|
||||||
<h2 class="menu-label">{% trans "Instance Settings" %}</h2>
|
<h2 class="menu-label">{% trans "Instance Settings" %}</h2>
|
||||||
<ul class="menu-list">
|
<ul class="menu-list">
|
||||||
|
|
24
bookwyrm/templatetags/celery_tags.py
Normal file
24
bookwyrm/templatetags/celery_tags.py
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
""" template filters for really common utilities """
|
||||||
|
import datetime
|
||||||
|
from django import template
|
||||||
|
|
||||||
|
|
||||||
|
register = template.Library()
|
||||||
|
|
||||||
|
|
||||||
|
@register.filter(name="uptime")
|
||||||
|
def uptime(seconds):
|
||||||
|
"""Seconds uptime to a readable format"""
|
||||||
|
return str(datetime.timedelta(seconds=seconds))
|
||||||
|
|
||||||
|
|
||||||
|
@register.filter(name="datestamp")
|
||||||
|
def get_date(timestamp):
|
||||||
|
"""Go from a string timestamp to a date object"""
|
||||||
|
return datetime.datetime.fromtimestamp(timestamp)
|
||||||
|
|
||||||
|
|
||||||
|
@register.filter(name="shortname")
|
||||||
|
def shortname(name):
|
||||||
|
"""removes bookwyrm.celery..."""
|
||||||
|
return ".".join(name.split(".")[-2:])
|
|
@ -291,6 +291,9 @@ urlpatterns = [
|
||||||
views.Report.as_view(),
|
views.Report.as_view(),
|
||||||
name="report-link",
|
name="report-link",
|
||||||
),
|
),
|
||||||
|
re_path(
|
||||||
|
r"^settings/celery/?$", views.CeleryStatus.as_view(), name="settings-celery"
|
||||||
|
),
|
||||||
# landing pages
|
# landing pages
|
||||||
re_path(r"^about/?$", views.about, name="about"),
|
re_path(r"^about/?$", views.about, name="about"),
|
||||||
re_path(r"^privacy/?$", views.privacy, name="privacy"),
|
re_path(r"^privacy/?$", views.privacy, name="privacy"),
|
||||||
|
|
|
@ -4,6 +4,7 @@ from .admin.announcements import Announcements, Announcement
|
||||||
from .admin.announcements import EditAnnouncement, delete_announcement
|
from .admin.announcements import EditAnnouncement, delete_announcement
|
||||||
from .admin.automod import AutoMod, automod_delete, run_automod
|
from .admin.automod import AutoMod, automod_delete, run_automod
|
||||||
from .admin.automod import schedule_automod_task, unschedule_automod_task
|
from .admin.automod import schedule_automod_task, unschedule_automod_task
|
||||||
|
from .admin.celery_status import CeleryStatus
|
||||||
from .admin.dashboard import Dashboard
|
from .admin.dashboard import Dashboard
|
||||||
from .admin.federation import Federation, FederatedServer
|
from .admin.federation import Federation, FederatedServer
|
||||||
from .admin.federation import AddFederatedServer, ImportServerBlocklist
|
from .admin.federation import AddFederatedServer, ImportServerBlocklist
|
||||||
|
|
23
bookwyrm/views/admin/celery_status.py
Normal file
23
bookwyrm/views/admin/celery_status.py
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
""" manage site settings """
|
||||||
|
from django.contrib.auth.decorators import login_required, permission_required
|
||||||
|
from django.template.response import TemplateResponse
|
||||||
|
from django.utils.decorators import method_decorator
|
||||||
|
from django.views import View
|
||||||
|
|
||||||
|
from bookwyrm.tasks import app as celery
|
||||||
|
|
||||||
|
|
||||||
|
# pylint: disable= no-self-use
|
||||||
|
@method_decorator(login_required, name="dispatch")
|
||||||
|
@method_decorator(
|
||||||
|
permission_required("bookwyrm.edit_instance_settings", raise_exception=True),
|
||||||
|
name="dispatch",
|
||||||
|
)
|
||||||
|
class CeleryStatus(View):
|
||||||
|
"""manage things like the instance name"""
|
||||||
|
|
||||||
|
def get(self, request):
|
||||||
|
"""edit form"""
|
||||||
|
inspect = celery.control.inspect()
|
||||||
|
data = {"stats": inspect.stats(), "active_tasks": inspect.active()}
|
||||||
|
return TemplateResponse(request, "settings/celery.html", data)
|
Loading…
Reference in a new issue