api/internal/cmd/serve.go

55 lines
1.3 KiB
Go
Raw Normal View History

package cmd
import (
"github.com/baez90/inetmock/internal/endpoints"
"github.com/baez90/inetmock/pkg/config"
"github.com/spf13/cobra"
"go.uber.org/zap"
"os"
"os/signal"
"strings"
"syscall"
)
var (
endpointManager endpoints.EndpointManager
serveCmd = &cobra.Command{
Use: "serve",
Short: "Starts the INetMock server",
Long: ``,
Run: startINetMock,
}
)
func startINetMock(_ *cobra.Command, _ []string) {
endpointManager = endpoints.NewEndpointManager(logger)
cfg := config.Instance()
for endpointName, endpointHandler := range cfg.EndpointConfigs() {
handlerSubConfig := cfg.Viper().Sub(strings.Join([]string{config.EndpointsKey, endpointName, config.OptionsKey}, "."))
endpointHandler.Options = handlerSubConfig
if err := 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),
)
}
}
endpointManager.StartEndpoints()
signalChannel := make(chan os.Signal, 1)
signal.Notify(signalChannel, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
// block until canceled
s := <-signalChannel
logger.Info(
"got signal to quit",
zap.String("signal", s.String()),
)
endpointManager.ShutdownEndpoints()
}