Skip to content

Commit

Permalink
Merge pull request #186 from google/go/application_tag/db
Browse files Browse the repository at this point in the history
Go application-tag db libs
  • Loading branch information
kapv89 committed Nov 21, 2022
2 parents ff009af + 050d742 commit 2d8b5c6
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 15 deletions.
14 changes: 9 additions & 5 deletions go/database/sql/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,18 @@ Users are given control over what tags they want to append by using `core.Commen
```go
type CommenterOptions struct {
EnableDBDriver bool
EnableTraceparent bool // OpenTelemetry trace information
EnableRoute bool // applicable for web frameworks
EnableFramework bool // applicable for web frameworks
EnableController bool // applicable for web frameworks
EnableAction bool // applicable for web frameworks
EnableTraceparent bool // OpenTelemetry trace information
EnableRoute bool // applicable for web frameworks
EnableFramework bool // applicable for web frameworks
EnableController bool // applicable for web frameworks
EnableAction bool // applicable for web frameworks
EnableApplication bool // applicable for web frameworks
Application string // user-provided application-name. optional
}
```

The driver will try to use the module-name from the project's `go.mod` as the application name if `EnableApplication` is `true` and no `Application` string is provided (works correctly for compiled go applications).


### Framework Supported
* [http/net](.../../../http-net/README.md)
Expand Down
22 changes: 19 additions & 3 deletions go/database/sql/go-sql.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,24 @@ import (
"context"
"database/sql"
"fmt"
"runtime/debug"
"strings"

"github.com/google/sqlcommenter/go/core"
)

var attemptedToAutosetApplication = false

type DB struct {
*sql.DB
driverName string
options core.CommenterOptions
driverName string
options core.CommenterOptions
application string
}

func Open(driverName string, dataSourceName string, options core.CommenterOptions) (*DB, error) {
db, err := sql.Open(driverName, dataSourceName)
return &DB{DB: db, driverName: driverName, options: options}, err
return &DB{DB: db, driverName: driverName, options: options, application: options.Application}, err
}

// ***** Query Functions *****
Expand Down Expand Up @@ -98,6 +102,18 @@ func (db *DB) withComment(ctx context.Context, query string) string {
}
}

if db.options.EnableApplication {
if !attemptedToAutosetApplication && db.application == "" {
attemptedToAutosetApplication = true
bi, ok := debug.ReadBuildInfo()
if ok {
db.application = bi.Path
}
}

commentsMap[core.Application] = db.application
}

var commentsString string = ""
if len(commentsMap) > 0 { // Converts comments map to string and appends it to query
commentsString = fmt.Sprintf("/*%s*/", core.ConvertMapToComment(commentsMap))
Expand Down
6 changes: 3 additions & 3 deletions go/database/sql/go-sql_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,15 @@ func TestHTTP_Net(t *testing.T) {
t.Fatalf("MockSQL failed with unexpected error: %s", err)
}

db := DB{DB: mockDB, driverName: "mocksql", options: core.CommenterOptions{EnableDBDriver: true, EnableRoute: true, EnableFramework: true}}
db := DB{DB: mockDB, driverName: "mocksql", options: core.CommenterOptions{EnableDBDriver: true, EnableRoute: true, EnableFramework: true, EnableApplication: true, Application: "app"}, application: "app"}
r, err := http.NewRequest("GET", "hello/1", nil)
if err != nil {
t.Errorf("http.NewRequest('GET', 'hello/1', nil) returned unexpected error: %v", err)
}

ctx := core.ContextInject(r.Context(), httpnet.NewHTTPRequestExtractor(r, nil))
got := db.withComment(ctx, "Select 1")
want := "Select 1/*driver=database%2Fsql%3Amocksql,framework=net%2Fhttp,route=hello%2F1*/"
want := "Select 1/*application=app,db_driver=database%2Fsql%3Amocksql,framework=net%2Fhttp,route=hello%2F1*/"
if got != want {
t.Errorf("db.withComment(ctx, 'Select 1') got %q, wanted %q", got, want)
}
Expand All @@ -67,7 +67,7 @@ func TestQueryWithSemicolon(t *testing.T) {

db := DB{DB: mockDB, driverName: "mocksql", options: core.CommenterOptions{EnableDBDriver: true}}
got := db.withComment(context.Background(), "Select 1;")
want := "Select 1/*driver=database%2Fsql%3Amocksql*/;"
want := "Select 1/*db_driver=database%2Fsql%3Amocksql*/;"
if got != want {
t.Errorf("db.withComment(context.Background(), 'Select 1;') got %q, wanted %q", got, want)
}
Expand Down
8 changes: 4 additions & 4 deletions go/database/sql/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,20 @@ module github.com/google/sqlcommenter/go/database/sql
go 1.19

require (
github.com/google/sqlcommenter/go/core v0.0.1-beta
github.com/google/sqlcommenter/go/core v0.0.2-beta
go.opentelemetry.io/otel/sdk v1.10.0
)

require (
github.com/go-logr/logr v1.2.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
go.opentelemetry.io/otel v1.10.0 // indirect
go.opentelemetry.io/otel v1.11.1 // indirect
golang.org/x/sys v0.0.0-20220927170352-d9d178bc13c6 // indirect
)

require (
github.com/DATA-DOG/go-sqlmock v1.5.0
github.com/google/sqlcommenter/go/net/http v0.0.1-beta
github.com/google/sqlcommenter/go/net/http v0.0.2-beta
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.10.0
go.opentelemetry.io/otel/trace v1.10.0 // indirect
go.opentelemetry.io/otel/trace v1.11.1 // indirect
)
8 changes: 8 additions & 0 deletions go/database/sql/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,26 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
github.com/google/sqlcommenter/go/core v0.0.1-beta h1:IVszEHanWVeS7UcmP8C3SHa57CmfeqMBj0QUcJ8VZ9Q=
github.com/google/sqlcommenter/go/core v0.0.1-beta/go.mod h1:CZfcqmbIxngExnZ7Se6AsKNVubZhKyi54aeDJZiqTMQ=
github.com/google/sqlcommenter/go/core v0.0.2-beta h1:VnX58Jvf1mkI5KveBddZhCm4YtzG9IQErCNdmfXBU1I=
github.com/google/sqlcommenter/go/core v0.0.2-beta/go.mod h1:CZfcqmbIxngExnZ7Se6AsKNVubZhKyi54aeDJZiqTMQ=
github.com/google/sqlcommenter/go/net/http v0.0.1-beta h1:7XQ6poZv+ZJwwHWQHlesq9IMsRus3G6Z9n10qAkrGqE=
github.com/google/sqlcommenter/go/net/http v0.0.1-beta/go.mod h1:tVUqM1YZ/K3eRTdGzeav1GSbw+BXNdTGzSAbLW9CxAc=
github.com/google/sqlcommenter/go/net/http v0.0.2-beta h1:hL/nLxgWeM+2A7yKPoqhyJeaqQZI12kbruQ6/IEiErM=
github.com/google/sqlcommenter/go/net/http v0.0.2-beta/go.mod h1:1sd6t92iCHaNQc/v5qxTHp+td7KNoD8IIeG4BRetFZo=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
go.opentelemetry.io/otel v1.10.0 h1:Y7DTJMR6zs1xkS/upamJYk0SxxN4C9AqRd77jmZnyY4=
go.opentelemetry.io/otel v1.10.0/go.mod h1:NbvWjCthWHKBEUMpf0/v8ZRZlni86PpGFEMA9pnQSnQ=
go.opentelemetry.io/otel v1.11.1 h1:4WLLAmcfkmDk2ukNXJyq3/kiz/3UzCaYq6PskJsaou4=
go.opentelemetry.io/otel v1.11.1/go.mod h1:1nNhXBbWSD0nsL38H6btgnFN2k4i0sNLHNNMZMSbUGE=
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.10.0 h1:c9UtMu/qnbLlVwTwt+ABrURrioEruapIslTDYZHJe2w=
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.10.0/go.mod h1:h3Lrh9t3Dnqp3NPwAZx7i37UFX7xrfnO1D+fuClREOA=
go.opentelemetry.io/otel/sdk v1.10.0 h1:jZ6K7sVn04kk/3DNUdJ4mqRlGDiXAVuIG+MMENpTNdY=
go.opentelemetry.io/otel/sdk v1.10.0/go.mod h1:vO06iKzD5baltJz1zarxMCNHFpUlUiOy4s65ECtn6kE=
go.opentelemetry.io/otel/trace v1.10.0 h1:npQMbR8o7mum8uF95yFbOEJffhs1sbCOfDh8zAJiH5E=
go.opentelemetry.io/otel/trace v1.10.0/go.mod h1:Sij3YYczqAdz+EhmGhE6TpTxUO5/F/AzrK+kxfGqySM=
go.opentelemetry.io/otel/trace v1.11.1 h1:ofxdnzsNrGBYXbP7t7zpUK281+go5rF7dvdIZXF8gdQ=
go.opentelemetry.io/otel/trace v1.11.1/go.mod h1:f/Q9G7vzk5u91PhbmKbg1Qn0rzH1LJ4vbPHFGkTPtOk=
golang.org/x/sys v0.0.0-20220927170352-d9d178bc13c6 h1:cy1ko5847T/lJ45eyg/7uLprIE/amW5IXxGtEnQdYMI=
golang.org/x/sys v0.0.0-20220927170352-d9d178bc13c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=

0 comments on commit 2d8b5c6

Please sign in to comment.