mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-07-13 04:01:51 +08:00

* feat: support for new enrichment logic in traces * fix: default test added * fix: update func name in links * Update pkg/query-service/utils/logs_test.go Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> --------- Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
197 lines
6.9 KiB
Go
197 lines
6.9 KiB
Go
package v4
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
v3 "go.signoz.io/signoz/pkg/query-service/model/v3"
|
|
)
|
|
|
|
func TestEnrichTracesQuery(t *testing.T) {
|
|
type args struct {
|
|
query *v3.BuilderQuery
|
|
keys map[string]v3.AttributeKey
|
|
want *v3.BuilderQuery
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
}{
|
|
{
|
|
name: "test 1",
|
|
args: args{
|
|
query: &v3.BuilderQuery{
|
|
Filters: &v3.FilterSet{
|
|
Operator: "AND",
|
|
Items: []v3.FilterItem{
|
|
{Key: v3.AttributeKey{Key: "bytes", Type: v3.AttributeKeyTypeTag}, Value: 100, Operator: ">"},
|
|
},
|
|
},
|
|
OrderBy: []v3.OrderBy{},
|
|
},
|
|
keys: map[string]v3.AttributeKey{
|
|
"bytes##tag##int64": {Key: "bytes", DataType: v3.AttributeKeyDataTypeInt64, Type: v3.AttributeKeyTypeTag},
|
|
},
|
|
want: &v3.BuilderQuery{
|
|
Filters: &v3.FilterSet{
|
|
Operator: "AND",
|
|
Items: []v3.FilterItem{
|
|
{Key: v3.AttributeKey{Key: "bytes", Type: v3.AttributeKeyTypeTag, DataType: v3.AttributeKeyDataTypeInt64}, Value: 100, Operator: ">"},
|
|
},
|
|
},
|
|
OrderBy: []v3.OrderBy{},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "test service name",
|
|
args: args{
|
|
query: &v3.BuilderQuery{
|
|
Filters: &v3.FilterSet{
|
|
Operator: "AND",
|
|
Items: []v3.FilterItem{
|
|
{Key: v3.AttributeKey{Key: "serviceName", DataType: v3.AttributeKeyDataTypeString, IsColumn: true}, Value: "myservice", Operator: "="},
|
|
{Key: v3.AttributeKey{Key: "serviceName"}, Value: "myservice", Operator: "="},
|
|
},
|
|
},
|
|
OrderBy: []v3.OrderBy{},
|
|
},
|
|
keys: map[string]v3.AttributeKey{},
|
|
want: &v3.BuilderQuery{
|
|
Filters: &v3.FilterSet{
|
|
Operator: "AND",
|
|
Items: []v3.FilterItem{
|
|
{Key: v3.AttributeKey{Key: "service.name", Type: v3.AttributeKeyTypeResource, DataType: v3.AttributeKeyDataTypeString}, Value: "myservice", Operator: "="},
|
|
{Key: v3.AttributeKey{Key: "service.name", Type: v3.AttributeKeyTypeResource, DataType: v3.AttributeKeyDataTypeString}, Value: "myservice", Operator: "="},
|
|
},
|
|
},
|
|
OrderBy: []v3.OrderBy{},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "test mat attrs",
|
|
args: args{
|
|
query: &v3.BuilderQuery{
|
|
Filters: &v3.FilterSet{
|
|
Operator: "AND",
|
|
Items: []v3.FilterItem{
|
|
{Key: v3.AttributeKey{Key: "http.route", DataType: v3.AttributeKeyDataTypeString, IsColumn: true}, Value: "/api", Operator: "="},
|
|
{Key: v3.AttributeKey{Key: "msgSystem"}, Value: "name", Operator: "="},
|
|
{Key: v3.AttributeKey{Key: "external_http_url"}, Value: "name", Operator: "="},
|
|
},
|
|
},
|
|
OrderBy: []v3.OrderBy{},
|
|
},
|
|
keys: map[string]v3.AttributeKey{},
|
|
want: &v3.BuilderQuery{
|
|
Filters: &v3.FilterSet{
|
|
Operator: "AND",
|
|
Items: []v3.FilterItem{
|
|
{Key: v3.AttributeKey{Key: "http.route", DataType: v3.AttributeKeyDataTypeString, Type: v3.AttributeKeyTypeTag, IsColumn: true}, Value: "/api", Operator: "="},
|
|
{Key: v3.AttributeKey{Key: "msgSystem", DataType: v3.AttributeKeyDataTypeString, IsColumn: true}, Value: "name", Operator: "="},
|
|
{Key: v3.AttributeKey{Key: "external_http_url", DataType: v3.AttributeKeyDataTypeString, IsColumn: true}, Value: "name", Operator: "="},
|
|
},
|
|
},
|
|
OrderBy: []v3.OrderBy{},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "test aggregateattr, filter, groupby, order by",
|
|
args: args{
|
|
query: &v3.BuilderQuery{
|
|
AggregateOperator: v3.AggregateOperatorCount,
|
|
AggregateAttribute: v3.AttributeKey{
|
|
Key: "http.route",
|
|
DataType: v3.AttributeKeyDataTypeString,
|
|
Type: v3.AttributeKeyTypeTag,
|
|
},
|
|
Filters: &v3.FilterSet{
|
|
Operator: "AND",
|
|
Items: []v3.FilterItem{
|
|
{Key: v3.AttributeKey{Key: "http.route", DataType: v3.AttributeKeyDataTypeString}, Value: "/api", Operator: "="},
|
|
},
|
|
},
|
|
GroupBy: []v3.AttributeKey{
|
|
{Key: "http.route", DataType: v3.AttributeKeyDataTypeString},
|
|
{Key: "msgSystem", DataType: v3.AttributeKeyDataTypeString},
|
|
},
|
|
OrderBy: []v3.OrderBy{
|
|
{ColumnName: "httpRoute", Order: v3.DirectionAsc},
|
|
},
|
|
},
|
|
keys: map[string]v3.AttributeKey{
|
|
"http.route##tag##string": {Key: "http.route", DataType: v3.AttributeKeyDataTypeString, Type: v3.AttributeKeyTypeTag, IsColumn: true},
|
|
},
|
|
want: &v3.BuilderQuery{
|
|
AggregateAttribute: v3.AttributeKey{
|
|
Key: "http.route",
|
|
DataType: v3.AttributeKeyDataTypeString,
|
|
Type: v3.AttributeKeyTypeTag,
|
|
IsColumn: true,
|
|
},
|
|
Filters: &v3.FilterSet{
|
|
Operator: "AND",
|
|
Items: []v3.FilterItem{
|
|
{Key: v3.AttributeKey{Key: "http.route", DataType: v3.AttributeKeyDataTypeString, Type: v3.AttributeKeyTypeTag, IsColumn: true}, Value: "/api", Operator: "="},
|
|
},
|
|
},
|
|
GroupBy: []v3.AttributeKey{
|
|
{Key: "http.route", DataType: v3.AttributeKeyDataTypeString, Type: v3.AttributeKeyTypeTag, IsColumn: true},
|
|
{Key: "msgSystem", DataType: v3.AttributeKeyDataTypeString, IsJSON: false, IsColumn: true},
|
|
},
|
|
OrderBy: []v3.OrderBy{
|
|
{Key: "httpRoute", Order: v3.DirectionAsc, ColumnName: "httpRoute", DataType: v3.AttributeKeyDataTypeString, IsColumn: true},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "enrich default values",
|
|
args: args{
|
|
query: &v3.BuilderQuery{
|
|
Filters: &v3.FilterSet{
|
|
Items: []v3.FilterItem{
|
|
{Key: v3.AttributeKey{Key: "testattr"}},
|
|
},
|
|
},
|
|
OrderBy: []v3.OrderBy{{ColumnName: "timestamp", Order: v3.DirectionAsc}},
|
|
},
|
|
keys: map[string]v3.AttributeKey{},
|
|
want: &v3.BuilderQuery{
|
|
Filters: &v3.FilterSet{
|
|
Items: []v3.FilterItem{{Key: v3.AttributeKey{Key: "testattr", Type: v3.AttributeKeyTypeTag, DataType: v3.AttributeKeyDataTypeString}}},
|
|
},
|
|
// isColumn won't matter in timestamp as it will always be a column
|
|
OrderBy: []v3.OrderBy{{Key: "timestamp", Order: v3.DirectionAsc, ColumnName: "timestamp"}},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
EnrichTracesQuery(tt.args.query, tt.args.keys)
|
|
// Check AggregateAttribute
|
|
if tt.args.query.AggregateAttribute.Key != "" && !reflect.DeepEqual(tt.args.query.AggregateAttribute, tt.args.want.AggregateAttribute) {
|
|
t.Errorf("EnrichTracesQuery() AggregateAttribute = %v, want %v", tt.args.query.AggregateAttribute, tt.args.want.AggregateAttribute)
|
|
}
|
|
|
|
// Check Filters
|
|
if tt.args.query.Filters != nil && !reflect.DeepEqual(tt.args.query.Filters, tt.args.want.Filters) {
|
|
t.Errorf("EnrichTracesQuery() Filters = %v, want %v", tt.args.query.Filters, tt.args.want.Filters)
|
|
}
|
|
|
|
// Check GroupBy
|
|
if tt.args.query.GroupBy != nil && !reflect.DeepEqual(tt.args.query.GroupBy, tt.args.want.GroupBy) {
|
|
t.Errorf("EnrichTracesQuery() GroupBy = %v, want %v", tt.args.query.GroupBy, tt.args.want.GroupBy)
|
|
}
|
|
|
|
// Check OrderBy
|
|
if tt.args.query.OrderBy != nil && !reflect.DeepEqual(tt.args.query.OrderBy, tt.args.want.OrderBy) {
|
|
t.Errorf("EnrichTracesQuery() OrderBy = %v, want %v", tt.args.query.OrderBy, tt.args.want.OrderBy)
|
|
}
|
|
})
|
|
}
|
|
}
|