models.py 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. # Copyright 2016 Cloudbase Solutions Srl
  2. # All Rights Reserved.
  3. import uuid
  4. from oslo_db.sqlalchemy import models
  5. import sqlalchemy
  6. from sqlalchemy.ext import declarative
  7. from sqlalchemy import orm
  8. from coriolis.db.sqlalchemy import types
  9. BASE = declarative.declarative_base()
  10. class TaskEvent(BASE, models.TimestampMixin, models.SoftDeleteMixin,
  11. models.ModelBase):
  12. __tablename__ = 'task_event'
  13. id = sqlalchemy.Column(sqlalchemy.String(36),
  14. default=lambda: str(uuid.uuid4()),
  15. primary_key=True)
  16. task_id = sqlalchemy.Column(sqlalchemy.String(36),
  17. sqlalchemy.ForeignKey('task.id'),
  18. nullable=False)
  19. level = sqlalchemy.Column(sqlalchemy.String(20), nullable=False)
  20. message = sqlalchemy.Column(sqlalchemy.String(1024), nullable=False)
  21. class TaskProgressUpdate(BASE, models.TimestampMixin, models.SoftDeleteMixin,
  22. models.ModelBase):
  23. __tablename__ = 'task_progress_update'
  24. id = sqlalchemy.Column(sqlalchemy.String(36),
  25. default=lambda: str(uuid.uuid4()),
  26. primary_key=True)
  27. task_id = sqlalchemy.Column(sqlalchemy.String(36),
  28. sqlalchemy.ForeignKey('task.id'),
  29. nullable=False)
  30. current_step = sqlalchemy.Column(sqlalchemy.Integer, nullable=False)
  31. total_steps = sqlalchemy.Column(sqlalchemy.Integer, nullable=True)
  32. message = sqlalchemy.Column(sqlalchemy.String(1024), nullable=True)
  33. class Task(BASE, models.TimestampMixin, models.SoftDeleteMixin,
  34. models.ModelBase):
  35. __tablename__ = 'task'
  36. id = sqlalchemy.Column(sqlalchemy.String(36),
  37. default=lambda: str(uuid.uuid4()),
  38. primary_key=True)
  39. migration_id = sqlalchemy.Column(sqlalchemy.String(36),
  40. sqlalchemy.ForeignKey('migration.id'),
  41. nullable=False)
  42. instance = sqlalchemy.Column(sqlalchemy.String(1024), nullable=False)
  43. host = sqlalchemy.Column(sqlalchemy.String(1024), nullable=True)
  44. process_id = sqlalchemy.Column(sqlalchemy.Integer, nullable=True)
  45. status = sqlalchemy.Column(sqlalchemy.String(100), nullable=False)
  46. task_type = sqlalchemy.Column(sqlalchemy.String(100), nullable=False)
  47. exception_details = sqlalchemy.Column(sqlalchemy.Text, nullable=True)
  48. depends_on = sqlalchemy.Column(types.List, nullable=True)
  49. events = orm.relationship(TaskEvent, cascade="all,delete",
  50. backref=orm.backref('task'))
  51. progress_updates = orm.relationship(TaskProgressUpdate,
  52. cascade="all,delete",
  53. backref=orm.backref('task'))
  54. class Migration(BASE, models.TimestampMixin, models.ModelBase,
  55. models.SoftDeleteMixin):
  56. __tablename__ = 'migration'
  57. id = sqlalchemy.Column(sqlalchemy.String(36),
  58. default=lambda: str(uuid.uuid4()),
  59. primary_key=True)
  60. user_id = sqlalchemy.Column(sqlalchemy.String(255), nullable=False)
  61. project_id = sqlalchemy.Column(sqlalchemy.String(255), nullable=False)
  62. origin = sqlalchemy.Column(types.Json, nullable=False)
  63. destination = sqlalchemy.Column(types.Json, nullable=False)
  64. status = sqlalchemy.Column(sqlalchemy.String(100), nullable=False)
  65. tasks = orm.relationship(Task, cascade="all,delete",
  66. backref=orm.backref('migration'))