mirror of
https://gitee.com/johng/gf
synced 2026-06-07 10:22:11 +08:00
improve tracing feture for package glog/gdb/gredis
This commit is contained in:
@ -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
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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"
|
||||
|
||||
|
||||
|
||||
|
||||
@ -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())
|
||||
}
|
||||
|
||||
19
.example/net/gtrace/4.http+db+redis+log/config.toml
Normal file
19
.example/net/gtrace/4.http+db+redis+log/config.toml
Normal 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"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
71
.example/net/gtrace/4.http+db+redis+log/main.go
Normal file
71
.example/net/gtrace/4.http+db+redis+log/main.go
Normal 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()
|
||||
}
|
||||
Reference in New Issue
Block a user