diff --git a/apps/common/api.py b/apps/common/api.py index 6a2017cd4..cf3855b60 100644 --- a/apps/common/api.py +++ b/apps/common/api.py @@ -199,6 +199,8 @@ class LogTailApi(generics.RetrieveAPIView): buff_size = 1024 * 10 serializer_class = OutputSerializer end = False + mark = '' + log_path = '' def is_file_finish_write(self): return True @@ -206,6 +208,9 @@ class LogTailApi(generics.RetrieveAPIView): def get_log_path(self): raise NotImplementedError() + def get_no_file_message(self, request): + return 'Not found the log' + def filter_line(self, line): """ 过滤行,可能替换一些信息 @@ -214,27 +219,14 @@ class LogTailApi(generics.RetrieveAPIView): """ return line - 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...\r\n"}, status=200) - - with open(log_path, 'r') as f: - offset = cache.get(mark, 0) + def read_from_file(self): + with open(self.log_path, 'r') as f: + offset = cache.get(self.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) + new_mark = str(uuid.uuid4()) + cache.set(new_mark, f.tell(), 5) if data == '' and self.is_file_finish_write(): self.end = True @@ -244,4 +236,15 @@ class LogTailApi(generics.RetrieveAPIView): if line == '': continue _data += new_line + '\r\n' - return Response({"data": _data, 'end': self.end, 'mark': mark}) + return _data, self.end, new_mark + + def get(self, request, *args, **kwargs): + self.mark = request.query_params.get("mark") or str(uuid.uuid4()) + self.log_path = self.get_log_path() + + if not self.log_path or not os.path.isfile(self.log_path): + msg = self.get_no_file_message(self.request) + return Response({"data": msg}, status=200) + + data, end, new_mark = self.read_from_file() + return Response({"data": data, 'end': end, 'mark': new_mark}) diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 33091ed2f..d57d38faf 100644 Binary files a/apps/locale/zh/LC_MESSAGES/django.mo and b/apps/locale/zh/LC_MESSAGES/django.mo differ diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 8502e7c3d..28c411839 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Jumpserver 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-28 12:56+0800\n" +"POT-Creation-Date: 2019-02-20 16:46+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \n" "Language-Team: Jumpserver team\n" @@ -21,11 +21,11 @@ msgstr "" msgid "You can't update the root node name" msgstr "不能修改根节点名称" -#: assets/api/node.py:281 +#: assets/api/node.py:282 msgid "Update node asset hardware information: {}" msgstr "更新节点资产硬件信息: {}" -#: assets/api/node.py:295 +#: assets/api/node.py:296 msgid "Test if the assets under the node are connectable: {}" msgstr "测试节点下资产是否可连接: {}" @@ -764,48 +764,48 @@ msgstr "获取资产信息失败:{}" msgid "Update some assets hardware info" msgstr "更新资产硬件信息" -#: assets/tasks.py:136 +#: assets/tasks.py:134 msgid "Update asset hardware info: {}" msgstr "更新资产硬件信息: {}" -#: assets/tasks.py:161 +#: assets/tasks.py:159 msgid "Test assets connectivity" msgstr "测试资产可连接性" -#: assets/tasks.py:185 +#: assets/tasks.py:183 msgid "Test assets connectivity: {}" msgstr "测试资产可连接性: {}" -#: assets/tasks.py:224 +#: assets/tasks.py:225 msgid "Test admin user connectivity period: {}" msgstr "定期测试管理账号可连接性: {}" -#: assets/tasks.py:231 +#: assets/tasks.py:232 msgid "Test admin user connectivity: {}" msgstr "测试管理行号可连接性: {}" -#: assets/tasks.py:270 +#: assets/tasks.py:271 msgid "Test system user connectivity: {}" msgstr "测试系统用户可连接性: {}" -#: assets/tasks.py:277 +#: assets/tasks.py:278 msgid "Test system user connectivity: {} => {}" msgstr "测试系统用户可连接性: {} => {}" -#: assets/tasks.py:290 +#: assets/tasks.py:291 msgid "Test system user connectivity period: {}" msgstr "定期测试系统用户可连接性: {}" -#: assets/tasks.py:362 +#: assets/tasks.py:363 msgid "" "Push system user task skip, auto push not enable or protocol is not ssh: {}" msgstr "推送系统用户任务跳过,自动推送没有打开,或协议不是ssh: {}" -#: assets/tasks.py:382 assets/tasks.py:396 +#: assets/tasks.py:383 assets/tasks.py:397 msgid "Push system users to assets: {}" msgstr "推送系统用户到入资产: {}" -#: assets/tasks.py:388 +#: assets/tasks.py:389 msgid "Push system users to asset: {} => {}" msgstr "推送系统用户到入资产: {} => {}" @@ -1092,7 +1092,7 @@ msgstr "选择节点" #: assets/templates/assets/admin_user_detail.html:100 #: assets/templates/assets/asset_detail.html:208 -#: assets/templates/assets/asset_list.html:635 +#: assets/templates/assets/asset_list.html:636 #: assets/templates/assets/cmd_filter_detail.html:106 #: assets/templates/assets/system_user_asset.html:112 #: assets/templates/assets/system_user_detail.html:182 @@ -1312,7 +1312,7 @@ msgstr "重命名成功" msgid "Rename failed, do not change the root node name" msgstr "重命名失败,不能更改root节点的名称" -#: assets/templates/assets/asset_list.html:629 +#: assets/templates/assets/asset_list.html:630 #: assets/templates/assets/system_user_list.html:137 #: users/templates/users/user_detail.html:382 #: users/templates/users/user_detail.html:408 @@ -1322,11 +1322,11 @@ msgstr "重命名失败,不能更改root节点的名称" msgid "Are you sure?" msgstr "你确认吗?" -#: assets/templates/assets/asset_list.html:630 +#: assets/templates/assets/asset_list.html:631 msgid "This will delete the selected assets !!!" msgstr "删除选择资产" -#: assets/templates/assets/asset_list.html:633 +#: assets/templates/assets/asset_list.html:634 #: assets/templates/assets/system_user_list.html:141 #: common/templates/common/terminal_setting.html:163 #: users/templates/users/user_detail.html:386 @@ -1339,16 +1339,16 @@ msgstr "删除选择资产" msgid "Cancel" msgstr "取消" -#: assets/templates/assets/asset_list.html:639 +#: assets/templates/assets/asset_list.html:640 msgid "Asset Deleted." msgstr "已被删除" -#: assets/templates/assets/asset_list.html:640 -#: assets/templates/assets/asset_list.html:645 +#: assets/templates/assets/asset_list.html:641 +#: assets/templates/assets/asset_list.html:646 msgid "Asset Delete" msgstr "删除" -#: assets/templates/assets/asset_list.html:644 +#: assets/templates/assets/asset_list.html:645 msgid "Asset Deleting failed." msgstr "删除失败" @@ -2315,6 +2315,10 @@ msgstr "" "div>
如果你看到了这个页面,证明你访问的不是nginx监听的端口,祝你好运" +#: ops/api/celery.py:54 +msgid "Waiting task start" +msgstr "等待任务开始" + #: ops/models/adhoc.py:38 msgid "Interval" msgstr "间隔" diff --git a/apps/ops/api/celery.py b/apps/ops/api/celery.py index caffff601..6be58770f 100644 --- a/apps/ops/api/celery.py +++ b/apps/ops/api/celery.py @@ -4,6 +4,7 @@ import os import re +from django.utils.translation import ugettext as _ from celery.result import AsyncResult from rest_framework import generics @@ -46,6 +47,12 @@ class CeleryTaskLogApi(LogTailApi): def is_file_finish_write(self): return self.task.ready() + def get_no_file_message(self, request): + if self.mark == 'undefined': + return '.' + else: + return _('Waiting task start') + class CeleryResultApi(generics.RetrieveAPIView): permission_classes = (IsValidUser,)