package models import "time" // TraceSpan 保存通过 OTLP 接收的标准调用链 Span。 type TraceSpan struct { ID uint `gorm:"primaryKey" json:"id"` CreatedAt time.Time `json:"created_at"` TraceID string `gorm:"type:varchar(32);not null;index;uniqueIndex:uk_trace_span" json:"trace_id"` SpanID string `gorm:"type:varchar(16);not null;uniqueIndex:uk_trace_span" json:"span_id"` ParentSpanID string `gorm:"type:varchar(16);index" json:"parent_span_id,omitempty"` ServiceName string `gorm:"type:varchar(255);not null;index" json:"service_name"` OperationName string `gorm:"type:varchar(512);not null;index" json:"operation_name"` SpanKind string `gorm:"type:varchar(20);not null;index" json:"span_kind"` StartTime time.Time `gorm:"not null;index" json:"start_time"` EndTime time.Time `gorm:"not null;index" json:"end_time"` DurationMs float64 `gorm:"type:decimal(16,3);not null;default:0" json:"duration_ms"` StatusCode string `gorm:"type:varchar(20);not null;index" json:"status_code"` StatusMessage string `gorm:"type:text" json:"status_message,omitempty"` BusinessSystemID *uint `gorm:"index" json:"business_system_id,omitempty"` ResourceUID string `gorm:"type:varchar(255);index" json:"resource_uid,omitempty"` HTTPMethod string `gorm:"type:varchar(16);index" json:"http_method,omitempty"` HTTPRoute string `gorm:"type:varchar(1024)" json:"http_route,omitempty"` HTTPStatusCode int `gorm:"index" json:"http_status_code,omitempty"` Attributes string `gorm:"type:jsonb;not null;default:'{}'" json:"attributes"` ResourceAttrs string `gorm:"type:jsonb;not null;default:'{}'" json:"resource_attributes"` IngestedAt *time.Time `gorm:"index" json:"ingested_at,omitempty"` } func (TraceSpan) TableName() string { return "logs_trace_spans" }