|
|
|
@ -2,14 +2,20 @@ package data |
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"context" |
|
|
|
|
"fmt" |
|
|
|
|
|
|
|
|
|
"github.com/go-kratos/kratos/examples/blog/internal/conf" |
|
|
|
|
"github.com/go-kratos/kratos/examples/blog/internal/data/ent" |
|
|
|
|
|
|
|
|
|
"entgo.io/ent/dialect" |
|
|
|
|
"entgo.io/ent/dialect/sql" |
|
|
|
|
"github.com/go-kratos/kratos/v2/log" |
|
|
|
|
"github.com/go-redis/redis/extra/redisotel" |
|
|
|
|
"github.com/go-redis/redis/v8" |
|
|
|
|
"github.com/google/wire" |
|
|
|
|
|
|
|
|
|
"go.opentelemetry.io/otel" |
|
|
|
|
"go.opentelemetry.io/otel/attribute" |
|
|
|
|
"go.opentelemetry.io/otel/trace" |
|
|
|
|
// init mysql driver
|
|
|
|
|
_ "github.com/go-sql-driver/mysql" |
|
|
|
|
) |
|
|
|
@ -26,10 +32,24 @@ type Data struct { |
|
|
|
|
// NewData .
|
|
|
|
|
func NewData(conf *conf.Data, logger log.Logger) (*Data, func(), error) { |
|
|
|
|
log := log.NewHelper(logger) |
|
|
|
|
client, err := ent.Open( |
|
|
|
|
drv, err := sql.Open( |
|
|
|
|
conf.Database.Driver, |
|
|
|
|
conf.Database.Source, |
|
|
|
|
) |
|
|
|
|
sqlDrv := dialect.DebugWithContext(drv, func(ctx context.Context, i ...interface{}) { |
|
|
|
|
log.WithContext(ctx).Info(i...) |
|
|
|
|
tracer := otel.Tracer("ent.") |
|
|
|
|
kind := trace.SpanKindServer |
|
|
|
|
_, span := tracer.Start(ctx, |
|
|
|
|
"Query", |
|
|
|
|
trace.WithAttributes( |
|
|
|
|
attribute.String("sql", fmt.Sprint(i...)), |
|
|
|
|
), |
|
|
|
|
trace.WithSpanKind(kind), |
|
|
|
|
) |
|
|
|
|
span.End() |
|
|
|
|
}) |
|
|
|
|
client := ent.NewClient(ent.Driver(sqlDrv)) |
|
|
|
|
if err != nil { |
|
|
|
|
log.Errorf("failed opening connection to sqlite: %v", err) |
|
|
|
|
return nil, nil, err |
|
|
|
|