diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index fe94a09..95a271e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -32,36 +32,49 @@ jobs: fail-fast: true matrix: case: - - { name: 'Gear', plugin_dir: 'gear', go_version: '1.12'} - - { name: 'Gin v2', plugin_dir: 'gin/v2', go_version: '1.12'} - - { name: 'Gin v3', plugin_dir: 'gin/v3', go_version: '1.12'} - - { name: 'Go micro', plugin_dir: 'micro', go_version: '1.14'} - - { name: 'Go resty', plugin_dir: 'resty', go_version: '1.12'} - - { name: 'Go restful', plugin_dir: 'go-restful', go_version: '1.13'} - - { name: 'Go logrus', plugin_dir: 'logrus', go_version: '1.12'} + - { name: 'gear', plugin_dir: 'gear', go_version: '1.12' } + - { name: 'gin/v2', plugin_dir: 'gin/v2', go_version: '1.12' } + - { name: 'gin/v3', plugin_dir: 'gin/v3', go_version: '1.12' } + - { name: 'micro', plugin_dir: 'micro', go_version: '1.14' } + - { name: 'resty', plugin_dir: 'resty', go_version: '1.12' } + - { name: 'go-restful', plugin_dir: 'go-restful', go_version: '1.13' } + - { name: 'logrus', plugin_dir: 'logrus', go_version: '1.12' } + - { name: 'dubbo-go', plugin_dir: 'dubbo-go', go_version: '1.14' } + - { name: 'grom', plugin_dir: 'grom', go_version: '1.16' } + - { name: 'kafka-reporter', plugin_dir: 'kafkareporter', go_version: '1.16' } + - { name: 'kratos', plugin_dir: 'plugin_dir', go_version: '1.16' } + - { name: 'sql', plugin_dir: 'sql', go_version: '1.16' } + - { name: 'zap', plugin_dir: 'zap', go_version: '1.12' } steps: + - name: Check out code into the Go module directory + uses: actions/checkout@v2 + - uses: dorny/paths-filter@v2 + id: filter + with: + filters: | + plugin: + - '${{matrix.case.plugin_dir}}/**' - name: Set up Go ${{ matrix.case.go_version }} + if: steps.filter.outputs.plugin == 'true' uses: actions/setup-go@v2 + id: go with: go-version: ${{ matrix.case.go_version }} - id: go - - name: Check out code into the Go module directory - uses: actions/checkout@v2 - - name: Get dependencies + if: steps.filter.outputs.plugin == 'true' run: make deps PLUGIN_DIR=${{ matrix.case.plugin_dir }} - - name: Lint + if: steps.filter.outputs.plugin == 'true' run: make lint PLUGIN_DIR=${{ matrix.case.plugin_dir }} - - name: Test + if: steps.filter.outputs.plugin == 'true' run: make test PLUGIN_DIR=${{ matrix.case.plugin_dir }} build-expected: name: Build & Test All runs-on: ubuntu-latest timeout-minutes: 90 - needs: [build] + needs: [ build ] steps: - name: Call me by your name run: echo "Birds of a feather flock together" diff --git a/dubbo-go/dubbo-go.go b/dubbo-go/dubbo-go.go index 07910fd..6d70014 100644 --- a/dubbo-go/dubbo-go.go +++ b/dubbo-go/dubbo-go.go @@ -14,7 +14,7 @@ // limitations under the License. // -package dubbo_go +package dubbogo import ( "context" @@ -22,12 +22,12 @@ import ( "sync" "time" + "github.com/SkyAPM/go2sky" + "dubbo.apache.org/dubbo-go/v3/common/extension" "dubbo.apache.org/dubbo-go/v3/filter" "dubbo.apache.org/dubbo-go/v3/protocol" agentv3 "skywalking.apache.org/repo/goapi/collect/language/agent/v3" - - "github.com/SkyAPM/go2sky" ) // side record the server or client @@ -202,7 +202,7 @@ func GetClientTracingFilterSingleton() filter.Filter { clientFilterOnce.Do(func() { clientFilter = &tracingFilter{ tracer: defaultTracer, - side: clientSide, + side: clientSide, } }) return clientFilter diff --git a/dubbo-go/go.mod b/dubbo-go/go.mod index 393051b..cdd9bf5 100644 --- a/dubbo-go/go.mod +++ b/dubbo-go/go.mod @@ -4,7 +4,7 @@ go 1.14 require ( dubbo.apache.org/dubbo-go/v3 v3.0.0-rc2 - github.com/SkyAPM/go2sky v1.2.0 + github.com/SkyAPM/go2sky v1.3.0 github.com/apache/dubbo-go-hessian2 v1.9.3 github.com/dubbogo/gost v1.11.17 skywalking.apache.org/repo/goapi v0.0.0-20210820070710-e10b78bbf481 diff --git a/dubbo-go/go.sum b/dubbo-go/go.sum index d28d21e..f88b7ba 100644 --- a/dubbo-go/go.sum +++ b/dubbo-go/go.sum @@ -53,8 +53,8 @@ github.com/RoaringBitmap/roaring v0.7.1 h1:HkcLv8q/kwGJnhEWe+vinu+04DGDdQ7nVivMh github.com/RoaringBitmap/roaring v0.7.1/go.mod h1:jdT9ykXwHFNdJbEtxePexlFYH9LXucApeS0/+/g+p1I= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/SkyAPM/go2sky v1.2.0 h1:DTkNf16MVZ/IHC6Bj9kFIoPKodgyXTPLHYca8qMgKbw= -github.com/SkyAPM/go2sky v1.2.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= +github.com/SkyAPM/go2sky v1.3.0 h1:2Ka5RmTxV7Osm/sVIy3V/AO06etLF/dJsNN4HmR8kok= +github.com/SkyAPM/go2sky v1.3.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= diff --git a/dubbo-go/test/client/cmd/client.go b/dubbo-go/test/client/cmd/client.go index 0445341..3808c3f 100644 --- a/dubbo-go/test/client/cmd/client.go +++ b/dubbo-go/test/client/cmd/client.go @@ -34,7 +34,7 @@ import ( "github.com/SkyAPM/go2sky/reporter" hessian "github.com/apache/dubbo-go-hessian2" - dubbo_go "github.com/SkyAPM/go2sky-plugins/dubbo-go" + dubbogo "github.com/SkyAPM/go2sky-plugins/dubbo-go" "github.com/SkyAPM/go2sky-plugins/dubbo-go/test/client/pkg" httpplugin "github.com/SkyAPM/go2sky/plugins/http" ) @@ -67,22 +67,22 @@ func main() { log.Fatalf("crate tracer error: %v \n", err) } - err = dubbo_go.SetClientTracer(tracer) + err = dubbogo.SetClientTracer(tracer) if err != nil { log.Fatalf("set tracer error: %v \n", err) } - dubbo_go.SetClientExtraTags("extra-tags", "client") - dubbo_go.SetClientReportTags("release") - dubbo_go.SetClientReportTags("organization") + dubbogo.SetClientExtraTags("extra-tags", "client") + dubbogo.SetClientReportTags("release") + dubbogo.SetClientReportTags("organization") route := http.NewServeMux() route.HandleFunc("/hello", func(writer http.ResponseWriter, req *http.Request) { user := &pkg.User{} - err := userProvider.GetUser(req.Context(), []interface{}{"A001"}, user) - if err != nil { + err1 := userProvider.GetUser(req.Context(), []interface{}{"A001"}, user) + if err1 != nil { writer.WriteHeader(http.StatusInternalServerError) - _, _ = writer.Write([]byte(fmt.Sprintf("call service err %v \n", err))) + _, _ = writer.Write([]byte(fmt.Sprintf("call service err %v \n", err1))) return } diff --git a/dubbo-go/test/client/pkg/user.go b/dubbo-go/test/client/pkg/user.go index 9c54d47..973be96 100644 --- a/dubbo-go/test/client/pkg/user.go +++ b/dubbo-go/test/client/pkg/user.go @@ -21,6 +21,7 @@ import ( "time" ) +// User user type User struct { ID string Name string @@ -28,14 +29,17 @@ type User struct { Time time.Time } +// UserProvider user provider service type UserProvider struct { GetUser func(ctx context.Context, req []interface{}, rsp *User) error } +// Reference rpc service id or reference id func (u *UserProvider) Reference() string { return "UserProvider" } +// JavaClassName got a go struct's Java Class package name which should be a POJO class func (User) JavaClassName() string { return "org.apache.dubbo.User" } diff --git a/dubbo-go/test/server/cmd/server.go b/dubbo-go/test/server/cmd/server.go index a1252d4..fff279b 100644 --- a/dubbo-go/test/server/cmd/server.go +++ b/dubbo-go/test/server/cmd/server.go @@ -37,7 +37,7 @@ import ( "github.com/SkyAPM/go2sky/reporter" hessian "github.com/apache/dubbo-go-hessian2" - dubbo_go "github.com/SkyAPM/go2sky-plugins/dubbo-go" + dubbogo "github.com/SkyAPM/go2sky-plugins/dubbo-go" "github.com/SkyAPM/go2sky-plugins/dubbo-go/test/server/pkg" ) @@ -65,13 +65,13 @@ func main() { if err != nil { log.Fatalf("crate tracer error: %v \n", err) } - err = dubbo_go.SetServerTracer(tracer) + err = dubbogo.SetServerTracer(tracer) if err != nil { log.Fatalf("set tracer error: %v \n", err) } - dubbo_go.SetServerExtraTags("extra-tags", "server") - dubbo_go.SetServerReportTags("release") - dubbo_go.SetServerReportTags("organization") + dubbogo.SetServerExtraTags("extra-tags", "server") + dubbogo.SetServerReportTags("release") + dubbogo.SetServerReportTags("organization") initSignal() } @@ -79,7 +79,7 @@ func main() { func initSignal() { signals := make(chan os.Signal, 1) // It is not possible to block SIGKILL or syscall.SIGSTOP - signal.Notify(signals, os.Interrupt, os.Kill, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT) + signal.Notify(signals, os.Interrupt, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT) for { sig := <-signals logger.Infof("get signal %s", sig.String()) diff --git a/dubbo-go/test/server/pkg/user.go b/dubbo-go/test/server/pkg/user.go index 34e9c69..d662bf0 100644 --- a/dubbo-go/test/server/pkg/user.go +++ b/dubbo-go/test/server/pkg/user.go @@ -33,6 +33,7 @@ func init() { hessian.RegisterPOJO(&User{}) } +// User user type User struct { ID string Name string @@ -40,9 +41,11 @@ type User struct { Time time.Time } +// UserProvider user provider service type UserProvider struct { } +// GetUser get user func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, error) { gxlog.CInfo("req:%#v", req) rsp := User{"A001", "Alex Stocks", 18, time.Now()} @@ -50,10 +53,12 @@ func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, e return &rsp, nil } +// Reference rpc service id or reference id func (u *UserProvider) Reference() string { return "UserProvider" } +// JavaClassName got a go struct's Java Class package name which should be a POJO class func (u User) JavaClassName() string { return "org.apache.dubbo.User" } diff --git a/gear/go.mod b/gear/go.mod index ef2d8e6..dcae697 100644 --- a/gear/go.mod +++ b/gear/go.mod @@ -3,7 +3,7 @@ module github.com/SkyAPM/go2sky-plugins/gear go 1.12 require ( - github.com/SkyAPM/go2sky v1.2.0 + github.com/SkyAPM/go2sky v1.3.0 github.com/teambition/gear v1.21.2 skywalking.apache.org/repo/goapi v0.0.0-20210401062122-a049ca15c62d ) diff --git a/gear/go.sum b/gear/go.sum index 768b77b..726a4c1 100644 --- a/gear/go.sum +++ b/gear/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/99designs/gqlgen v0.13.0/go.mod h1:NV130r6f4tpRWuAI+zsrSdooO/eWUv+Gyyoi3rEfXIk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/GitbookIO/mimedb v0.0.0-20180329142916-39fdfdb4def4/go.mod h1:0JA2lIXs/dl3RUgHP5ivwjl3f0g+X2BQz3zWnq8IJa4= -github.com/SkyAPM/go2sky v1.2.0 h1:DTkNf16MVZ/IHC6Bj9kFIoPKodgyXTPLHYca8qMgKbw= -github.com/SkyAPM/go2sky v1.2.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= +github.com/SkyAPM/go2sky v1.3.0 h1:2Ka5RmTxV7Osm/sVIy3V/AO06etLF/dJsNN4HmR8kok= +github.com/SkyAPM/go2sky v1.3.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= diff --git a/gin/v2/go.mod b/gin/v2/go.mod index ec32f9d..d915c4d 100644 --- a/gin/v2/go.mod +++ b/gin/v2/go.mod @@ -3,7 +3,7 @@ module github.com/SkyAPM/go2sky-plugins/gin/v2 go 1.12 require ( - github.com/SkyAPM/go2sky v1.2.0 + github.com/SkyAPM/go2sky v1.3.0 github.com/gin-contrib/sse v0.1.0 // indirect github.com/gin-gonic/gin v1.3.0 github.com/json-iterator/go v1.1.10 // indirect diff --git a/gin/v2/go.sum b/gin/v2/go.sum index 82bb1fc..b4933a8 100644 --- a/gin/v2/go.sum +++ b/gin/v2/go.sum @@ -1,8 +1,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/99designs/gqlgen v0.13.0/go.mod h1:NV130r6f4tpRWuAI+zsrSdooO/eWUv+Gyyoi3rEfXIk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/SkyAPM/go2sky v1.2.0 h1:DTkNf16MVZ/IHC6Bj9kFIoPKodgyXTPLHYca8qMgKbw= -github.com/SkyAPM/go2sky v1.2.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= +github.com/SkyAPM/go2sky v1.3.0 h1:2Ka5RmTxV7Osm/sVIy3V/AO06etLF/dJsNN4HmR8kok= +github.com/SkyAPM/go2sky v1.3.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= diff --git a/gin/v3/go.mod b/gin/v3/go.mod index 473c6c5..83d4277 100644 --- a/gin/v3/go.mod +++ b/gin/v3/go.mod @@ -3,7 +3,7 @@ module github.com/SkyAPM/go2sky-plugins/gin/v3 go 1.12 require ( - github.com/SkyAPM/go2sky v1.2.0 + github.com/SkyAPM/go2sky v1.3.0 github.com/gin-gonic/gin v1.5.0 skywalking.apache.org/repo/goapi v0.0.0-20210401062122-a049ca15c62d ) diff --git a/gin/v3/go.sum b/gin/v3/go.sum index 1113c5c..1b8c8e5 100644 --- a/gin/v3/go.sum +++ b/gin/v3/go.sum @@ -1,8 +1,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/99designs/gqlgen v0.13.0/go.mod h1:NV130r6f4tpRWuAI+zsrSdooO/eWUv+Gyyoi3rEfXIk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/SkyAPM/go2sky v1.2.0 h1:DTkNf16MVZ/IHC6Bj9kFIoPKodgyXTPLHYca8qMgKbw= -github.com/SkyAPM/go2sky v1.2.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= +github.com/SkyAPM/go2sky v1.3.0 h1:2Ka5RmTxV7Osm/sVIy3V/AO06etLF/dJsNN4HmR8kok= +github.com/SkyAPM/go2sky v1.3.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= diff --git a/go-restful/go.mod b/go-restful/go.mod index d2a97d7..4d0271e 100644 --- a/go-restful/go.mod +++ b/go-restful/go.mod @@ -3,7 +3,7 @@ module github.com/SkyAPM/go2sky-plugins/go-restful go 1.13 require ( - github.com/SkyAPM/go2sky v1.2.0 + github.com/SkyAPM/go2sky v1.3.0 github.com/emicklei/go-restful/v3 v3.0.0 github.com/json-iterator/go v1.1.10 // indirect github.com/stretchr/testify v1.7.0 // indirect diff --git a/go-restful/go.sum b/go-restful/go.sum index cdfef21..d4a1095 100644 --- a/go-restful/go.sum +++ b/go-restful/go.sum @@ -1,8 +1,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/99designs/gqlgen v0.13.0/go.mod h1:NV130r6f4tpRWuAI+zsrSdooO/eWUv+Gyyoi3rEfXIk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/SkyAPM/go2sky v1.2.0 h1:DTkNf16MVZ/IHC6Bj9kFIoPKodgyXTPLHYca8qMgKbw= -github.com/SkyAPM/go2sky v1.2.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= +github.com/SkyAPM/go2sky v1.3.0 h1:2Ka5RmTxV7Osm/sVIy3V/AO06etLF/dJsNN4HmR8kok= +github.com/SkyAPM/go2sky v1.3.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= diff --git a/gorm/go.mod b/gorm/go.mod index d36ee6a..fb1f96d 100644 --- a/gorm/go.mod +++ b/gorm/go.mod @@ -3,7 +3,7 @@ module github.com/SkyAPM/go2sky-plugins/gorm go 1.16 require ( - github.com/SkyAPM/go2sky v1.2.1-0.20211120040242-09e1525ced66 + github.com/SkyAPM/go2sky v1.3.0 gorm.io/gorm v1.22.3 skywalking.apache.org/repo/goapi v0.0.0-20211014145040-b215a7f7b270 ) diff --git a/gorm/go.sum b/gorm/go.sum index c730dd3..2567647 100644 --- a/gorm/go.sum +++ b/gorm/go.sum @@ -3,10 +3,8 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/99designs/gqlgen v0.13.0/go.mod h1:NV130r6f4tpRWuAI+zsrSdooO/eWUv+Gyyoi3rEfXIk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/SkyAPM/go2sky v1.2.0 h1:DTkNf16MVZ/IHC6Bj9kFIoPKodgyXTPLHYca8qMgKbw= -github.com/SkyAPM/go2sky v1.2.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= -github.com/SkyAPM/go2sky v1.2.1-0.20211120040242-09e1525ced66 h1:FZ7WIMvVH4ioZGrVc4uvawPbJj0oY7BsJZg9ZgCQFhQ= -github.com/SkyAPM/go2sky v1.2.1-0.20211120040242-09e1525ced66/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= +github.com/SkyAPM/go2sky v1.3.0 h1:2Ka5RmTxV7Osm/sVIy3V/AO06etLF/dJsNN4HmR8kok= +github.com/SkyAPM/go2sky v1.3.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= diff --git a/kafkareporter/doc.go b/kafkareporter/doc.go index 28c2b32..70d9e55 100644 --- a/kafkareporter/doc.go +++ b/kafkareporter/doc.go @@ -14,5 +14,5 @@ // limitations under the License. // -// Package sarama is a plugin that can be one kafka reporter as go2sky.Reporter. +// Package kafkareporter is a plugin that can be one kafka reporter as go2sky.Reporter. package kafkareporter diff --git a/kafkareporter/go.mod b/kafkareporter/go.mod index ceca56f..5a03017 100644 --- a/kafkareporter/go.mod +++ b/kafkareporter/go.mod @@ -4,7 +4,7 @@ go 1.16 require ( github.com/Shopify/sarama v1.29.1 - github.com/SkyAPM/go2sky v1.2.0 + github.com/SkyAPM/go2sky v1.3.0 google.golang.org/protobuf v1.27.1 skywalking.apache.org/repo/goapi v0.0.0-20210820070710-e10b78bbf481 ) diff --git a/kafkareporter/go.sum b/kafkareporter/go.sum index 90ba271..218b07c 100644 --- a/kafkareporter/go.sum +++ b/kafkareporter/go.sum @@ -5,8 +5,8 @@ github.com/Shopify/sarama v1.29.1 h1:wBAacXbYVLmWieEA/0X/JagDdCZ8NVFOfS6l6+2u5S0 github.com/Shopify/sarama v1.29.1/go.mod h1:mdtqvCSg8JOxk8PmpTNGyo6wzd4BMm4QXSfDnTXmgkE= github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/SkyAPM/go2sky v1.2.0 h1:DTkNf16MVZ/IHC6Bj9kFIoPKodgyXTPLHYca8qMgKbw= -github.com/SkyAPM/go2sky v1.2.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= +github.com/SkyAPM/go2sky v1.3.0 h1:2Ka5RmTxV7Osm/sVIy3V/AO06etLF/dJsNN4HmR8kok= +github.com/SkyAPM/go2sky v1.3.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= diff --git a/kafkareporter/internal/tool/os_util.go b/kafkareporter/internal/tool/os_util.go index 90d0b9b..424d661 100644 --- a/kafkareporter/internal/tool/os_util.go +++ b/kafkareporter/internal/tool/os_util.go @@ -23,6 +23,7 @@ import ( "strconv" ) +// ProcessNo pid func ProcessNo() string { if os.Getpid() > 0 { return strconv.Itoa(os.Getpid()) @@ -30,6 +31,7 @@ func ProcessNo() string { return "" } +// HostName hostname func HostName() string { if hs, err := os.Hostname(); err == nil { return hs @@ -37,10 +39,12 @@ func HostName() string { return "unknown" } +// OSName os name func OSName() string { return runtime.GOOS } +// AllIPV4 all ipv4 func AllIPV4() (ipv4s []string) { adders, err := net.InterfaceAddrs() if err != nil { @@ -61,6 +65,7 @@ func AllIPV4() (ipv4s []string) { return } +// IPV4 ipv4 func IPV4() string { ipv4s := AllIPV4() if len(ipv4s) > 0 { diff --git a/kafkareporter/kafka.go b/kafkareporter/kafka.go index 38b57ee..104b488 100644 --- a/kafkareporter/kafka.go +++ b/kafkareporter/kafka.go @@ -59,7 +59,7 @@ type kafkaReporter struct { } // New create a new reporter to send data to kafka. -func New(addrs []string, opts ...KafkaReporterOption) (go2sky.Reporter, error) { +func New(addrs []string, opts ...Option) (go2sky.Reporter, error) { r := &kafkaReporter{ c: sarama.NewConfig(), logger: log.New(os.Stderr, defaultKafkaLogPrefix, log.LstdFlags), @@ -89,47 +89,47 @@ func New(addrs []string, opts ...KafkaReporterOption) (go2sky.Reporter, error) { return r, nil } -// KafkaReporterOption allows for functional options to adjust behaviour +// Option allows for functional options to adjust behaviour // of a kafka reporter to be created by New -type KafkaReporterOption func(r *kafkaReporter) +type Option func(r *kafkaReporter) // WithConfig setup sarama.Config for kafka reporter -func WithConfig(c *sarama.Config) KafkaReporterOption { +func WithConfig(c *sarama.Config) Option { return func(r *kafkaReporter) { r.c = c } } // WithCheckInterval setup service and endpoint registry check interval -func WithCheckInterval(interval time.Duration) KafkaReporterOption { +func WithCheckInterval(interval time.Duration) Option { return func(r *kafkaReporter) { r.checkInterval = interval } } // WithInstanceProps setup service instance properties eg: org=SkyAPM -func WithInstanceProps(props map[string]string) KafkaReporterOption { +func WithInstanceProps(props map[string]string) Option { return func(r *kafkaReporter) { r.instanceProps = props } } // WithLogger setup logger for kafka reporter -func WithLogger(logger *log.Logger) KafkaReporterOption { +func WithLogger(logger *log.Logger) Option { return func(r *kafkaReporter) { r.logger = logger } } // WithTopicManagement setup service management topic -func WithTopicManagement(topicManagement string) KafkaReporterOption { +func WithTopicManagement(topicManagement string) Option { return func(r *kafkaReporter) { r.topicManagement = topicManagement } } // WithTopicSegment setup service segment topic -func WithTopicSegment(topicSegment string) KafkaReporterOption { +func WithTopicSegment(topicSegment string) Option { return func(r *kafkaReporter) { r.topicSegment = topicSegment } diff --git a/kafkareporter/kafka_test.go b/kafkareporter/kafka_test.go index 92dbddc..2015bb7 100644 --- a/kafkareporter/kafka_test.go +++ b/kafkareporter/kafka_test.go @@ -157,7 +157,7 @@ func TestKafkaReporterOption(t *testing.T) { tests := []struct { name string - option KafkaReporterOption + option Option verifyFunc func(t *testing.T, reporter *kafkaReporter) }{ { @@ -258,7 +258,7 @@ func TestKafkaReporter_reportInstanceProperties(t *testing.T) { t.Error() } for msg := range reporter.producer.Successes() { - reporter.producer.Close() + _ = reporter.producer.Close() if msg.Topic != reporter.topicManagement { t.Errorf("Excepted kafka topic is %s not %s", reporter.topicManagement, msg.Topic) } diff --git a/kafkareporter/test/server/server.go b/kafkareporter/test/server/server.go index 5fafb9a..f5c3e77 100644 --- a/kafkareporter/test/server/server.go +++ b/kafkareporter/test/server/server.go @@ -48,11 +48,11 @@ func main() { _, _ = res.Write([]byte("success")) }) route.HandleFunc("/info", func(res http.ResponseWriter, req *http.Request) { - span, _, err := tracer.CreateEntrySpan(context.Background(), "/info", func(key string) (s string, e error) { + span, _, err1 := tracer.CreateEntrySpan(context.Background(), "/info", func(key string) (s string, e error) { return "", nil }) - if err != nil { - log.Fatalf("create span error: %v \n", err) + if err1 != nil { + log.Fatalf("create span error: %v \n", err1) } defer span.End() diff --git a/kratos/go.mod b/kratos/go.mod index b61a00e..26de3d5 100644 --- a/kratos/go.mod +++ b/kratos/go.mod @@ -3,7 +3,7 @@ module github.com/SkyAPM/go2sky-plugins/kratos go 1.16 require ( - github.com/SkyAPM/go2sky v1.2.0 + github.com/SkyAPM/go2sky v1.3.0 github.com/go-kratos/kratos/examples v0.0.0-20210806031717-e5ae8dc3f1f4 github.com/go-kratos/kratos/v2 v2.0.4-0.20210806031717-e5ae8dc3f1f4 golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d // indirect diff --git a/kratos/go.sum b/kratos/go.sum index fa8f70e..f9823b3 100644 --- a/kratos/go.sum +++ b/kratos/go.sum @@ -42,8 +42,8 @@ github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/SkyAPM/go2sky v1.2.0 h1:DTkNf16MVZ/IHC6Bj9kFIoPKodgyXTPLHYca8qMgKbw= -github.com/SkyAPM/go2sky v1.2.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= +github.com/SkyAPM/go2sky v1.3.0 h1:2Ka5RmTxV7Osm/sVIy3V/AO06etLF/dJsNN4HmR8kok= +github.com/SkyAPM/go2sky v1.3.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= diff --git a/logrus/go.mod b/logrus/go.mod index aee3502..f04d9d5 100644 --- a/logrus/go.mod +++ b/logrus/go.mod @@ -3,6 +3,6 @@ module github.com/SkyAPM/go2sky-plugins/logrus go 1.12 require ( - github.com/SkyAPM/go2sky v1.2.0 + github.com/SkyAPM/go2sky v1.3.0 github.com/sirupsen/logrus v1.8.1 ) diff --git a/logrus/go.sum b/logrus/go.sum index 7bb7502..a0534f8 100644 --- a/logrus/go.sum +++ b/logrus/go.sum @@ -1,8 +1,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/99designs/gqlgen v0.13.0/go.mod h1:NV130r6f4tpRWuAI+zsrSdooO/eWUv+Gyyoi3rEfXIk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/SkyAPM/go2sky v1.2.0 h1:DTkNf16MVZ/IHC6Bj9kFIoPKodgyXTPLHYca8qMgKbw= -github.com/SkyAPM/go2sky v1.2.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= +github.com/SkyAPM/go2sky v1.3.0 h1:2Ka5RmTxV7Osm/sVIy3V/AO06etLF/dJsNN4HmR8kok= +github.com/SkyAPM/go2sky v1.3.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= diff --git a/micro/go.mod b/micro/go.mod index 287db9b..f0d5c3f 100644 --- a/micro/go.mod +++ b/micro/go.mod @@ -3,7 +3,7 @@ module github.com/SkyAPM/go2sky-plugins/micro go 1.14 require ( - github.com/SkyAPM/go2sky v1.2.0 + github.com/SkyAPM/go2sky v1.3.0 github.com/asim/go-micro/v3 v3.5.0 skywalking.apache.org/repo/goapi v0.0.0-20210401062122-a049ca15c62d ) diff --git a/micro/go.sum b/micro/go.sum index 1563ada..84d7fba 100644 --- a/micro/go.sum +++ b/micro/go.sum @@ -41,8 +41,8 @@ github.com/Microsoft/hcsshim v0.8.7-0.20191101173118-65519b62243c/go.mod h1:7xhj github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87/go.mod h1:iGLljf5n9GjT6kc0HBvyI1nOKnGQbNB66VzSNbK5iks= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/SkyAPM/go2sky v1.2.0 h1:DTkNf16MVZ/IHC6Bj9kFIoPKodgyXTPLHYca8qMgKbw= -github.com/SkyAPM/go2sky v1.2.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= +github.com/SkyAPM/go2sky v1.3.0 h1:2Ka5RmTxV7Osm/sVIy3V/AO06etLF/dJsNN4HmR8kok= +github.com/SkyAPM/go2sky v1.3.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs= github.com/akamai/AkamaiOPEN-edgegrid-golang v0.9.0/go.mod h1:zpDJeKyp9ScW4NNrbdr+Eyxvry3ilGPewKoXw3XGN1k= diff --git a/resty/go.mod b/resty/go.mod index 05700bf..ebed493 100644 --- a/resty/go.mod +++ b/resty/go.mod @@ -3,6 +3,6 @@ module github.com/SkyAPM/go2sky-plugins/resty go 1.12 require ( - github.com/SkyAPM/go2sky v1.2.0 + github.com/SkyAPM/go2sky v1.3.0 github.com/go-resty/resty/v2 v2.2.0 ) diff --git a/resty/go.sum b/resty/go.sum index 82118c0..950e834 100644 --- a/resty/go.sum +++ b/resty/go.sum @@ -1,8 +1,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/99designs/gqlgen v0.13.0/go.mod h1:NV130r6f4tpRWuAI+zsrSdooO/eWUv+Gyyoi3rEfXIk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/SkyAPM/go2sky v1.2.0 h1:DTkNf16MVZ/IHC6Bj9kFIoPKodgyXTPLHYca8qMgKbw= -github.com/SkyAPM/go2sky v1.2.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= +github.com/SkyAPM/go2sky v1.3.0 h1:2Ka5RmTxV7Osm/sVIy3V/AO06etLF/dJsNN4HmR8kok= +github.com/SkyAPM/go2sky v1.3.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= diff --git a/sql/common.go b/sql/common.go index e7ad44c..47a364c 100644 --- a/sql/common.go +++ b/sql/common.go @@ -18,7 +18,6 @@ package sql import ( "context" - "database/sql/driver" "errors" "fmt" "regexp" @@ -33,37 +32,9 @@ const ( componentIDMysql = 5012 ) -const ( - tagDbType = "db.type" - tagDbInstance = "db.instance" - tagDbStatement = "db.statement" - tagDbSqlParameters = "db.sql.parameters" -) - +// ErrUnsupportedOp operation unsupported by the underlying driver var ErrUnsupportedOp = errors.New("operation unsupported by the underlying driver") -// namedValueToValueString converts driver arguments of NamedValue format to Value string format. -func namedValueToValueString(named []driver.NamedValue) string { - b := make([]string, 0, len(named)) - for _, param := range named { - b = append(b, fmt.Sprintf("%v", param.Value)) - } - return strings.Join(b, ",") -} - -// namedValueToValue converts driver arguments of NamedValue format to Value format. -// Implemented in the same way as in database/sql/ctxutil.go. -func namedValueToValue(named []driver.NamedValue) ([]driver.Value, error) { - dargs := make([]driver.Value, len(named)) - for n, param := range named { - if len(param.Name) > 0 { - return nil, errors.New("sql: driver does not support the use of Named Parameters") - } - dargs[n] = param.Value - } - return dargs, nil -} - func argsToString(args []interface{}) string { sb := strings.Builder{} for _, arg := range args { @@ -83,8 +54,8 @@ func createSpan(ctx context.Context, tracer *go2sky.Tracer, opts *options, opera s.SetPeer(opts.peer) s.SetComponent(opts.componentID) s.SetSpanLayer(agentv3.SpanLayer_Database) - s.Tag(tagDbType, string(opts.dbType)) - s.Tag(tagDbInstance, opts.peer) + s.Tag(go2sky.TagDBType, string(opts.dbType)) + s.Tag(go2sky.TagDBInstance, opts.peer) return s, nil } @@ -98,8 +69,8 @@ func createLocalSpan(ctx context.Context, tracer *go2sky.Tracer, opts *options, } s.SetComponent(opts.componentID) s.SetSpanLayer(agentv3.SpanLayer_Database) - s.Tag(tagDbType, string(opts.dbType)) - s.Tag(tagDbInstance, opts.peer) + s.Tag(go2sky.TagDBType, string(opts.dbType)) + s.Tag(go2sky.TagDBInstance, opts.peer) return s, nCtx, nil } diff --git a/sql/conn.go b/sql/conn.go index 25cbb71..5543aaa 100644 --- a/sql/conn.go +++ b/sql/conn.go @@ -20,14 +20,18 @@ import ( "context" "database/sql" "time" + + "github.com/SkyAPM/go2sky" ) +// Conn wrap sql.Conn and support trace type Conn struct { *sql.Conn db *DB } +// PingContext support trace func (c *Conn) PingContext(ctx context.Context) error { span, err := createSpan(ctx, c.db.tracer, c.db.opts, "ping") if err != nil { @@ -41,6 +45,7 @@ func (c *Conn) PingContext(ctx context.Context) error { return err } +// ExecContext support trace func (c *Conn) ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error) { span, err := createSpan(ctx, c.db.tracer, c.db.opts, "execute") if err != nil { @@ -49,10 +54,10 @@ func (c *Conn) ExecContext(ctx context.Context, query string, args ...interface{ defer span.End() if c.db.opts.reportQuery { - span.Tag(tagDbStatement, query) + span.Tag(go2sky.TagDBStatement, query) } if c.db.opts.reportParam { - span.Tag(tagDbSqlParameters, argsToString(args)) + span.Tag(go2sky.TagDBSqlParameters, argsToString(args)) } res, err := c.Conn.ExecContext(ctx, query, args...) @@ -62,6 +67,7 @@ func (c *Conn) ExecContext(ctx context.Context, query string, args ...interface{ return res, err } +// QueryContext support trace func (c *Conn) QueryContext(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error) { span, err := createSpan(ctx, c.db.tracer, c.db.opts, "query") if err != nil { @@ -70,10 +76,10 @@ func (c *Conn) QueryContext(ctx context.Context, query string, args ...interface defer span.End() if c.db.opts.reportQuery { - span.Tag(tagDbStatement, query) + span.Tag(go2sky.TagDBStatement, query) } if c.db.opts.reportParam { - span.Tag(tagDbSqlParameters, argsToString(args)) + span.Tag(go2sky.TagDBSqlParameters, argsToString(args)) } rows, err := c.Conn.QueryContext(ctx, query, args...) @@ -83,6 +89,7 @@ func (c *Conn) QueryContext(ctx context.Context, query string, args ...interface return rows, err } +// QueryRowContext support trace func (c *Conn) QueryRowContext(ctx context.Context, query string, args ...interface{}) *sql.Row { span, err := createSpan(ctx, c.db.tracer, c.db.opts, "query") if err != nil { @@ -91,15 +98,16 @@ func (c *Conn) QueryRowContext(ctx context.Context, query string, args ...interf defer span.End() if c.db.opts.reportQuery { - span.Tag(tagDbStatement, query) + span.Tag(go2sky.TagDBStatement, query) } if c.db.opts.reportParam { - span.Tag(tagDbSqlParameters, argsToString(args)) + span.Tag(go2sky.TagDBSqlParameters, argsToString(args)) } return c.Conn.QueryRowContext(ctx, query, args...) } +// PrepareContext support trace func (c *Conn) PrepareContext(ctx context.Context, query string) (*Stmt, error) { stmt, err := c.Conn.PrepareContext(ctx, query) return &Stmt{ @@ -109,6 +117,7 @@ func (c *Conn) PrepareContext(ctx context.Context, query string) (*Stmt, error) }, err } +// BeginTx support trace func (c *Conn) BeginTx(ctx context.Context, opts *sql.TxOptions) (*Tx, error) { span, nCtx, err := createLocalSpan(ctx, c.db.tracer, c.db.opts, "transaction") if err != nil { diff --git a/sql/db.go b/sql/db.go index a075972..9730881 100644 --- a/sql/db.go +++ b/sql/db.go @@ -25,6 +25,7 @@ import ( "github.com/SkyAPM/go2sky" ) +// DB wrap sql.DB and support trace type DB struct { *sql.DB @@ -32,6 +33,7 @@ type DB struct { opts *options } +// OpenDB support trace func OpenDB(c driver.Connector, tracer *go2sky.Tracer, opts ...Option) *DB { db := sql.OpenDB(c) @@ -52,6 +54,7 @@ func OpenDB(c driver.Connector, tracer *go2sky.Tracer, opts ...Option) *DB { } } +// Open support trace func Open(driverName, dataSourceName string, tracer *go2sky.Tracer, opts ...Option) (*DB, error) { db, err := sql.Open(driverName, dataSourceName) if err != nil { @@ -79,6 +82,7 @@ func Open(driverName, dataSourceName string, tracer *go2sky.Tracer, opts ...Opti }, nil } +// PingContext support trace func (db *DB) PingContext(ctx context.Context) error { span, err := createSpan(ctx, db.tracer, db.opts, "ping") if err != nil { @@ -92,6 +96,7 @@ func (db *DB) PingContext(ctx context.Context) error { return err } +// PrepareContext support trace func (db *DB) PrepareContext(ctx context.Context, query string) (*Stmt, error) { stmt, err := db.DB.PrepareContext(ctx, query) if err != nil { @@ -104,6 +109,7 @@ func (db *DB) PrepareContext(ctx context.Context, query string) (*Stmt, error) { }, nil } +// ExecContext support trace func (db *DB) ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error) { span, err := createSpan(ctx, db.tracer, db.opts, "execute") if err != nil { @@ -112,10 +118,10 @@ func (db *DB) ExecContext(ctx context.Context, query string, args ...interface{} defer span.End() if db.opts.reportQuery { - span.Tag(tagDbStatement, query) + span.Tag(go2sky.TagDBStatement, query) } if db.opts.reportParam { - span.Tag(tagDbSqlParameters, argsToString(args)) + span.Tag(go2sky.TagDBSqlParameters, argsToString(args)) } res, err := db.DB.ExecContext(ctx, query, args...) @@ -125,6 +131,7 @@ func (db *DB) ExecContext(ctx context.Context, query string, args ...interface{} return res, err } +// QueryContext support trace func (db *DB) QueryContext(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error) { span, err := createSpan(ctx, db.tracer, db.opts, "query") if err != nil { @@ -133,10 +140,10 @@ func (db *DB) QueryContext(ctx context.Context, query string, args ...interface{ defer span.End() if db.opts.reportQuery { - span.Tag(tagDbStatement, query) + span.Tag(go2sky.TagDBStatement, query) } if db.opts.reportParam { - span.Tag(tagDbSqlParameters, argsToString(args)) + span.Tag(go2sky.TagDBSqlParameters, argsToString(args)) } rows, err := db.DB.QueryContext(ctx, query, args...) @@ -146,6 +153,7 @@ func (db *DB) QueryContext(ctx context.Context, query string, args ...interface{ return rows, err } +// QueryRowContext support trace func (db *DB) QueryRowContext(ctx context.Context, query string, args ...interface{}) *sql.Row { span, err := createSpan(ctx, db.tracer, db.opts, "query") if err != nil { @@ -154,15 +162,16 @@ func (db *DB) QueryRowContext(ctx context.Context, query string, args ...interfa defer span.End() if db.opts.reportQuery { - span.Tag(tagDbStatement, query) + span.Tag(go2sky.TagDBStatement, query) } if db.opts.reportParam { - span.Tag(tagDbSqlParameters, argsToString(args)) + span.Tag(go2sky.TagDBSqlParameters, argsToString(args)) } return db.DB.QueryRowContext(ctx, query, args...) } +// BeginTx support trace func (db *DB) BeginTx(ctx context.Context, opts *sql.TxOptions) (*Tx, error) { span, nCtx, err := createLocalSpan(ctx, db.tracer, db.opts, "transaction") if err != nil { @@ -183,6 +192,7 @@ func (db *DB) BeginTx(ctx context.Context, opts *sql.TxOptions) (*Tx, error) { }, nil } +// Conn support trace func (db *DB) Conn(ctx context.Context) (*Conn, error) { conn, err := db.DB.Conn(ctx) if err != nil { diff --git a/sql/go.mod b/sql/go.mod index 9372f4e..ba63048 100644 --- a/sql/go.mod +++ b/sql/go.mod @@ -3,7 +3,7 @@ module github.com/SkyAPM/go2sky-plugins/sql go 1.16 require ( - github.com/SkyAPM/go2sky v1.2.0 + github.com/SkyAPM/go2sky v1.3.0 github.com/go-sql-driver/mysql v1.6.0 github.com/google/uuid v1.3.0 // indirect github.com/pkg/errors v0.9.1 // indirect diff --git a/sql/go.sum b/sql/go.sum index ecebbed..73f83a2 100644 --- a/sql/go.sum +++ b/sql/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/99designs/gqlgen v0.13.0/go.mod h1:NV130r6f4tpRWuAI+zsrSdooO/eWUv+Gyyoi3rEfXIk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/SkyAPM/go2sky v1.2.0 h1:DTkNf16MVZ/IHC6Bj9kFIoPKodgyXTPLHYca8qMgKbw= -github.com/SkyAPM/go2sky v1.2.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= +github.com/SkyAPM/go2sky v1.3.0 h1:2Ka5RmTxV7Osm/sVIy3V/AO06etLF/dJsNN4HmR8kok= +github.com/SkyAPM/go2sky v1.3.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= diff --git a/sql/options.go b/sql/options.go index 7342da7..2b9b45c 100644 --- a/sql/options.go +++ b/sql/options.go @@ -16,14 +16,19 @@ package sql +// DBType database type type DBType string const ( + // UNKNOWN unknown database UNKNOWN DBType = "unknown" - MYSQL DBType = "mysql" - IPV4 DBType = "others" + // MYSQL mysql + MYSQL DBType = "mysql" + // IPV4 others database type + IPV4 DBType = "others" ) +// Option set plugin option type Option func(*options) type options struct { @@ -35,11 +40,11 @@ type options struct { reportParam bool } -// WithSqlDBType set dbType option, +// WithSQLDBType set dbType option, // dbType is used for parsing dsn string to peer address // and setting componentID, if DB type is not support in DBType // list, please use WithPeerAddr to set peer address manually -func WithSqlDBType(t DBType) Option { +func WithSQLDBType(t DBType) Option { return func(o *options) { o.dbType = t o.setComponentID() @@ -53,12 +58,14 @@ func WithPeerAddr(addr string) Option { } } +// WithQueryReport if set, the sql would be collected func WithQueryReport() Option { return func(o *options) { o.reportQuery = true } } +// WithParamReport if set, the parameters of the sql would be collected func WithParamReport() Option { return func(o *options) { o.reportParam = true diff --git a/sql/stmt.go b/sql/stmt.go index d2bcd6d..c7c9d39 100644 --- a/sql/stmt.go +++ b/sql/stmt.go @@ -20,8 +20,11 @@ import ( "context" "database/sql" "time" + + "github.com/SkyAPM/go2sky" ) +// Stmt wrap sql.Stmt and support trace type Stmt struct { *sql.Stmt @@ -29,6 +32,7 @@ type Stmt struct { query string } +// ExecContext support trace func (s *Stmt) ExecContext(ctx context.Context, args ...interface{}) (sql.Result, error) { span, err := createSpan(ctx, s.db.tracer, s.db.opts, "execute") if err != nil { @@ -37,10 +41,10 @@ func (s *Stmt) ExecContext(ctx context.Context, args ...interface{}) (sql.Result defer span.End() if s.db.opts.reportQuery { - span.Tag(tagDbStatement, s.query) + span.Tag(go2sky.TagDBStatement, s.query) } if s.db.opts.reportParam { - span.Tag(tagDbSqlParameters, argsToString(args)) + span.Tag(go2sky.TagDBSqlParameters, argsToString(args)) } res, err := s.Stmt.ExecContext(ctx, args...) @@ -50,6 +54,7 @@ func (s *Stmt) ExecContext(ctx context.Context, args ...interface{}) (sql.Result return res, err } +// QueryContext support trace func (s *Stmt) QueryContext(ctx context.Context, args ...interface{}) (*sql.Rows, error) { span, err := createSpan(ctx, s.db.tracer, s.db.opts, "query") if err != nil { @@ -58,10 +63,10 @@ func (s *Stmt) QueryContext(ctx context.Context, args ...interface{}) (*sql.Rows defer span.End() if s.db.opts.reportQuery { - span.Tag(tagDbStatement, s.query) + span.Tag(go2sky.TagDBStatement, s.query) } if s.db.opts.reportParam { - span.Tag(tagDbSqlParameters, argsToString(args)) + span.Tag(go2sky.TagDBSqlParameters, argsToString(args)) } rows, err := s.Stmt.QueryContext(ctx, args...) @@ -71,6 +76,7 @@ func (s *Stmt) QueryContext(ctx context.Context, args ...interface{}) (*sql.Rows return rows, err } +// QueryRowContext support trace func (s *Stmt) QueryRowContext(ctx context.Context, args ...interface{}) *sql.Row { span, err := createSpan(ctx, s.db.tracer, s.db.opts, "query") if err != nil { @@ -79,10 +85,10 @@ func (s *Stmt) QueryRowContext(ctx context.Context, args ...interface{}) *sql.Ro defer span.End() if s.db.opts.reportQuery { - span.Tag(tagDbStatement, s.query) + span.Tag(go2sky.TagDBStatement, s.query) } if s.db.opts.reportParam { - span.Tag(tagDbSqlParameters, argsToString(args)) + span.Tag(go2sky.TagDBSqlParameters, argsToString(args)) } return s.Stmt.QueryRowContext(ctx, args...) diff --git a/sql/test/client.go b/sql/test/client.go index e7cff47..3aa8b27 100644 --- a/sql/test/client.go +++ b/sql/test/client.go @@ -53,7 +53,7 @@ func main() { } db, err := sqlPlugin.Open("mysql", dsn, tracer, - sqlPlugin.WithSqlDBType(sqlPlugin.MYSQL), + sqlPlugin.WithSQLDBType(sqlPlugin.MYSQL), sqlPlugin.WithQueryReport(), ) if err != nil { @@ -66,16 +66,16 @@ func main() { name string fn testFunc }{ - {"exec", TestExec}, - {"stmt", TestStmt}, - {"commitTx", TestCommitTx}, - {"rollbackTx", TestRollbackTx}, + {"exec", testExec}, + {"stmt", testStmt}, + {"commitTx", testCommitTx}, + {"rollbackTx", testRollbackTx}, } for _, test := range tests { log.Printf("excute test case %s", test.name) - if err := test.fn(req.Context(), db); err != nil { - log.Fatalf("test case %s failed: %v", test.name, err) + if err1 := test.fn(req.Context(), db); err1 != nil { + log.Fatalf("test case %s failed: %v", test.name, err1) } } _, _ = res.Write([]byte("execute sql success")) @@ -93,7 +93,7 @@ func main() { } } -func TestExec(ctx context.Context, db *sqlPlugin.DB) error { +func testExec(ctx context.Context, db *sqlPlugin.DB) error { if err := db.PingContext(ctx); err != nil { return err } @@ -120,12 +120,14 @@ func TestExec(ctx context.Context, db *sqlPlugin.DB) error { return nil } -func TestStmt(ctx context.Context, db *sqlPlugin.DB) error { +func testStmt(ctx context.Context, db *sqlPlugin.DB) error { stmt, err := db.PrepareContext(ctx, `INSERT INTO users (id, name, age) VALUE ( ?, ?, ?)`) if err != nil { return err } - defer stmt.Close() + defer func() { + _ = stmt.Close() + }() _, err = stmt.ExecContext(ctx, "1", "bar", 11) if err != nil { @@ -135,10 +137,10 @@ func TestStmt(ctx context.Context, db *sqlPlugin.DB) error { return nil } -func TestCommitTx(ctx context.Context, db *sqlPlugin.DB) error { +func testCommitTx(ctx context.Context, db *sqlPlugin.DB) error { tx, err := db.BeginTx(ctx, nil) if err != nil { - return fmt.Errorf("begin tx error: %v \n", err) + return fmt.Errorf("begin tx error: %v", err) } if _, err := tx.Exec(`INSERT INTO users (id, name, age) VALUE ( ?, ?, ? )`, "2", "foobar", 24); err != nil { @@ -155,10 +157,10 @@ func TestCommitTx(ctx context.Context, db *sqlPlugin.DB) error { return nil } -func TestRollbackTx(ctx context.Context, db *sqlPlugin.DB) error { +func testRollbackTx(ctx context.Context, db *sqlPlugin.DB) error { tx, err := db.BeginTx(ctx, nil) if err != nil { - return fmt.Errorf("begin tx error: %v \n", err) + return fmt.Errorf("begin tx error: %v", err) } if _, err := tx.Exec(`UPDATE users SET age = ? WHERE id = ?`, 48, "2"); err != nil { diff --git a/sql/tx.go b/sql/tx.go index d8c2b43..141a964 100644 --- a/sql/tx.go +++ b/sql/tx.go @@ -24,6 +24,7 @@ import ( "github.com/SkyAPM/go2sky" ) +// Tx wrap sql.Tx and support trace type Tx struct { *sql.Tx @@ -32,22 +33,25 @@ type Tx struct { ctx context.Context } +// Commit support trace func (tx *Tx) Commit() error { if tx.span != nil { - tx.span.Tag(tagDbStatement, "commit") + tx.span.Tag(go2sky.TagDBStatement, "commit") defer tx.span.End() } return tx.Tx.Commit() } +// Rollback support trace func (tx *Tx) Rollback() error { if tx.span != nil { - tx.span.Tag(tagDbStatement, "rollback") + tx.span.Tag(go2sky.TagDBStatement, "rollback") defer tx.span.End() } return tx.Tx.Rollback() } +// Prepare support trace func (tx *Tx) Prepare(query string) (*Stmt, error) { stmt, err := tx.Tx.Prepare(query) if err != nil { @@ -60,6 +64,7 @@ func (tx *Tx) Prepare(query string) (*Stmt, error) { }, nil } +// PrepareContext support trace func (tx *Tx) PrepareContext(ctx context.Context, query string) (*Stmt, error) { stmt, err := tx.Tx.PrepareContext(ctx, query) if err != nil { @@ -72,6 +77,7 @@ func (tx *Tx) PrepareContext(ctx context.Context, query string) (*Stmt, error) { }, nil } +// StmtContext support trace func (tx *Tx) StmtContext(ctx context.Context, stmt *Stmt) *Stmt { st := tx.Tx.StmtContext(ctx, stmt.Stmt) return &Stmt{ @@ -81,10 +87,12 @@ func (tx *Tx) StmtContext(ctx context.Context, stmt *Stmt) *Stmt { } } +// Exec support trace func (tx *Tx) Exec(query string, args ...interface{}) (sql.Result, error) { return tx.ExecContext(tx.ctx, query, args...) } +// ExecContext support trace func (tx *Tx) ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error) { if id := go2sky.SpanID(ctx); id == go2sky.EmptySpanID { // if ctx do not contain parent span, use transaction ctx instead @@ -97,10 +105,10 @@ func (tx *Tx) ExecContext(ctx context.Context, query string, args ...interface{} defer span.End() if tx.db.opts.reportQuery { - span.Tag(tagDbStatement, query) + span.Tag(go2sky.TagDBStatement, query) } if tx.db.opts.reportParam { - span.Tag(tagDbSqlParameters, argsToString(args)) + span.Tag(go2sky.TagDBSqlParameters, argsToString(args)) } res, err := tx.Tx.ExecContext(ctx, query, args...) @@ -110,10 +118,12 @@ func (tx *Tx) ExecContext(ctx context.Context, query string, args ...interface{} return res, err } +// Query support trace func (tx *Tx) Query(query string, args ...interface{}) (*sql.Rows, error) { return tx.QueryContext(tx.ctx, query, args) } +// QueryContext support trace func (tx *Tx) QueryContext(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error) { if id := go2sky.SpanID(ctx); id == go2sky.EmptySpanID { // if ctx do not contain parent span, use transaction ctx instead @@ -126,10 +136,10 @@ func (tx *Tx) QueryContext(ctx context.Context, query string, args ...interface{ defer span.End() if tx.db.opts.reportQuery { - span.Tag(tagDbStatement, query) + span.Tag(go2sky.TagDBStatement, query) } if tx.db.opts.reportParam { - span.Tag(tagDbSqlParameters, argsToString(args)) + span.Tag(go2sky.TagDBSqlParameters, argsToString(args)) } rows, err := tx.Tx.QueryContext(ctx, query, args...) @@ -139,10 +149,12 @@ func (tx *Tx) QueryContext(ctx context.Context, query string, args ...interface{ return rows, err } +// QueryRow support trace func (tx *Tx) QueryRow(query string, args ...interface{}) *sql.Row { return tx.QueryRowContext(tx.ctx, query, args) } +// QueryRowContext support trace func (tx *Tx) QueryRowContext(ctx context.Context, query string, args ...interface{}) *sql.Row { if id := go2sky.SpanID(ctx); id == go2sky.EmptySpanID { // if ctx do not contain parent span, use transaction ctx instead @@ -155,10 +167,10 @@ func (tx *Tx) QueryRowContext(ctx context.Context, query string, args ...interfa defer span.End() if tx.db.opts.reportQuery { - span.Tag(tagDbStatement, query) + span.Tag(go2sky.TagDBStatement, query) } if tx.db.opts.reportParam { - span.Tag(tagDbSqlParameters, argsToString(args)) + span.Tag(go2sky.TagDBSqlParameters, argsToString(args)) } return tx.Tx.QueryRowContext(ctx, query, args...) diff --git a/zap/go.mod b/zap/go.mod index bb3ae28..7c70913 100644 --- a/zap/go.mod +++ b/zap/go.mod @@ -3,7 +3,7 @@ module github.com/SkyAPM/go2sky-plugins/zap go 1.12 require ( - github.com/SkyAPM/go2sky v1.2.0 + github.com/SkyAPM/go2sky v1.3.0 go.uber.org/zap v1.16.0 golang.org/x/net v0.0.0-20200222125558-5a598a2470a0 ) diff --git a/zap/go.sum b/zap/go.sum index edaeef8..fbced30 100644 --- a/zap/go.sum +++ b/zap/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/99designs/gqlgen v0.13.0/go.mod h1:NV130r6f4tpRWuAI+zsrSdooO/eWUv+Gyyoi3rEfXIk= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/SkyAPM/go2sky v1.2.0 h1:DTkNf16MVZ/IHC6Bj9kFIoPKodgyXTPLHYca8qMgKbw= -github.com/SkyAPM/go2sky v1.2.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= +github.com/SkyAPM/go2sky v1.3.0 h1:2Ka5RmTxV7Osm/sVIy3V/AO06etLF/dJsNN4HmR8kok= +github.com/SkyAPM/go2sky v1.3.0/go.mod h1:LzuySkt/TsQL8FMANZu4BX/6Rn0UfGu5KS/r9TwG/dc= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/agnivade/levenshtein v1.0.3/go.mod h1:4SFRZbbXWLF4MU1T9Qg0pGgH3Pjs+t6ie5efyrwRJXs= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=