11# ~*~ coding: utf-8 ~*~
22import uuid
3- import re
3+ import os
44
55from django .core .cache import cache
66from django .shortcuts import get_object_or_404
7+ from django .utils .translation import ugettext as _
78from rest_framework import viewsets , generics
8- from rest_framework .generics import RetrieveAPIView
9+ from rest_framework .views import APIView
910from rest_framework .views import Response
1011
1112from .hands import IsSuperUser
13+ from common .const import FILE_END_GUARD
1214from .models import Task , AdHoc , AdHocRunHistory
1315from .serializers import TaskSerializer , AdHocSerializer , AdHocRunHistorySerializer
1416from .tasks import run_ansible_task
1517
1618
19+
20+
1721class TaskViewSet (viewsets .ModelViewSet ):
1822 queryset = Task .objects .all ()
1923 serializer_class = TaskSerializer
@@ -27,8 +31,8 @@ class TaskRun(generics.RetrieveAPIView):
2731
2832 def retrieve (self , request , * args , ** kwargs ):
2933 task = self .get_object ()
30- run_ansible_task .delay (str (task .id ))
31- return Response ({"msg " : "start" })
34+ t = run_ansible_task .delay (str (task .id ))
35+ return Response ({"task " : t . id })
3236
3337
3438class AdHocViewSet (viewsets .ModelViewSet ):
@@ -63,24 +67,28 @@ def get_queryset(self):
6367 return self .queryset
6468
6569
66- class AdHocHistoryOutputAPI (RetrieveAPIView ):
67- queryset = AdHocRunHistory .objects .all ()
70+ class LogFileViewApi (APIView ):
6871 permission_classes = (IsSuperUser ,)
6972 buff_size = 1024 * 10
7073 end = False
7174
72- def retrieve (self , request , * args , ** kwargs ):
73- history = self . get_object ( )
75+ def get (self , request , * args , ** kwargs ):
76+ file_path = request . query_params . get ( "file" )
7477 mark = request .query_params .get ("mark" ) or str (uuid .uuid4 ())
7578
76- with open (history .log_path , 'r' ) as f :
79+ if not os .path .isfile (file_path ):
80+ print (file_path )
81+ return Response ({"error" : _ ("Log file not found" )}, status = 204 )
82+
83+ with open (file_path , 'r' ) as f :
7784 offset = cache .get (mark , 0 )
7885 f .seek (offset )
7986 data = f .read (self .buff_size ).replace ('\n ' , '\r \n ' )
80- print (repr (data ))
8187 mark = str (uuid .uuid4 ())
8288 cache .set (mark , f .tell (), 5 )
8389
84- if history .is_finished and data == '' :
90+ if FILE_END_GUARD in data :
91+ data .replace (FILE_END_GUARD , '' )
8592 self .end = True
93+
8694 return Response ({"data" : data , 'end' : self .end , 'mark' : mark })
0 commit comments