start implementing gw serve mux support
This commit is contained in:
67
pkg/srv/grpc/run.go
Normal file
67
pkg/srv/grpc/run.go
Normal file
@ -0,0 +1,67 @@
|
||||
package grpc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net"
|
||||
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
semconv "go.opentelemetry.io/otel/semconv/v1.27.0"
|
||||
)
|
||||
|
||||
// TODO: Implement
|
||||
func (a *appGRPCServer) runGRPCServer(spanCtx context.Context) error {
|
||||
_, span := a.tracer.Start(spanCtx, "appgrpc.init.start")
|
||||
defer span.End()
|
||||
|
||||
span.SetAttributes(
|
||||
semconv.RPCSystemGRPC,
|
||||
semconv.NetworkProtocolName("grpc"),
|
||||
semconv.ServerAddress(a.opts.Listen),
|
||||
)
|
||||
|
||||
a.shutdownFunc = a.getShutdownFunc()
|
||||
|
||||
l, err := net.Listen("tcp", a.opts.Listen)
|
||||
if err != nil {
|
||||
a.logger.Err(err).Send()
|
||||
span.RecordError(err)
|
||||
span.SetStatus(codes.Error, "failed to acquire net listener")
|
||||
return err
|
||||
}
|
||||
|
||||
span.AddEvent("network listener acquired")
|
||||
|
||||
// Launch GRPC Server
|
||||
go func() {
|
||||
if err := a.server.Serve(l); err != nil {
|
||||
a.logger.Err(err).Send()
|
||||
a.doneChan <- err
|
||||
}
|
||||
}()
|
||||
|
||||
span.AddEvent("grpc server goroutine launched")
|
||||
span.SetStatus(codes.Ok, "")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (a *appGRPCServer) getShutdownFunc() func(context.Context) error {
|
||||
return func(ctx context.Context) error {
|
||||
stoppedChan := make(chan any)
|
||||
|
||||
go func() {
|
||||
a.server.GracefulStop()
|
||||
stoppedChan <- nil
|
||||
}()
|
||||
|
||||
select {
|
||||
case <-stoppedChan:
|
||||
a.logger.Warn().Msg("GRPC server shut down gracefully")
|
||||
return nil
|
||||
case <-ctx.Done():
|
||||
a.logger.Warn().Msg("GRPC server shut down hard")
|
||||
a.server.Stop()
|
||||
return ctx.Err()
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user