Skip to content

Commit 2d8b5c6

Browse files
authored
Merge pull request #186 from google/go/application_tag/db
Go application-tag db libs
2 parents ff009af + 050d742 commit 2d8b5c6

File tree

5 files changed

+43
-15
lines changed

5 files changed

+43
-15
lines changed

go/database/sql/README.md

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,18 @@ Users are given control over what tags they want to append by using `core.Commen
3434
```go
3535
type CommenterOptions struct {
3636
EnableDBDriver bool
37-
EnableTraceparent bool // OpenTelemetry trace information
38-
EnableRoute bool // applicable for web frameworks
39-
EnableFramework bool // applicable for web frameworks
40-
EnableController bool // applicable for web frameworks
41-
EnableAction bool // applicable for web frameworks
37+
EnableTraceparent bool // OpenTelemetry trace information
38+
EnableRoute bool // applicable for web frameworks
39+
EnableFramework bool // applicable for web frameworks
40+
EnableController bool // applicable for web frameworks
41+
EnableAction bool // applicable for web frameworks
42+
EnableApplication bool // applicable for web frameworks
43+
Application string // user-provided application-name. optional
4244
}
4345
```
4446

47+
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).
48+
4549

4650
### Framework Supported
4751
* [http/net](.../../../http-net/README.md)

go/database/sql/go-sql.go

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,24 @@ import (
1818
"context"
1919
"database/sql"
2020
"fmt"
21+
"runtime/debug"
2122
"strings"
2223

2324
"github.com/google/sqlcommenter/go/core"
2425
)
2526

27+
var attemptedToAutosetApplication = false
28+
2629
type DB struct {
2730
*sql.DB
28-
driverName string
29-
options core.CommenterOptions
31+
driverName string
32+
options core.CommenterOptions
33+
application string
3034
}
3135

3236
func Open(driverName string, dataSourceName string, options core.CommenterOptions) (*DB, error) {
3337
db, err := sql.Open(driverName, dataSourceName)
34-
return &DB{DB: db, driverName: driverName, options: options}, err
38+
return &DB{DB: db, driverName: driverName, options: options, application: options.Application}, err
3539
}
3640

3741
// ***** Query Functions *****
@@ -98,6 +102,18 @@ func (db *DB) withComment(ctx context.Context, query string) string {
98102
}
99103
}
100104

105+
if db.options.EnableApplication {
106+
if !attemptedToAutosetApplication && db.application == "" {
107+
attemptedToAutosetApplication = true
108+
bi, ok := debug.ReadBuildInfo()
109+
if ok {
110+
db.application = bi.Path
111+
}
112+
}
113+
114+
commentsMap[core.Application] = db.application
115+
}
116+
101117
var commentsString string = ""
102118
if len(commentsMap) > 0 { // Converts comments map to string and appends it to query
103119
commentsString = fmt.Sprintf("/*%s*/", core.ConvertMapToComment(commentsMap))

go/database/sql/go-sql_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,15 @@ func TestHTTP_Net(t *testing.T) {
4545
t.Fatalf("MockSQL failed with unexpected error: %s", err)
4646
}
4747

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

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

6868
db := DB{DB: mockDB, driverName: "mocksql", options: core.CommenterOptions{EnableDBDriver: true}}
6969
got := db.withComment(context.Background(), "Select 1;")
70-
want := "Select 1/*driver=database%2Fsql%3Amocksql*/;"
70+
want := "Select 1/*db_driver=database%2Fsql%3Amocksql*/;"
7171
if got != want {
7272
t.Errorf("db.withComment(context.Background(), 'Select 1;') got %q, wanted %q", got, want)
7373
}

go/database/sql/go.mod

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,20 @@ module github.com/google/sqlcommenter/go/database/sql
33
go 1.19
44

55
require (
6-
github.com/google/sqlcommenter/go/core v0.0.1-beta
6+
github.com/google/sqlcommenter/go/core v0.0.2-beta
77
go.opentelemetry.io/otel/sdk v1.10.0
88
)
99

1010
require (
1111
github.com/go-logr/logr v1.2.3 // indirect
1212
github.com/go-logr/stdr v1.2.2 // indirect
13-
go.opentelemetry.io/otel v1.10.0 // indirect
13+
go.opentelemetry.io/otel v1.11.1 // indirect
1414
golang.org/x/sys v0.0.0-20220927170352-d9d178bc13c6 // indirect
1515
)
1616

1717
require (
1818
github.com/DATA-DOG/go-sqlmock v1.5.0
19-
github.com/google/sqlcommenter/go/net/http v0.0.1-beta
19+
github.com/google/sqlcommenter/go/net/http v0.0.2-beta
2020
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.10.0
21-
go.opentelemetry.io/otel/trace v1.10.0 // indirect
21+
go.opentelemetry.io/otel/trace v1.11.1 // indirect
2222
)

go/database/sql/go.sum

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,26 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre
99
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
1010
github.com/google/sqlcommenter/go/core v0.0.1-beta h1:IVszEHanWVeS7UcmP8C3SHa57CmfeqMBj0QUcJ8VZ9Q=
1111
github.com/google/sqlcommenter/go/core v0.0.1-beta/go.mod h1:CZfcqmbIxngExnZ7Se6AsKNVubZhKyi54aeDJZiqTMQ=
12+
github.com/google/sqlcommenter/go/core v0.0.2-beta h1:VnX58Jvf1mkI5KveBddZhCm4YtzG9IQErCNdmfXBU1I=
13+
github.com/google/sqlcommenter/go/core v0.0.2-beta/go.mod h1:CZfcqmbIxngExnZ7Se6AsKNVubZhKyi54aeDJZiqTMQ=
1214
github.com/google/sqlcommenter/go/net/http v0.0.1-beta h1:7XQ6poZv+ZJwwHWQHlesq9IMsRus3G6Z9n10qAkrGqE=
1315
github.com/google/sqlcommenter/go/net/http v0.0.1-beta/go.mod h1:tVUqM1YZ/K3eRTdGzeav1GSbw+BXNdTGzSAbLW9CxAc=
16+
github.com/google/sqlcommenter/go/net/http v0.0.2-beta h1:hL/nLxgWeM+2A7yKPoqhyJeaqQZI12kbruQ6/IEiErM=
17+
github.com/google/sqlcommenter/go/net/http v0.0.2-beta/go.mod h1:1sd6t92iCHaNQc/v5qxTHp+td7KNoD8IIeG4BRetFZo=
1418
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
1519
github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
1620
go.opentelemetry.io/otel v1.10.0 h1:Y7DTJMR6zs1xkS/upamJYk0SxxN4C9AqRd77jmZnyY4=
1721
go.opentelemetry.io/otel v1.10.0/go.mod h1:NbvWjCthWHKBEUMpf0/v8ZRZlni86PpGFEMA9pnQSnQ=
22+
go.opentelemetry.io/otel v1.11.1 h1:4WLLAmcfkmDk2ukNXJyq3/kiz/3UzCaYq6PskJsaou4=
23+
go.opentelemetry.io/otel v1.11.1/go.mod h1:1nNhXBbWSD0nsL38H6btgnFN2k4i0sNLHNNMZMSbUGE=
1824
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.10.0 h1:c9UtMu/qnbLlVwTwt+ABrURrioEruapIslTDYZHJe2w=
1925
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.10.0/go.mod h1:h3Lrh9t3Dnqp3NPwAZx7i37UFX7xrfnO1D+fuClREOA=
2026
go.opentelemetry.io/otel/sdk v1.10.0 h1:jZ6K7sVn04kk/3DNUdJ4mqRlGDiXAVuIG+MMENpTNdY=
2127
go.opentelemetry.io/otel/sdk v1.10.0/go.mod h1:vO06iKzD5baltJz1zarxMCNHFpUlUiOy4s65ECtn6kE=
2228
go.opentelemetry.io/otel/trace v1.10.0 h1:npQMbR8o7mum8uF95yFbOEJffhs1sbCOfDh8zAJiH5E=
2329
go.opentelemetry.io/otel/trace v1.10.0/go.mod h1:Sij3YYczqAdz+EhmGhE6TpTxUO5/F/AzrK+kxfGqySM=
30+
go.opentelemetry.io/otel/trace v1.11.1 h1:ofxdnzsNrGBYXbP7t7zpUK281+go5rF7dvdIZXF8gdQ=
31+
go.opentelemetry.io/otel/trace v1.11.1/go.mod h1:f/Q9G7vzk5u91PhbmKbg1Qn0rzH1LJ4vbPHFGkTPtOk=
2432
golang.org/x/sys v0.0.0-20220927170352-d9d178bc13c6 h1:cy1ko5847T/lJ45eyg/7uLprIE/amW5IXxGtEnQdYMI=
2533
golang.org/x/sys v0.0.0-20220927170352-d9d178bc13c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
2634
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=

0 commit comments

Comments
 (0)