Lightweight containerized prosody tooling + moved auth scripts + xmpp reconnect/auth stabilization
This commit is contained in:
@@ -391,6 +391,85 @@ class Message(models.Model):
|
||||
]
|
||||
|
||||
|
||||
class ConversationEvent(models.Model):
|
||||
EVENT_TYPE_CHOICES = (
|
||||
("message_created", "Message Created"),
|
||||
("message_edited", "Message Edited"),
|
||||
("message_deleted", "Message Deleted"),
|
||||
("reaction_added", "Reaction Added"),
|
||||
("reaction_removed", "Reaction Removed"),
|
||||
("read_receipt", "Read Receipt"),
|
||||
("typing_started", "Typing Started"),
|
||||
("typing_stopped", "Typing Stopped"),
|
||||
("participant_added", "Participant Added"),
|
||||
("participant_removed", "Participant Removed"),
|
||||
("delivery_receipt", "Delivery Receipt"),
|
||||
)
|
||||
|
||||
DIRECTION_CHOICES = (
|
||||
("in", "Inbound"),
|
||||
("out", "Outbound"),
|
||||
("system", "System"),
|
||||
)
|
||||
|
||||
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
session = models.ForeignKey(ChatSession, on_delete=models.CASCADE)
|
||||
ts = models.BigIntegerField(
|
||||
db_index=True,
|
||||
help_text="Event timestamp (unix ms).",
|
||||
)
|
||||
event_type = models.CharField(max_length=64, choices=EVENT_TYPE_CHOICES)
|
||||
direction = models.CharField(max_length=16, choices=DIRECTION_CHOICES)
|
||||
actor_identifier = models.CharField(max_length=255, blank=True, default="")
|
||||
origin_transport = models.CharField(
|
||||
max_length=32, blank=True, default="", choices=CHANNEL_SERVICE_CHOICES
|
||||
)
|
||||
origin_message_id = models.CharField(max_length=255, blank=True, default="")
|
||||
origin_chat_id = models.CharField(max_length=255, blank=True, default="")
|
||||
payload = models.JSONField(default=dict, blank=True)
|
||||
raw_payload = models.JSONField(default=dict, blank=True)
|
||||
trace_id = models.CharField(max_length=64, blank=True, default="")
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
class Meta:
|
||||
ordering = ["ts", "created_at"]
|
||||
indexes = [
|
||||
models.Index(fields=["user", "session", "ts"]),
|
||||
models.Index(fields=["origin_transport", "origin_message_id"]),
|
||||
models.Index(fields=["trace_id"]),
|
||||
models.Index(fields=["event_type", "created_at"]),
|
||||
]
|
||||
|
||||
|
||||
class AdapterHealthEvent(models.Model):
|
||||
STATUS_CHOICES = (
|
||||
("ok", "OK"),
|
||||
("degraded", "Degraded"),
|
||||
("down", "Down"),
|
||||
("recovering", "Recovering"),
|
||||
)
|
||||
|
||||
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
|
||||
service = models.CharField(max_length=32, choices=SERVICE_CHOICES)
|
||||
status = models.CharField(max_length=32, choices=STATUS_CHOICES)
|
||||
reason = models.TextField(blank=True, default="")
|
||||
retry_meta = models.JSONField(default=dict, blank=True)
|
||||
ts = models.BigIntegerField(
|
||||
db_index=True,
|
||||
help_text="Health transition timestamp (unix ms).",
|
||||
)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
class Meta:
|
||||
ordering = ["-ts", "-created_at"]
|
||||
indexes = [
|
||||
models.Index(fields=["service", "ts"]),
|
||||
models.Index(fields=["status", "created_at"]),
|
||||
]
|
||||
|
||||
|
||||
class Group(models.Model):
|
||||
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
|
||||
Reference in New Issue
Block a user