mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-10-11 15:41:28 +08:00
57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
package tracefunnel
|
|
|
|
import (
|
|
"fmt"
|
|
tracefunnel "github.com/SigNoz/signoz/pkg/types/tracefunnel"
|
|
"sort"
|
|
)
|
|
|
|
// ValidateTimestamp validates a timestamp
|
|
func ValidateTimestamp(timestamp int64, fieldName string) error {
|
|
if timestamp == 0 {
|
|
return fmt.Errorf("%s is required", fieldName)
|
|
}
|
|
if timestamp < 0 {
|
|
return fmt.Errorf("%s must be positive", fieldName)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// ValidateTimestampIsMilliseconds validates that a timestamp is in milliseconds
|
|
func ValidateTimestampIsMilliseconds(timestamp int64) bool {
|
|
return timestamp >= 1000000000000 && timestamp <= 9999999999999
|
|
}
|
|
|
|
func ValidateFunnelSteps(steps []tracefunnel.FunnelStep) error {
|
|
if len(steps) < 2 {
|
|
return fmt.Errorf("funnel must have at least 2 steps")
|
|
}
|
|
|
|
for i, step := range steps {
|
|
if step.ServiceName == "" {
|
|
return fmt.Errorf("step %d: service name is required", i+1)
|
|
}
|
|
if step.SpanName == "" {
|
|
return fmt.Errorf("step %d: span name is required", i+1)
|
|
}
|
|
if step.Order < 0 {
|
|
return fmt.Errorf("step %d: order must be non-negative", i+1)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// NormalizeFunnelSteps normalizes step orders to be sequential
|
|
func NormalizeFunnelSteps(steps []tracefunnel.FunnelStep) []tracefunnel.FunnelStep {
|
|
sort.Slice(steps, func(i, j int) bool {
|
|
return steps[i].Order < steps[j].Order
|
|
})
|
|
|
|
for i := range steps {
|
|
steps[i].Order = int64(i + 1)
|
|
}
|
|
|
|
return steps
|
|
}
|