mirror of
https://github.com/jumpserver/jumpserver.git
synced 2026-01-06 08:04:13 +00:00
Bugfix (#2346)
* [Update] 修改command Post导致的output错误和定时任务创建问题 * [Update] 修改celery 日志 * [Update] 修改task日志方式 * [Update] 修改Docker file
This commit is contained in:
@@ -4,15 +4,20 @@
|
||||
import os
|
||||
import json
|
||||
import jms_storage
|
||||
import uuid
|
||||
|
||||
from rest_framework.views import Response, APIView
|
||||
from rest_framework import generics
|
||||
from ldap3 import Server, Connection
|
||||
from django.core.mail import get_connection, send_mail
|
||||
from django.core.mail import send_mail
|
||||
from django.core.cache import cache
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.conf import settings
|
||||
|
||||
from .permissions import IsOrgAdmin, IsSuperUser
|
||||
from .serializers import MailTestSerializer, LDAPTestSerializer
|
||||
from .serializers import (
|
||||
MailTestSerializer, LDAPTestSerializer, OutputSerializer
|
||||
)
|
||||
from .models import Setting
|
||||
|
||||
|
||||
@@ -189,4 +194,39 @@ class DjangoSettingsAPI(APIView):
|
||||
return Response(data)
|
||||
|
||||
|
||||
class LogTailApi(generics.RetrieveAPIView):
|
||||
permission_classes = ()
|
||||
buff_size = 1024 * 10
|
||||
serializer_class = OutputSerializer
|
||||
end = False
|
||||
|
||||
def is_file_finish_write(self):
|
||||
return True
|
||||
|
||||
def get_log_path(self):
|
||||
raise NotImplementedError()
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
mark = request.query_params.get("mark") or str(uuid.uuid4())
|
||||
log_path = self.get_log_path()
|
||||
|
||||
if not log_path or not os.path.isfile(log_path):
|
||||
if self.is_file_finish_write():
|
||||
return Response({
|
||||
"data": 'Not found the log',
|
||||
'end': True,
|
||||
'mark': mark}
|
||||
)
|
||||
else:
|
||||
return Response({"data": _("Waiting ...\n")}, status=200)
|
||||
|
||||
with open(log_path, 'r') as f:
|
||||
offset = cache.get(mark, 0)
|
||||
f.seek(offset)
|
||||
data = f.read(self.buff_size).replace('\n', '\r\n')
|
||||
mark = str(uuid.uuid4())
|
||||
cache.set(mark, f.tell(), 5)
|
||||
|
||||
if data == '' and self.is_file_finish_write():
|
||||
self.end = True
|
||||
return Response({"data": data, 'end': self.end, 'mark': mark})
|
||||
|
||||
Reference in New Issue
Block a user