diff --git a/apps/jumpserver/urls.py b/apps/jumpserver/urls.py
index 331930c3a..b8d434dc6 100644
--- a/apps/jumpserver/urls.py
+++ b/apps/jumpserver/urls.py
@@ -31,6 +31,7 @@ api_v2 = [
app_view_patterns = [
path('auth/', include('authentication.urls.view_urls'), name='auth'),
+ path('ops/', include('ops.urls.view_urls'), name='ops')
]
diff --git a/apps/ops/templates/ops/celery_task_log.html b/apps/ops/templates/ops/celery_task_log.html
new file mode 100644
index 000000000..c79ff42b2
--- /dev/null
+++ b/apps/ops/templates/ops/celery_task_log.html
@@ -0,0 +1,91 @@
+{% load static %}
+{% load i18n %}
+
+ {% trans 'Task log' %}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/ops/urls/view_urls.py b/apps/ops/urls/view_urls.py
index fb52a3e07..21bc4cc41 100644
--- a/apps/ops/urls/view_urls.py
+++ b/apps/ops/urls/view_urls.py
@@ -1,9 +1,14 @@
# ~*~ coding: utf-8 ~*~
from __future__ import unicode_literals
+from django.urls import path
+
+from .. import views
__all__ = ["urlpatterns"]
app_name = "ops"
urlpatterns = [
-]
+ # Resource Task url
+ path('celery/task//log/', views.CeleryTaskLogView.as_view(), name='celery-task-log'),
+]
\ No newline at end of file
diff --git a/apps/ops/views.py b/apps/ops/views.py
new file mode 100644
index 000000000..9ae2d9755
--- /dev/null
+++ b/apps/ops/views.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+#
+from django.views.generic import TemplateView
+from django.conf import settings
+
+from common.permissions import PermissionsMixin, IsOrgAdmin, IsOrgAuditor
+
+
+__all__ = ['CeleryTaskLogView']
+
+
+class CeleryTaskLogView(PermissionsMixin, TemplateView):
+ template_name = 'ops/celery_task_log.html'
+ permission_classes = [IsOrgAdmin | IsOrgAuditor]
+
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ context.update({
+ 'task_id': self.kwargs.get('pk'),
+ 'ws_port': settings.WS_LISTEN_PORT
+ })
+ return context