1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import uuid
- from django.contrib.postgres.search import SearchVectorField
- from django.db import models
- from glitchtip.base_models import CreatedModel
- from psqlextra.models import PostgresPartitionedModel
- from psqlextra.types import PostgresPartitioningMethod
- class TransactionGroup(CreatedModel):
- transaction = models.CharField(max_length=1024)
- project = models.ForeignKey("projects.Project", on_delete=models.CASCADE)
- op = models.CharField(max_length=255)
- method = models.CharField(max_length=255, null=True, blank=True)
- tags = models.JSONField(default=dict)
- search_vector = SearchVectorField(null=True, editable=False)
- class Meta:
- unique_together = (("transaction", "project", "op", "method"),)
- def __str__(self):
- return self.transaction
- class TransactionEvent(PostgresPartitionedModel, models.Model):
- event_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
- group = models.ForeignKey(TransactionGroup, on_delete=models.CASCADE)
- trace_id = models.UUIDField(db_index=True)
- start_timestamp = models.DateTimeField(
- db_index=True,
- help_text="Datetime reported by client as the time the measurement started",
- )
- timestamp = models.DateTimeField(
- blank=True,
- null=True,
- help_text="Datetime reported by client as the time the measurement finished",
- )
- duration = models.PositiveIntegerField(db_index=True, help_text="Milliseconds")
- data = models.JSONField(help_text="General event data that is searchable")
- # This could be HStore, but jsonb is just as good and removes need for
- # 'django.contrib.postgres' which makes several unnecessary SQL calls
- tags = models.JSONField(default=dict)
- class Meta:
- ordering = ["-start_timestamp"]
- class PartitioningMeta:
- method = PostgresPartitioningMethod.RANGE
- key = ["start_timestamp"]
- def __str__(self):
- return str(self.trace_id)
|