浏览代码

Merge pull request #554 from meolu/2.0/fix/ws-cmd

walle 2.0 alpha -  add cmd
huamanshu 6 年之前
父节点
当前提交
a609c8e622
共有 2 个文件被更改,包括 20 次插入8 次删除
  1. 14 5
      walle/service/deployer.py
  2. 6 3
      walle/service/websocket.py

+ 14 - 5
walle/service/deployer.py

@@ -11,6 +11,7 @@ from datetime import datetime
 import os
 import re
 from flask import current_app
+from flask_socketio import emit
 from walle.model.project import ProjectModel
 from walle.model.record import RecordModel
 from walle.model.task import TaskModel
@@ -18,7 +19,6 @@ from walle.service.code import Code
 from walle.service.error import WalleError
 from walle.service.utils import color_clean
 from walle.service.waller import Waller
-from flask_socketio import emit
 
 
 class Deployer:
@@ -391,10 +391,19 @@ class Deployer:
             if result.exited != Code.Ok:
                 raise WalleError(Code.shell_git_init_fail, message=result.stdout)
 
-    def end(self, success=True):
-        status = TaskModel.status_success if success else TaskModel.status_fail
-        current_app.logger.info('success:%s, status:%s' % (success, status))
-        TaskModel().get_by_id(self.task_id).update({'status': status})
+    def logs(self):
+        return RecordModel().fetch(task_id=self.task_id)
+
+    def end(self, success=True, update_status=True):
+        if update_status:
+            status = TaskModel.status_success if success else TaskModel.status_fail
+            current_app.logger.info('success:%s, status:%s' % (success, status))
+            TaskModel().get_by_id(self.task_id).update({'status': status})
+
+        if success:
+            emit('success', {'event': 'finish', 'data': {'message': '部署完成,辛苦了,为你的努力喝彩!'}}, room=self.task_id)
+        else:
+            emit('fail', {'event': 'finish', 'data': {'message': Code.code_msg[Code.deploy_fail]}}, room=self.task_id)
 
     def walle_deploy(self):
         self.start()

+ 6 - 3
walle/service/websocket.py

@@ -94,8 +94,11 @@ class WalleSocketIO(Namespace):
         self.logs(task=self.room)
 
     def logs(self, task):
-        emit('console', {'event': 'console', 'data': {'task': task}}, room=task)
-        logs = RecordModel().fetch(task_id=task)
-        for log in logs:
+        deployer = Deployer(task_id=self.room)
+        for log in deployer.logs():
             log = RecordModel.logs(**log)
             emit('console', {'event': 'console', 'data': log}, room=self.room)
+
+        task_info = TaskModel().get_by_id(self.task_id)
+        deployer.end(success=task_info.status == TaskModel.status_success, update_status=False)
+