2020-04-01 02:08:21 +00:00
|
|
|
package cmd
|
|
|
|
|
|
|
|
import (
|
2020-04-13 22:14:56 +00:00
|
|
|
"github.com/baez90/inetmock/internal/endpoints"
|
2020-04-01 02:08:21 +00:00
|
|
|
"github.com/baez90/inetmock/internal/plugins"
|
|
|
|
"github.com/baez90/inetmock/pkg/logging"
|
|
|
|
"github.com/baez90/inetmock/pkg/path"
|
|
|
|
"github.com/spf13/viper"
|
|
|
|
"go.uber.org/zap"
|
2020-04-11 21:29:52 +00:00
|
|
|
"os"
|
2020-04-13 22:14:56 +00:00
|
|
|
"time"
|
2020-04-01 02:08:21 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
appIsInitialized = false
|
|
|
|
)
|
|
|
|
|
|
|
|
func initApp() (err error) {
|
|
|
|
if appIsInitialized {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
appIsInitialized = true
|
|
|
|
logging.ConfigureLogging(
|
|
|
|
logging.ParseLevel(logLevel),
|
|
|
|
developmentLogs,
|
|
|
|
map[string]interface{}{"cwd": path.WorkingDirectory()},
|
|
|
|
)
|
|
|
|
logger, _ = logging.CreateLogger()
|
|
|
|
registry := plugins.Registry()
|
2020-04-13 22:14:56 +00:00
|
|
|
endpointManager = endpoints.NewEndpointManager(logger)
|
2020-04-11 21:29:52 +00:00
|
|
|
|
|
|
|
if err = rootCmd.ParseFlags(os.Args); err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2020-04-01 02:08:21 +00:00
|
|
|
if err = appConfig.ReadConfig(configFilePath); err != nil {
|
|
|
|
logger.Error(
|
|
|
|
"unrecoverable error occurred during reading the config file",
|
|
|
|
zap.Error(err),
|
|
|
|
)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
viperInst := viper.GetViper()
|
|
|
|
pluginDir := viperInst.GetString("plugins-directory")
|
2020-04-13 22:14:56 +00:00
|
|
|
pluginLoadStartTime := time.Now()
|
2020-04-01 02:08:21 +00:00
|
|
|
if err = registry.LoadPlugins(pluginDir); err != nil {
|
|
|
|
logger.Error("Failed to load plugins",
|
2020-04-11 21:29:52 +00:00
|
|
|
zap.String("pluginsDirectory", pluginDir),
|
2020-04-01 02:08:21 +00:00
|
|
|
zap.Error(err),
|
|
|
|
)
|
|
|
|
}
|
2020-04-13 22:14:56 +00:00
|
|
|
pluginLoadDuration := time.Since(pluginLoadStartTime)
|
|
|
|
logger.Info(
|
|
|
|
"loading plugins completed",
|
|
|
|
zap.Duration("pluginLoadDuration", pluginLoadDuration),
|
|
|
|
)
|
2020-04-01 02:08:21 +00:00
|
|
|
|
|
|
|
pluginsCmd.AddCommand(registry.PluginCommands()...)
|
|
|
|
|
|
|
|
return
|
|
|
|
}
|