github.com/NpoolPlatform/chain-middleware@v0.0.0-20240228100535-eb1bcf896eb9/cmd/chain-middleware/run.go (about) 1 package main 2 3 import ( 4 "context" 5 6 "github.com/NpoolPlatform/chain-middleware/api" 7 "github.com/NpoolPlatform/chain-middleware/pkg/db" 8 9 apicli "github.com/NpoolPlatform/basal-middleware/pkg/client/api" 10 "github.com/NpoolPlatform/chain-middleware/pkg/currency" 11 "github.com/NpoolPlatform/chain-middleware/pkg/migrator" 12 "github.com/NpoolPlatform/go-service-framework/pkg/action" 13 "github.com/NpoolPlatform/go-service-framework/pkg/logger" 14 "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" 15 cli "github.com/urfave/cli/v2" 16 17 "google.golang.org/grpc" 18 ) 19 20 var runCmd = &cli.Command{ 21 Name: "run", 22 Aliases: []string{"s"}, 23 Usage: "Run the daemon", 24 Action: func(c *cli.Context) error { 25 err := action.Run( 26 c.Context, 27 run, 28 rpcRegister, 29 rpcGatewayRegister, 30 watch, 31 ) 32 33 currency.Shutdown(c.Context) 34 35 return err 36 }, 37 } 38 39 func run(ctx context.Context) error { 40 if err := migrator.Migrate(ctx); err != nil { 41 return err 42 } 43 if err := db.Init(); err != nil { 44 return err 45 } 46 return nil 47 } 48 49 func shutdown(ctx context.Context) { 50 <-ctx.Done() 51 logger.Sugar().Infow( 52 "Watch", 53 "State", "Done", 54 "Error", ctx.Err(), 55 ) 56 } 57 58 func _watch(ctx context.Context, cancel context.CancelFunc, w func(ctx context.Context)) { 59 defer func() { 60 if err := recover(); err != nil { 61 logger.Sugar().Errorw( 62 "Watch", 63 "State", "Panic", 64 "Error", err, 65 ) 66 cancel() 67 } 68 }() 69 w(ctx) 70 } 71 72 func watch(ctx context.Context, cancel context.CancelFunc) error { 73 go shutdown(ctx) 74 go _watch(ctx, cancel, currency.Watch) 75 return nil 76 } 77 78 func rpcRegister(server grpc.ServiceRegistrar) error { 79 api.Register(server) 80 81 apicli.RegisterGRPC(server) 82 83 return nil 84 } 85 86 func rpcGatewayRegister(mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) error { 87 err := api.RegisterGateway(mux, endpoint, opts) 88 if err != nil { 89 return err 90 } 91 return nil 92 }