parent
1e2868c77c
commit
12410de8d6
@ -0,0 +1,72 @@ |
|||||||
|
package es7 |
||||||
|
|
||||||
|
import ( |
||||||
|
"bytes" |
||||||
|
"context" |
||||||
|
"fmt" |
||||||
|
"gitea.drugeyes.vip/pharnexbase/utils/glog/v1" |
||||||
|
"github.com/elastic/go-elasticsearch/v7/estransport" |
||||||
|
"go.opentelemetry.io/otel" |
||||||
|
"go.opentelemetry.io/otel/attribute" |
||||||
|
semconv "go.opentelemetry.io/otel/semconv/v1.4.0" |
||||||
|
"go.opentelemetry.io/otel/trace" |
||||||
|
"net/http" |
||||||
|
"time" |
||||||
|
) |
||||||
|
|
||||||
|
var _ estransport.Logger = (*Logger)(nil) |
||||||
|
|
||||||
|
type Logger struct { |
||||||
|
EnableRequestBody bool |
||||||
|
EnableResponseBody bool |
||||||
|
} |
||||||
|
|
||||||
|
func (l *Logger) LogRoundTrip(request *http.Request, response *http.Response, err error, time time.Time, duration time.Duration) error { |
||||||
|
ctx := request.Context() |
||||||
|
index := fmt.Sprintf("%s?%s", request.URL.Path, request.URL.RawQuery) |
||||||
|
method := request.Method |
||||||
|
if l.RequestBodyEnabled() && request != nil && request.Body != nil && request.Body != http.NoBody { |
||||||
|
var buf bytes.Buffer |
||||||
|
if request.GetBody != nil { |
||||||
|
b, _ := request.GetBody() |
||||||
|
_, _ = buf.ReadFrom(b) |
||||||
|
} else { |
||||||
|
_, _ = buf.ReadFrom(request.Body) |
||||||
|
} |
||||||
|
glog.Glog.WithContext(ctx).Info("url:", method, index, "request:", buf.String()) |
||||||
|
} |
||||||
|
|
||||||
|
if l.ResponseBodyEnabled() && response != nil && response.Body != nil && response.Body != http.NoBody { |
||||||
|
defer response.Body.Close() |
||||||
|
var buf bytes.Buffer |
||||||
|
_, _ = buf.ReadFrom(response.Body) |
||||||
|
glog.Glog.WithContext(ctx).Info("response:", buf.String()) |
||||||
|
} |
||||||
|
|
||||||
|
l.Tracer(ctx, time, method, index) |
||||||
|
return nil |
||||||
|
} |
||||||
|
|
||||||
|
func (l *Logger) Tracer(ctx context.Context, begin time.Time, method, index string) { |
||||||
|
tracer := otel.Tracer("elasticsearch-v7.10") |
||||||
|
kind := trace.SpanKindInternal |
||||||
|
|
||||||
|
ctx, span := tracer.Start(ctx, |
||||||
|
index, |
||||||
|
trace.WithSpanKind(kind), |
||||||
|
trace.WithTimestamp(begin), |
||||||
|
) |
||||||
|
var attrs []attribute.KeyValue |
||||||
|
attrs = append(attrs, semconv.DBSystemElasticsearch) |
||||||
|
attrs = append(attrs, attribute.Key("es.index").String(method+" "+index)) |
||||||
|
span.SetAttributes(attrs...) |
||||||
|
span.End(trace.WithTimestamp(time.Now())) |
||||||
|
} |
||||||
|
|
||||||
|
func (l *Logger) RequestBodyEnabled() bool { |
||||||
|
return l.EnableRequestBody |
||||||
|
} |
||||||
|
|
||||||
|
func (l *Logger) ResponseBodyEnabled() bool { |
||||||
|
return l.EnableResponseBody |
||||||
|
} |
Loading…
Reference in new issue