improve tracing feture for package glog/gdb/gredis

This commit is contained in:
jianchenma
2021-01-26 01:19:55 +08:00
parent 99dd889ff0
commit 4c6d9f5eff
17 changed files with 186 additions and 95 deletions

View File

@ -2,9 +2,8 @@
# MySQL.
[database]
[database.logger]
Level = "all"
Stdout = true
CtxKeys = ["Trace-Id"]
level = "all"
stdout = true
[database.default]
link = "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
debug = true

View File

@ -8,9 +8,30 @@ import (
sdkTrace "go.opentelemetry.io/otel/sdk/trace"
)
type tracingApi struct{}
func (api *tracingApi) Insert(r *ghttp.Request) {
result, err := g.Table("user").Ctx(r.Context()).Insert(g.Map{
"name": r.GetString("name"),
})
if err != nil {
r.Response.WriteExit(gerror.Current(err))
}
id, _ := result.LastInsertId()
r.Response.Write("id:", id)
}
func (api *tracingApi) Query(r *ghttp.Request) {
one, err := g.Table("user").Ctx(r.Context()).FindOne(r.GetInt("id"))
if err != nil {
r.Response.WriteExit(gerror.Current(err))
}
r.Response.Write("user:", one)
}
const (
JaegerEndpoint = "http://localhost:14268/api/traces"
ServiceName = "TracingHttpServerWithDatabase"
ServiceName = "TracingHttpServerWithDB"
)
// initTracer creates a new trace provider instance and registers it as global trace provider.
@ -36,29 +57,8 @@ func main() {
s := g.Server()
s.Group("/", func(group *ghttp.RouterGroup) {
group.Middleware(ghttp.MiddlewareServerTracing)
group.ALL("/user", new(dbTracingApi))
group.ALL("/user", new(tracingApi))
})
s.SetPort(8199)
s.Run()
}
type dbTracingApi struct{}
func (api *dbTracingApi) Insert(r *ghttp.Request) {
result, err := g.Table("user").Ctx(r.Context()).Insert(g.Map{
"name": r.GetString("name"),
})
if err != nil {
r.Response.WriteExit(gerror.Current(err))
}
id, _ := result.LastInsertId()
r.Response.Write("id:", id)
}
func (api *dbTracingApi) Query(r *ghttp.Request) {
one, err := g.Table("user").Ctx(r.Context()).FindOne(r.GetInt("id"))
if err != nil {
r.Response.WriteExit(gerror.Current(err))
}
r.Response.Write("user:", one)
}

View File

@ -1,8 +1,8 @@
# Redis.
[redis]
default = "127.0.0.1:6379,0?tracing=1"
cache = "127.0.0.1:6379,1?tracing=1"
default = "127.0.0.1:6379,0"
cache = "127.0.0.1:6379,1"

View File

@ -8,11 +8,31 @@ import (
sdkTrace "go.opentelemetry.io/otel/sdk/trace"
)
type tracingApi struct{}
const (
JaegerEndpoint = "http://localhost:14268/api/traces"
ServiceName = "TracingHttpServerWithRedis"
)
func (api *tracingApi) Set(r *ghttp.Request) {
_, err := g.Redis().Ctx(r.Context()).Do("SET", r.GetString("key"), r.GetString("value"))
if err != nil {
r.Response.WriteExit(gerror.Current(err))
}
r.Response.Write("ok")
}
func (api *tracingApi) Get(r *ghttp.Request) {
value, err := g.Redis().Ctx(r.Context()).DoVar(
"GET", r.GetString("key"),
)
if err != nil {
r.Response.WriteExit(gerror.Current(err))
}
r.Response.Write(value.String())
}
// initTracer creates a new trace provider instance and registers it as global trace provider.
func initTracer() func() {
// Create and install Jaeger export pipeline.
@ -36,28 +56,8 @@ func main() {
s := g.Server()
s.Group("/", func(group *ghttp.RouterGroup) {
group.Middleware(ghttp.MiddlewareServerTracing)
group.ALL("/redis", new(redisTracingApi))
group.ALL("/redis", new(tracingApi))
})
s.SetPort(8199)
s.Run()
}
type redisTracingApi struct{}
func (api *redisTracingApi) Set(r *ghttp.Request) {
_, err := g.Redis().Ctx(r.Context()).Do("SET", r.GetString("key"), r.GetString("value"))
if err != nil {
r.Response.WriteExit(gerror.Current(err))
}
r.Response.Write("ok")
}
func (api *redisTracingApi) Get(r *ghttp.Request) {
value, err := g.Redis().Ctx(r.Context()).DoVar(
"GET", r.GetString("key"),
)
if err != nil {
r.Response.WriteExit(gerror.Current(err))
}
r.Response.Write(value.String())
}

View File

@ -0,0 +1,19 @@
# MySQL.
[database]
[database.logger]
level = "all"
stdout = true
[database.default]
link = "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
debug = true
# Redis.
[redis]
default = "127.0.0.1:6379,0"
cache = "127.0.0.1:6379,1"

View File

@ -0,0 +1,71 @@
package main
import (
"github.com/gogf/gcache-adapter/adapter"
"github.com/gogf/gf/errors/gerror"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/net/ghttp"
"go.opentelemetry.io/otel/exporters/trace/jaeger"
sdkTrace "go.opentelemetry.io/otel/sdk/trace"
"time"
)
type tracingApi struct{}
const (
JaegerEndpoint = "http://localhost:14268/api/traces"
ServiceName = "TracingHttpServerWithDBRedisLog"
)
// initTracer creates a new trace provider instance and registers it as global trace provider.
func initTracer() func() {
// Create and install Jaeger export pipeline.
flush, err := jaeger.InstallNewPipeline(
jaeger.WithCollectorEndpoint(JaegerEndpoint),
jaeger.WithProcess(jaeger.Process{
ServiceName: ServiceName,
}),
jaeger.WithSDK(&sdkTrace.Config{DefaultSampler: sdkTrace.AlwaysSample()}),
)
if err != nil {
g.Log().Fatal(err)
}
return flush
}
func (api *tracingApi) Insert(r *ghttp.Request) {
result, err := g.Table("user").Ctx(r.Context()).Insert(g.Map{
"name": r.GetString("name"),
})
if err != nil {
r.Response.WriteExit(gerror.Current(err))
}
id, _ := result.LastInsertId()
r.Response.Write("id:", id)
}
func (api *tracingApi) Query(r *ghttp.Request) {
one, err := g.Table("user").
Ctx(r.Context()).
Cache(5 * time.Second).
FindOne(r.GetInt("id"))
if err != nil {
r.Response.WriteExit(gerror.Current(err))
}
r.Response.Write("user:", one)
}
func main() {
flush := initTracer()
defer flush()
g.DB().GetCache().SetAdapter(adapter.NewRedis(g.Redis()))
s := g.Server()
s.Group("/", func(group *ghttp.RouterGroup) {
group.Middleware(ghttp.MiddlewareServerTracing)
group.ALL("/user", new(tracingApi))
})
s.SetPort(8199)
s.Run()
}