From 4051225ecb036d99570b21c7102a7538770be571 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 13 Feb 2019 15:55:11 +0800 Subject: [PATCH] =?UTF-8?q?[Bugfix]=20=E4=BF=AE=E5=A4=8D=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E6=89=A7=E8=A1=8Cbug=EF=BC=8C=E4=BF=AE=E5=A4=8D=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E6=97=A5=E5=BF=97=E7=BA=A7=E5=88=AB=E5=90=8E=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E6=9F=A5=E7=9C=8B=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/common/api.py | 17 ++++++++++++++++- apps/ops/api/celery.py | 8 ++++++++ apps/ops/api/command.py | 6 +++--- apps/ops/tasks.py | 5 ++++- .../templates/ops/command_execution_create.html | 4 ++-- jms | 2 +- requirements/requirements.txt | 2 +- 7 files changed, 35 insertions(+), 9 deletions(-) diff --git a/apps/common/api.py b/apps/common/api.py index 98924930f..6a2017cd4 100644 --- a/apps/common/api.py +++ b/apps/common/api.py @@ -206,6 +206,14 @@ class LogTailApi(generics.RetrieveAPIView): def get_log_path(self): raise NotImplementedError() + def filter_line(self, line): + """ + 过滤行,可能替换一些信息 + :param line: + :return: + """ + return line + def get(self, request, *args, **kwargs): mark = request.query_params.get("mark") or str(uuid.uuid4()) log_path = self.get_log_path() @@ -224,9 +232,16 @@ class LogTailApi(generics.RetrieveAPIView): 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}) + _data = '' + for line in data.split('\r\n'): + new_line = self.filter_line(line) + if line == '': + continue + _data += new_line + '\r\n' + return Response({"data": _data, 'end': self.end, 'mark': mark}) diff --git a/apps/ops/api/celery.py b/apps/ops/api/celery.py index d2053f9cb..caffff601 100644 --- a/apps/ops/api/celery.py +++ b/apps/ops/api/celery.py @@ -2,6 +2,8 @@ # import os +import re + from celery.result import AsyncResult from rest_framework import generics @@ -19,12 +21,18 @@ class CeleryTaskLogApi(LogTailApi): permission_classes = (IsValidUser,) task = None task_id = '' + pattern = re.compile(r'Task .* succeeded in \d+\.\d+s.*') def get(self, request, *args, **kwargs): self.task_id = str(kwargs.get('pk')) self.task = AsyncResult(self.task_id) return super().get(request, *args, **kwargs) + def filter_line(self, line): + if self.pattern.match(line): + line = self.pattern.sub(line, '') + return line + def get_log_path(self): new_path = get_celery_task_log_path(self.task_id) if new_path and os.path.isfile(new_path): diff --git a/apps/ops/api/command.py b/apps/ops/api/command.py index 9d83d1464..29f1b742c 100644 --- a/apps/ops/api/command.py +++ b/apps/ops/api/command.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- # from rest_framework import viewsets +from django.db import transaction from common.permissions import IsValidUser from ..models import CommandExecution @@ -11,7 +12,6 @@ from ..tasks import run_command_execution class CommandExecutionViewSet(viewsets.ModelViewSet): serializer_class = CommandExecutionSerializer permission_classes = (IsValidUser,) - task = None def get_queryset(self): return CommandExecution.objects.filter( @@ -22,6 +22,6 @@ class CommandExecutionViewSet(viewsets.ModelViewSet): instance = serializer.save() instance.user = self.request.user instance.save() - run_command_execution.apply_async( + transaction.on_commit(lambda: run_command_execution.apply_async( args=(instance.id,), task_id=str(instance.id) - ) + )) diff --git a/apps/ops/tasks.py b/apps/ops/tasks.py index f50f17946..07a86a3be 100644 --- a/apps/ops/tasks.py +++ b/apps/ops/tasks.py @@ -41,7 +41,10 @@ def run_ansible_task(tid, callback=None, **kwargs): @shared_task def run_command_execution(cid, **kwargs): execution = get_object_or_none(CommandExecution, id=cid) - return execution.run() + if execution: + execution.run() + else: + logger.error("Not found the execution id: {}".format(cid)) @shared_task diff --git a/apps/ops/templates/ops/command_execution_create.html b/apps/ops/templates/ops/command_execution_create.html index 17a01e5c4..178c1ad7a 100644 --- a/apps/ops/templates/ops/command_execution_create.html +++ b/apps/ops/templates/ops/command_execution_create.html @@ -170,8 +170,8 @@ function initResultTerminal() { term = new Terminal({ cursorBlink: false, screenKeys: false, - fontFamily: '"Monaco", "Consolas", "monospace"', - fontSize: 13, + fontFamily: '"Consolas", "monospace"', + fontSize: 14, rightClickSelectsWord: true, disableStdin: true, theme: { diff --git a/jms b/jms index afd1b2552..0138df26a 100755 --- a/jms +++ b/jms @@ -176,7 +176,7 @@ def start_celery(): cmd = [ 'celery', 'worker', '-A', 'ops', - '-l', LOG_LEVEL.lower(), + '-l', 'INFO', '--pidfile', pid_file, '--autoscale', '20,4', ] diff --git a/requirements/requirements.txt b/requirements/requirements.txt index c956bc9d4..5002762c9 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -14,7 +14,7 @@ coreapi==2.3.3 coreschema==0.0.4 cryptography==2.3.1 decorator==4.1.2 -Django==2.1 +Django==2.1.7 django-auth-ldap==1.7.0 django-bootstrap3==9.1.0 django-celery-beat==1.1.1