diff --git a/apps/jumpserver/urls.py b/apps/jumpserver/urls.py
index 331930c3a8dff71301d77781a770c3edcd9f2d3e..b8d434dc64dc3f45633baf65bb480e055d3f1c56 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 0000000000000000000000000000000000000000..c79ff42b2ddc3cb06b3137aa0f91028545f99d65
--- /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 fb52a3e077ed404b873b7325a27ed941d65369e6..21bc4cc41e54b503672f051fe8bcb8a02e64631e 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 0000000000000000000000000000000000000000..9ae2d975581ee56d1f7b9413492e8748de8c10a4
--- /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