api/internal/cmd/serve.go

55 lines
1.3 KiB
Go
Raw Normal View History

package cmd
import (
"strings"
"github.com/spf13/cobra"
"gitlab.com/inetmock/inetmock/internal/rpc"
"gitlab.com/inetmock/inetmock/pkg/config"
"go.uber.org/zap"
)
var (
serveCmd = &cobra.Command{
Use: "serve",
Short: "Starts the INetMock server",
Long: ``,
Run: startINetMock,
}
)
func startINetMock(_ *cobra.Command, _ []string) {
rpcAPI := rpc.NewINetMockAPI(server)
logger := server.Logger().Named("inetmock").With(zap.String("command", "serve"))
for endpointName, endpointHandler := range server.Config().EndpointConfigs() {
handlerSubConfig := server.Config().Viper().Sub(strings.Join([]string{config.EndpointsKey, endpointName, config.OptionsKey}, "."))
endpointHandler.Options = handlerSubConfig
if err := server.EndpointManager().CreateEndpoint(endpointName, endpointHandler); err != nil {
logger.Warn(
"error occurred while creating endpoint",
zap.String("endpointName", endpointName),
zap.String("handlerName", endpointHandler.Handler),
zap.Error(err),
)
}
}
server.EndpointManager().StartEndpoints()
if err := rpcAPI.StartServer(); err != nil {
logger.Error(
"failed to start gRPC API",
zap.Error(err),
)
}
<-server.Context().Done()
logger.Info(
"App context canceled - shutting down",
)
rpcAPI.StopServer()
server.EndpointManager().ShutdownEndpoints()
}