edge_gateway.py 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. """Read models for the enterprise edge-gateway control plane."""
  2. from sqlalchemy.dialects.postgresql import ARRAY, JSONB, UUID
  3. from app import db
  4. from app.core.common.identifiers import new_governance_uid
  5. class EdgeGatewayEnrollment(db.Model):
  6. __tablename__ = "edge_gateway_enrollments"
  7. __table_args__ = {"schema": "public"}
  8. uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid)
  9. gateway_id = db.Column(UUID(as_uuid=False), nullable=False, unique=True)
  10. gateway_name = db.Column(db.String(200), nullable=False)
  11. environment = db.Column(db.String(20), nullable=False)
  12. network_zone = db.Column(db.String(120), nullable=False)
  13. policy_digest = db.Column(db.String(64), nullable=False)
  14. expected_certificate_sha256 = db.Column(db.String(64), nullable=False)
  15. allowed_control_hosts = db.Column(ARRAY(db.Text), nullable=False)
  16. allowed_proxy_hosts = db.Column(ARRAY(db.Text), nullable=False)
  17. token_hash = db.Column(db.String(64), nullable=False, unique=True)
  18. status = db.Column(db.String(20), nullable=False)
  19. expires_at = db.Column(db.DateTime(timezone=True), nullable=False)
  20. consumed_at = db.Column(db.DateTime(timezone=True))
  21. class EdgeGateway(db.Model):
  22. __tablename__ = "edge_gateways"
  23. __table_args__ = {"schema": "public"}
  24. uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid)
  25. name = db.Column(db.String(200), nullable=False)
  26. environment = db.Column(db.String(20), nullable=False)
  27. network_zone = db.Column(db.String(120), nullable=False)
  28. status = db.Column(db.String(20), nullable=False)
  29. current_generation = db.Column(db.Integer, nullable=False)
  30. policy_digest = db.Column(db.String(64), nullable=False)
  31. allowed_control_hosts = db.Column(ARRAY(db.Text), nullable=False)
  32. allowed_proxy_hosts = db.Column(ARRAY(db.Text), nullable=False)
  33. last_heartbeat_at = db.Column(db.DateTime(timezone=True))
  34. runtime_version = db.Column(db.String(80))
  35. safe_health_summary = db.Column(JSONB, nullable=False)
  36. class EdgeGatewayCredential(db.Model):
  37. __tablename__ = "edge_gateway_credentials"
  38. __table_args__ = {"schema": "public"}
  39. uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid)
  40. gateway_id = db.Column(UUID(as_uuid=False), nullable=False)
  41. generation = db.Column(db.Integer, nullable=False)
  42. credential_hash = db.Column(db.String(64), nullable=False, unique=True)
  43. certificate_sha256 = db.Column(db.String(64), nullable=False)
  44. status = db.Column(db.String(20), nullable=False)
  45. expires_at = db.Column(db.DateTime(timezone=True), nullable=False)
  46. class EdgeGatewayRotationRequest(db.Model):
  47. __tablename__ = "edge_gateway_rotation_requests"
  48. __table_args__ = {"schema": "public"}
  49. gateway_id = db.Column(UUID(as_uuid=False), primary_key=True)
  50. request_id = db.Column(db.String(255), primary_key=True)
  51. request_digest = db.Column(db.String(64), nullable=False)
  52. generation = db.Column(db.Integer, nullable=False)
  53. class EdgeGatewayTask(db.Model):
  54. __tablename__ = "edge_gateway_tasks"
  55. __table_args__ = {"schema": "public"}
  56. task_id = db.Column(db.String(255), primary_key=True)
  57. gateway_id = db.Column(UUID(as_uuid=False), nullable=False)
  58. idempotency_key = db.Column(db.String(255), nullable=False)
  59. contract = db.Column(JSONB, nullable=False)
  60. contract_digest = db.Column(db.String(64), nullable=False)
  61. authority = db.Column(JSONB, nullable=False)
  62. status = db.Column(db.String(24), nullable=False)
  63. result_summary = db.Column(JSONB)
  64. class EdgeGatewayEvent(db.Model):
  65. __tablename__ = "edge_gateway_events"
  66. __table_args__ = {"schema": "public"}
  67. event_id = db.Column(db.String(80), primary_key=True)
  68. gateway_id = db.Column(UUID(as_uuid=False), nullable=False)
  69. task_id = db.Column(db.String(255), nullable=False)
  70. classification = db.Column(db.String(40), nullable=False)
  71. contract = db.Column(JSONB, nullable=False)
  72. contract_digest = db.Column(db.String(64), nullable=False)
  73. ack = db.Column(JSONB, nullable=False)
  74. class EdgeGatewayRelease(db.Model):
  75. __tablename__ = "edge_gateway_releases"
  76. __table_args__ = {"schema": "public"}
  77. uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid)
  78. gateway_id = db.Column(UUID(as_uuid=False), nullable=False)
  79. version = db.Column(db.String(80), nullable=False)
  80. artifact_digest = db.Column(db.String(64), nullable=False)
  81. rollback_version = db.Column(db.String(80), nullable=False)
  82. request_id = db.Column(db.String(255), nullable=False)
  83. request_digest = db.Column(db.String(64), nullable=False)
  84. status = db.Column(db.String(24), nullable=False)
  85. safe_summary = db.Column(JSONB, nullable=False)
  86. artifact_name = db.Column(db.String(255), nullable=False)
  87. deadline_at = db.Column(db.DateTime(timezone=True), nullable=False)
  88. signature_algorithm = db.Column(db.String(20), nullable=False)
  89. key_id = db.Column(db.String(128), nullable=False)
  90. manifest_digest = db.Column(db.String(64), nullable=False)
  91. signature = db.Column(db.String(128), nullable=False)
  92. signed_manifest = db.Column(JSONB, nullable=False)
  93. class EdgeGatewayAudit(db.Model):
  94. __tablename__ = "edge_gateway_audits"
  95. __table_args__ = {"schema": "public"}
  96. uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid)
  97. gateway_id = db.Column(UUID(as_uuid=False))
  98. event_type = db.Column(db.String(80), nullable=False)
  99. actor_uid = db.Column(UUID(as_uuid=False))
  100. success = db.Column(db.Boolean, nullable=False)
  101. safe_detail = db.Column(JSONB, nullable=False)
  102. failure_fingerprint = db.Column(db.String(64))
  103. window_started_at = db.Column(db.DateTime(timezone=True))
  104. class EdgeGatewayFailureWindow(db.Model):
  105. __tablename__ = "edge_gateway_failure_windows"
  106. __table_args__ = {"schema": "public"}
  107. failure_fingerprint = db.Column(db.String(64), primary_key=True)
  108. window_started_at = db.Column(db.DateTime(timezone=True), primary_key=True)
  109. gateway_id = db.Column(UUID(as_uuid=False))
  110. event_type = db.Column(db.String(80), nullable=False)
  111. occurrence_count = db.Column(db.Integer, nullable=False)
  112. first_seen_at = db.Column(db.DateTime(timezone=True), nullable=False)
  113. last_seen_at = db.Column(db.DateTime(timezone=True), nullable=False)