X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/6988a0571d5d37ea0f38ee3e4066533158f608bc..95753255a17026750f5b53cc470999785e0c515f:/client/main.go?ds=sidebyside diff --git a/client/main.go b/client/main.go index a761404..ec6f895 100644 --- a/client/main.go +++ b/client/main.go @@ -4,22 +4,17 @@ import ( "context" "flag" "fmt" - hotline "github.com/jhalter/mobius" + "github.com/jhalter/mobius/hotline" "github.com/rivo/tview" "go.uber.org/zap" "go.uber.org/zap/zapcore" + "log" "os" "os/signal" + "runtime" "syscall" - "time" ) -//var defaultTrackerList = []string{ -// "hltracker.com:5498", -//} - -const connectTimeout = 3 * time.Second - func main() { _, cancelRoot := context.WithCancel(context.Background()) @@ -28,10 +23,8 @@ func main() { version := flag.Bool("version", false, "print version and exit") logLevel := flag.String("log-level", "info", "Log level") - userName := flag.String("name", "unnamed", "User name") - //srvAddr := flag.String("server", "localhost:5500", "Hostname/Port of server") - //login := flag.String("login", "guest", "Login Name") - //pass := flag.String("password", "", "Login Password") + logFile := flag.String("log-file", "", "output logs to file") + flag.Parse() if *version { @@ -50,10 +43,22 @@ func main() { TextView: tview.NewTextView(), } - cores := []zapcore.Core{ - newDebugCore(zapLvl, db), - //newStderrCore(zapLvl), + cores := []zapcore.Core{newZapCore(zapLvl, db)} + + // Add file logger if optional log-file flag was passed + if *logFile != "" { + f, err := os.OpenFile(*logFile, + os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + log.Println(err) + } + defer f.Close() + if err != nil { + panic(err) + } + cores = append(cores, newZapCore(zapLvl, f)) } + l := zap.New(zapcore.NewTee(cores...)) defer func() { _ = l.Sync() }() logger := l.Sugar() @@ -65,32 +70,22 @@ func main() { cancelRoot() }() - client := hotline.NewClient(*userName, logger) + cfgPath := defaultConfigPath() + + client := hotline.NewClient(cfgPath, logger) client.DebugBuf = db client.UI.Start() } -func newDebugCore(level zapcore.Level, db *hotline.DebugBuffer) zapcore.Core { +func newZapCore(level zapcore.Level, syncer zapcore.WriteSyncer) zapcore.Core { encoderCfg := zap.NewProductionEncoderConfig() encoderCfg.TimeKey = "timestamp" encoderCfg.EncodeTime = zapcore.ISO8601TimeEncoder return zapcore.NewCore( zapcore.NewConsoleEncoder(encoderCfg), - zapcore.Lock(db), - level, - ) -} - -func newStderrCore(level zapcore.Level) zapcore.Core { - encoderCfg := zap.NewProductionEncoderConfig() - encoderCfg.TimeKey = "timestamp" - encoderCfg.EncodeTime = zapcore.ISO8601TimeEncoder - - return zapcore.NewCore( - zapcore.NewConsoleEncoder(encoderCfg), - zapcore.Lock(os.Stderr), + zapcore.Lock(syncer), level, ) } @@ -101,3 +96,19 @@ var zapLogLevel = map[string]zapcore.Level{ "warn": zap.WarnLevel, "error": zap.ErrorLevel, } + +func defaultConfigPath() (cfgPath string) { + os := runtime.GOOS + switch os { + case "windows": + cfgPath = "mobius-client-config.yaml" + case "darwin": + cfgPath = "/usr/local/etc/mobius-client-config.yaml" + case "linux": + cfgPath = "/usr/local/etc/mobius-client-config.yaml" + default: + fmt.Printf("unsupported OS") + } + + return cfgPath +}