github.com/vseinstrumentiru/lego@v1.0.2/internal/lego/transport/grpc/runner.go (about) 1 package grpc 2 3 import ( 4 "emperror.dev/emperror" 5 appkitrun "github.com/sagikazarmark/appkit/run" 6 lego2 "github.com/vseinstrumentiru/lego/internal/lego" 7 "go.opencensus.io/plugin/ocgrpc" 8 "go.opencensus.io/trace" 9 "google.golang.org/grpc" 10 "io" 11 "logur.dev/logur" 12 "strconv" 13 ) 14 15 func Run(p lego2.Process, config Config) (*grpc.Server, io.Closer) { 16 const name = "grpc" 17 18 logger := logur.WithField(p.Log(), "server", name) 19 20 server := grpc.NewServer(grpc.StatsHandler(&ocgrpc.ServerHandler{ 21 StartOptions: trace.StartOptions{ 22 Sampler: trace.AlwaysSample(), 23 SpanKind: trace.SpanKindServer, 24 }, 25 IsPublicEndpoint: config.IsPublic, 26 })) 27 28 addr := ":" + strconv.Itoa(config.Port) 29 logger.Info("listening on address", map[string]interface{}{"address": addr}) 30 31 grpcLn, err := p.Listen("tcp", addr) 32 emperror.Panic(err) 33 34 p.Background(appkitrun.LogServe(logger)(appkitrun.GRPCServe(server, grpcLn))) 35 36 return server, lego2.CloseFn(func() error { 37 server.Stop() 38 return nil 39 }) 40 }