func main() { defer func() { if exc := recover(); exc != nil { utils.Logger.Fatal(exc) } }() arguments, err := docopt.Parse(docoptOptions, nil, true, version, false) if err != nil { panic(err) } if arguments["--debug"].(bool) { utils.EnableLogging() } else { utils.DisableLogging() } utils.Logger.WithField("arguments", arguments).Info("Parsed arguments") defaultEnv := environments.MakeDefaultEnvironment() cmdLineEnv := new(environments.Environment) configEnv, err := defaultEnv.ReadFromConfig() if err != nil { utils.Logger.WithField("error", err).Warn("Cannot read config file") } argShell := arguments["--shell"] if argShell != nil { cmdLineEnv.Shell = argShell.(string) } argHistFile := arguments["--histfile"] if argHistFile != nil { cmdLineEnv.HistFile = argHistFile.(string) } argHistTimeFormat := arguments["--histtimeformat"] if argHistTimeFormat != nil { cmdLineEnv.HistTimeFormat = argHistTimeFormat.(string) } argAppDir := arguments["--appdir"] if argAppDir != nil { cmdLineEnv.AppDir = argAppDir.(string) } argTmpDir := arguments["--tmpdir"] if argTmpDir != nil { cmdLineEnv.TmpDir = argTmpDir.(string) } utils.Logger.WithFields(logrus.Fields{ "default": defaultEnv, "config": configEnv, "cmdLineEnv": cmdLineEnv, }).Debug("Environments") env := environments.MergeEnvironments(defaultEnv, configEnv, cmdLineEnv) utils.Logger.WithField("result env", env).Debug("Ready to start") utils.Logger.WithFields(logrus.Fields{ "error": os.MkdirAll(env.TracesDir, 0777), }).Info("Create traces dir") utils.Logger.WithFields(logrus.Fields{ "error": os.MkdirAll(env.BookmarksDir, 0777), }).Info("Create bookmarks dir") utils.Logger.WithFields(logrus.Fields{ "error": os.MkdirAll(env.TmpDir, 0777), }).Info("Create create temporary dir") var exec executor switch { case arguments["t"].(bool): utils.Logger.Info("Execute command 'tee'") exec = executeTee case arguments["s"].(bool): utils.Logger.Info("Execute command 'show'") exec = executeShow case arguments["l"].(bool): utils.Logger.Info("Execute command 'listTrace'") exec = executeListTrace case arguments["b"].(bool): utils.Logger.Info("Execute command 'listTrace'") exec = executeListTrace case arguments["e"].(bool): utils.Logger.Info("Execute command 'execute'") exec = executeExec case arguments["lb"].(bool): utils.Logger.Info("Execute command 'listBookmarks'") exec = executeListBookmarks case arguments["rb"].(bool): utils.Logger.Info("Execute command 'removeBookmarks'") exec = executeRemoveBookmarks case arguments["gt"].(bool) || arguments["gb"].(bool): utils.Logger.Info("Execute command 'gc'") exec = executeGC case arguments["al"].(bool): utils.Logger.Info("Execute command 'al'") exec = executeAl case arguments["ad"].(bool): utils.Logger.Info("Execute command 'ad'") exec = executeAd case arguments["ar"].(bool): utils.Logger.Info("Execute command 'ar'") exec = executeAr case arguments["at"].(bool): utils.Logger.Info("Execute command 'at'") exec = executeAt default: utils.Logger.Panic("Unknown command. Please be more precise") return } exec(arguments, env) }