55 lines
1.3 KiB
Go
55 lines
1.3 KiB
Go
|
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()
|
||
|
}
|