record.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. # -*- coding: utf-8 -*-
  2. """
  3. walle-web
  4. :copyright: © 2015-2019 walle-web.io
  5. :created time: 2018-11-24 06:30:06
  6. :author: wushuiyong@walle-web.io
  7. """
  8. from datetime import datetime
  9. from sqlalchemy import String, Integer, DateTime
  10. from walle.model.database import db, Model
  11. # 上线记录表
  12. class RecordModel(Model):
  13. # 表的名字:
  14. __tablename__ = 'records'
  15. current_time = datetime.now()
  16. #
  17. stage_end = 'end'
  18. #
  19. status_success = 0
  20. #
  21. status_fail = 1
  22. # 表的结构:
  23. id = db.Column(Integer, primary_key=True, autoincrement=True)
  24. stage = db.Column(String(20))
  25. sequence = db.Column(Integer)
  26. user_id = db.Column(Integer)
  27. task_id = db.Column(Integer)
  28. status = db.Column(Integer)
  29. command = db.Column(String(200))
  30. host = db.Column(String(200))
  31. user = db.Column(String(200))
  32. success = db.Column(String(2000))
  33. error = db.Column(String(2000))
  34. created_at = db.Column(DateTime, default=current_time)
  35. updated_at = db.Column(DateTime, default=current_time, onupdate=current_time)
  36. def save_record(self, stage, sequence, user_id, task_id, status, host, user, command, success=None, error=None):
  37. record = RecordModel(stage=stage, sequence=sequence, user_id=user_id,
  38. task_id=task_id, status=status, host=host, user=user, command=command,
  39. success=success, error=error)
  40. db.session.add(record)
  41. ret = db.session.commit()
  42. return ret
  43. def fetch(self, task_id):
  44. data = self.query.filter_by(task_id=task_id).order_by(RecordModel.id.asc()).all()
  45. return [p.to_json() for p in data]
  46. @classmethod
  47. def logs(cls, host, user, command, status, stage, sequence, success, error, *args, **kwargs):
  48. return {
  49. 'host': host,
  50. 'user': user,
  51. 'cmd': command,
  52. 'status': status,
  53. 'stage': stage,
  54. 'sequence': sequence,
  55. 'success': success,
  56. 'error': error,
  57. }
  58. def to_json(self):
  59. return {
  60. 'id': self.id,
  61. 'stage': self.stage,
  62. 'sequence': self.sequence,
  63. 'user_id': self.user_id,
  64. 'task_id': self.task_id,
  65. 'status': self.status,
  66. 'host': self.host,
  67. 'user': self.user,
  68. 'command': self.command,
  69. 'success': self.success,
  70. 'error': self.error,
  71. 'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S'),
  72. 'updated_at': self.updated_at.strftime('%Y-%m-%d %H:%M:%S'),
  73. }