in src/product-catalog/main.go [114:174]
func main() {
tp := initTracerProvider()
defer func() {
if err := tp.Shutdown(context.Background()); err != nil {
log.Fatalf("Tracer Provider Shutdown: %v", err)
}
log.Println("Shutdown tracer provider")
}()
mp := initMeterProvider()
defer func() {
if err := mp.Shutdown(context.Background()); err != nil {
log.Fatalf("Error shutting down meter provider: %v", err)
}
log.Println("Shutdown meter provider")
}()
openfeature.AddHooks(otelhooks.NewTracesHook())
err := openfeature.SetProvider(flagd.NewProvider())
if err != nil {
log.Fatal(err)
}
err = runtime.Start(runtime.WithMinimumReadMemStatsInterval(time.Second))
if err != nil {
log.Fatal(err)
}
svc := &productCatalog{}
var port string
mustMapEnv(&port, "PRODUCT_CATALOG_PORT")
log.Infof("Product Catalog gRPC server started on port: %s", port)
ln, err := net.Listen("tcp", fmt.Sprintf(":%s", port))
if err != nil {
log.Fatalf("TCP Listen: %v", err)
}
srv := grpc.NewServer(
grpc.StatsHandler(otelgrpc.NewServerHandler()),
)
reflection.Register(srv)
pb.RegisterProductCatalogServiceServer(srv, svc)
healthpb.RegisterHealthServer(srv, svc)
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM, syscall.SIGKILL)
defer cancel()
go func() {
if err := srv.Serve(ln); err != nil {
log.Fatalf("Failed to serve gRPC server, err: %v", err)
}
}()
<-ctx.Done()
srv.GracefulStop()
log.Println("Product Catalog gRPC server stopped")
}