Files
gf/example/trace/provider/internal/provider.go

58 lines
1.7 KiB
Go

// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
//
// This Source Code Form is subject to the terms of the MIT License.
// If a copy of the MIT was not distributed with this file,
// You can obtain one at https://github.com/gogf/gf.
package internal
import (
"context"
"time"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/sdk/trace"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/gipv4"
)
// InitTracer initializes and registers `otlpgrpc` or `otlphttp` to global TracerProvider.
func InitTracer(opts ...trace.TracerProviderOption) (func(ctx context.Context), error) {
tracerProvider := trace.NewTracerProvider(opts...)
// Set the global propagator to traceContext (not set by default).
otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}))
otel.SetTracerProvider(tracerProvider)
return func(ctx context.Context) {
ctx, cancel := context.WithTimeout(ctx, time.Second)
defer cancel()
// Shutdown waits for exported trace spans to be uploaded.
if err := tracerProvider.Shutdown(ctx); err != nil {
g.Log().Errorf(ctx, "Shutdown tracerProvider failed err:%+v", err)
} else {
g.Log().Debug(ctx, "Shutdown tracerProvider success")
}
}, nil
}
// GetLocalIP returns the IP address of the server.
func GetLocalIP() (string, error) {
var intranetIPArray, err = gipv4.GetIntranetIpArray()
if err != nil {
return "", err
}
if len(intranetIPArray) == 0 {
if intranetIPArray, err = gipv4.GetIpArray(); err != nil {
return "", err
}
}
var hostIP = "NoHostIpFound"
if len(intranetIPArray) > 0 {
hostIP = intranetIPArray[0]
}
return hostIP, nil
}