Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
migrate mgo
Browse files Browse the repository at this point in the history
rarguelloF committed Aug 19, 2024
1 parent f245d84 commit fa14400
Showing 6 changed files with 78 additions and 149 deletions.
14 changes: 7 additions & 7 deletions contrib/globalsign/mgo/mgo.go
Original file line number Diff line number Diff line change
@@ -11,19 +11,19 @@ import (
"net"
"strings"

"github.com/globalsign/mgo"

"github.com/DataDog/dd-trace-go/v2/ddtrace/ext"
"github.com/DataDog/dd-trace-go/v2/ddtrace/tracer"
"github.com/DataDog/dd-trace-go/v2/internal/log"
"github.com/DataDog/dd-trace-go/v2/internal/telemetry"

"github.com/globalsign/mgo"
"github.com/DataDog/dd-trace-go/v2/instrumentation"
)

const componentName = "globalsign/mgo"

var instr *instrumentation.Instrumentation

func init() {
telemetry.LoadIntegration(componentName)
tracer.MarkIntegrationImported("github.com/globalsign/mgo")
instr = instrumentation.Load(instrumentation.PackageGlobalsignMgo)
}

// Dial opens a connection to a MongoDB server and configures it
@@ -61,7 +61,7 @@ func Dial(url string, opts ...DialOption) (*Session, error) {
for _, fn := range opts {
fn.apply(s.cfg)
}
log.Debug("contrib/globalsign/mgo: Dialing: %s, %#v", url, s.cfg)
instr.Logger().Debug("contrib/globalsign/mgo: Dialing: %s, %#v", url, s.cfg)
return s, err
}

33 changes: 3 additions & 30 deletions contrib/globalsign/mgo/mgo_test.go
Original file line number Diff line number Diff line change
@@ -14,8 +14,7 @@ import (
"github.com/DataDog/dd-trace-go/v2/ddtrace/ext"
"github.com/DataDog/dd-trace-go/v2/ddtrace/mocktracer"
"github.com/DataDog/dd-trace-go/v2/ddtrace/tracer"
"github.com/DataDog/dd-trace-go/v2/internal/contrib/namingschematest"
"github.com/DataDog/dd-trace-go/v2/internal/globalconfig"
"github.com/DataDog/dd-trace-go/v2/instrumentation/testutils"

"github.com/globalsign/mgo"
"github.com/globalsign/mgo/bson"
@@ -532,9 +531,7 @@ func TestAnalyticsSettings(t *testing.T) {
mt := mocktracer.Start()
defer mt.Stop()

rate := globalconfig.AnalyticsRate()
defer globalconfig.SetAnalyticsRate(rate)
globalconfig.SetAnalyticsRate(0.4)
testutils.SetGlobalAnalyticsRate(t, 0.4)

assertRate(t, mt, 0.4)
})
@@ -557,36 +554,12 @@ func TestAnalyticsSettings(t *testing.T) {
mt := mocktracer.Start()
defer mt.Stop()

rate := globalconfig.AnalyticsRate()
defer globalconfig.SetAnalyticsRate(rate)
globalconfig.SetAnalyticsRate(0.4)
testutils.SetGlobalAnalyticsRate(t, 0.4)

assertRate(t, mt, 0.23, WithAnalyticsRate(0.23))
})
}

func TestNamingSchema(t *testing.T) {
genSpans := namingschematest.GenSpansFn(func(t *testing.T, serviceOverride string) []*mocktracer.Span {
var opts []DialOption
if serviceOverride != "" {
opts = append(opts, WithService(serviceOverride))
}
mt := mocktracer.Start()
defer mt.Stop()

session, err := Dial("localhost:27017", opts...)
require.NoError(t, err)
err = session.
DB("my_db").
C("MyCollection").
Insert(bson.D{bson.DocElem{Name: "entity", Value: bson.DocElem{Name: "index", Value: 0}}})
require.NoError(t, err)

return mt.FinishedSpans()
})
namingschematest.NewMongoDBTest(genSpans, "mongodb")(t)
}

func TestIssue2165(t *testing.T) {
assert := assert.New(t)
insert := func(collection *Collection) {
18 changes: 5 additions & 13 deletions contrib/globalsign/mgo/option.go
Original file line number Diff line number Diff line change
@@ -9,12 +9,9 @@ import (
"context"
"math"

"github.com/DataDog/dd-trace-go/v2/internal"
"github.com/DataDog/dd-trace-go/v2/internal/namingschema"
"github.com/DataDog/dd-trace-go/v2/instrumentation"
)

const defaultServiceName = "mongodb"

type mongoConfig struct {
ctx context.Context
serviceName string
@@ -23,16 +20,11 @@ type mongoConfig struct {
}

func newConfig() *mongoConfig {
rate := math.NaN()
if internal.BoolEnv("DD_TRACE_GIN_ANALYTICS_ENABLED", false) {
rate = 1.0
}
return &mongoConfig{
serviceName: namingschema.ServiceNameOverrideV0(defaultServiceName, defaultServiceName),
spanName: namingschema.OpName(namingschema.MongoDBOutbound),
ctx: context.Background(),
// analyticsRate: globalconfig.AnalyticsRate(),
analyticsRate: rate,
serviceName: instr.ServiceName(instrumentation.ComponentDefault, nil),
spanName: instr.OperationName(instrumentation.ComponentDefault, nil),
ctx: context.Background(),
analyticsRate: instr.AnalyticsRate(false),
}
}

1 change: 1 addition & 0 deletions instrumentation/internal/namingschematest/main_test.go
Original file line number Diff line number Diff line change
@@ -28,6 +28,7 @@ func TestNamingSchema(t *testing.T) {
elasticV6,
goRestfulV3,
ginGonicGin,
globalsignMgo,
netHTTPServer,
netHTTPClient,
gomemcache,
49 changes: 49 additions & 0 deletions instrumentation/internal/namingschematest/mgo_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package namingschematest

import (
"testing"

"github.com/globalsign/mgo/bson"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

mgotrace "github.com/DataDog/dd-trace-go/contrib/globalsign/mgo/v2"
"github.com/DataDog/dd-trace-go/instrumentation/internal/namingschematest/harness"
"github.com/DataDog/dd-trace-go/v2/ddtrace/mocktracer"
"github.com/DataDog/dd-trace-go/v2/instrumentation"
)

var globalsignMgo = harness.TestCase{
Name: instrumentation.PackageGlobalsignMgo,
GenSpans: func(t *testing.T, serviceOverride string) []*mocktracer.Span {
var opts []mgotrace.DialOption
if serviceOverride != "" {
opts = append(opts, mgotrace.WithService(serviceOverride))
}
mt := mocktracer.Start()
defer mt.Stop()

session, err := mgotrace.Dial("localhost:27017", opts...)
require.NoError(t, err)
err = session.
DB("my_db").
C("MyCollection").
Insert(bson.D{bson.DocElem{Name: "entity", Value: bson.DocElem{Name: "index", Value: 0}}})
require.NoError(t, err)

return mt.FinishedSpans()
},
WantServiceNameV0: harness.ServiceNameAssertions{
Defaults: []string{"mongodb"},
DDService: []string{"mongodb"},
ServiceOverride: []string{harness.TestServiceOverride},
},
AssertOpV0: func(t *testing.T, spans []*mocktracer.Span) {
require.Len(t, spans, 1)
assert.Equal(t, "mongodb.query", spans[0].OperationName())
},
AssertOpV1: func(t *testing.T, spans []*mocktracer.Span) {
require.Len(t, spans, 1)
assert.Equal(t, "mongodb.query", spans[0].OperationName())
},
}
112 changes: 13 additions & 99 deletions instrumentation/packages.go
Original file line number Diff line number Diff line change
@@ -27,7 +27,7 @@ const (
PackageGoElasticSearchV6 Package = "elastic/go-elasticsearch.v6"
PackageEmickleiGoRestfulV3 Package = "emicklei/go-restful.v3"
PackageGinGonicGin Package = "gin-gonic/gin"

PackageGlobalsignMgo Package = "globalsign/mgo"
// TODO: ...

PackageNetHTTP Package = "net/http"
@@ -250,6 +250,18 @@ var packages = map[Package]PackageInfo{
},
},
},
PackageGlobalsignMgo: {
TracedPackage: "github.com/globalsign/mgo",
EnvVarPrefix: "MGO",
naming: map[Component]componentNames{
ComponentDefault: {
useDDServiceV0: false,
buildServiceNameV0: staticName("mongodb"),
buildOpNameV0: staticName("mongodb.query"),
buildOpNameV1: staticName("mongodb.query"),
},
},
},
PackageNetHTTP: {
TracedPackage: "net/http",
EnvVarPrefix: "HTTP",
@@ -333,101 +345,3 @@ func isAWSMessagingSendOp(awsService, awsOperation string) bool {
}
return false
}

//
//func opV1(t IntegrationType) string {
// switch t {
// // Client/Server
// case HTTPClient:
// return "http.client.request"
// case HTTPServer:
// return "http.server.request"
// case GRPCClient:
// return "grpc.client.request"
// case GRPCServer:
// return "grpc.server.request"
// case GraphqlServer:
// return "graphql.server.request"
// case TwirpClient:
// return "twirp.client.request"
// case TwirpServer:
// return "twirp.server.request"
//
// // Messaging
// case KafkaOutbound:
// return "kafka.send"
// case KafkaInbound:
// return "kafka.process"
// case GCPPubSubInbound:
// return "gcp.pubsub.process"
// case GCPPubSubOutbound:
// return "gcp.pubsub.send"
//
// // Cache
// case MemcachedOutbound:
// return "memcached.command"
// case RedisOutbound:
// return "redis.command"
//
// // Database
// case ElasticSearchOutbound:
// return "elasticsearch.query"
// case MongoDBOutbound:
// return "mongodb.query"
// case CassandraOutbound:
// return "cassandra.query"
// case LevelDBOutbound:
// return "leveldb.query"
// case BuntDBOutbound:
// return "buntdb.query"
// case ConsulOutbound:
// return "consul.query"
// case VaultOutbound:
// return "vault.query"
// }
// return ""
//}
//
//func opV0(t IntegrationType) string {
// switch t {
// case HTTPClient, HTTPServer:
// return "http.request"
// case GRPCClient:
// return "grpc.client"
// case GRPCServer:
// return "grpc.server"
// case GraphqlServer:
// return "graphql.request"
// case TwirpClient:
// return "twirp.request"
// case TwirpServer:
// return "twirp.request"
// case KafkaOutbound:
// return "kafka.produce"
// case KafkaInbound:
// return "kafka.consume"
// case GCPPubSubInbound:
// return "pubsub.receive"
// case GCPPubSubOutbound:
// return "pubsub.publish"
// case MemcachedOutbound:
// return "memcached.query"
// case RedisOutbound:
// return "redis.command"
// case ElasticSearchOutbound:
// return "elasticsearch.query"
// case MongoDBOutbound:
// return "mongodb.query"
// case CassandraOutbound:
// return "cassandra.query"
// case LevelDBOutbound:
// return "leveldb.query"
// case BuntDBOutbound:
// return "buntdb.query"
// case ConsulOutbound:
// return "consul.command"
// case VaultOutbound:
// return "http.request"
// }
// return ""
//}

0 comments on commit fa14400

Please sign in to comment.