add grpc support

This commit is contained in:
2025-03-07 11:16:32 -05:00
parent 81676c5404
commit 5aa5dda111
7 changed files with 205 additions and 15 deletions

View File

@ -3,27 +3,54 @@ package grpc
import (
"context"
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
"github.com/rs/zerolog"
"go.opentelemetry.io/otel/codes"
"go.opentelemetry.io/otel/metric"
"go.opentelemetry.io/otel/trace"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
"google.golang.org/grpc"
appotel "gitea.libretechconsulting.com/rmcguire/go-app/pkg/otel"
"gitea.libretechconsulting.com/rmcguire/go-app/pkg/srv/grpc/opts"
)
type AppGRPCServer struct {
ctx context.Context
tracer trace.Tracer
meter metric.Meter
type appGRPCServer struct {
ctx context.Context
tracer trace.Tracer
meter metric.Meter
opts *opts.GRPCOpts
serverOpts []grpc.ServerOption
logger *zerolog.Logger
server *grpc.Server
}
func InitGRPCServer(ctx context.Context, opts *opts.GRPCOpts) {
server := grpc.NewServer()
stats := otelgrpc.NewServerHandler(otelgrpc.WithTracerProvider(sdktrace.T))
for _, service := range opts.Services {
server.RegisterService(service.Type, service.Service)
// TODO: This probably needs to pass back an error chan and a shutdown
// func like the http server does
func InitGRPCServer(ctx context.Context, opts *opts.GRPCOpts) error {
appGRPC := &appGRPCServer{
ctx: ctx,
tracer: appotel.GetTracer(ctx, "grpc"),
meter: appotel.GetMeter(ctx, "grpc"),
opts: opts,
serverOpts: make([]grpc.ServerOption, 0),
logger: zerolog.Ctx(ctx),
}
ctx, span := appGRPC.tracer.Start(ctx, "appgrpc.init")
defer span.End()
if err := appGRPC.prepGRPCServer(ctx); err != nil {
span.RecordError(err)
span.SetStatus(codes.Error, "failed to prepare GRPC Server")
return err
}
err := appGRPC.runGRPCServer(ctx)
if err != nil {
span.RecordError(err)
span.SetStatus(codes.Error, "failed to start GRPC Server")
return err
}
span.SetStatus(codes.Ok, "")
return nil
}