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  }