Files
logs/internal/models/trace_span.go
2026-09-09 16:45:01 +08:00

32 lines
1.9 KiB
Go

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" }