- rand.Seed(time.Now().UnixNano())
-
- ctx, cancelRoot := context.WithCancel(context.Background())
+ ctx, cancel := context.WithCancel(context.Background())
+
+ // TODO: implement graceful shutdown by closing context
+ // c := make(chan os.Signal, 1)
+ // signal.Notify(c, os.Interrupt)
+ // defer func() {
+ // signal.Stop(c)
+ // cancel()
+ // }()
+ // go func() {
+ // select {
+ // case <-c:
+ // cancel()
+ // case <-ctx.Done():
+ // }
+ // }()
basePort := flag.Int("bind", defaultPort, "Bind address and port")
statsPort := flag.String("stats-port", "", "Enable stats HTTP endpoint on address and port")
configDir := flag.String("config", defaultConfigPath(), "Path to config root")
version := flag.Bool("version", false, "print version and exit")
logLevel := flag.String("log-level", "info", "Log level")
basePort := flag.Int("bind", defaultPort, "Bind address and port")
statsPort := flag.String("stats-port", "", "Enable stats HTTP endpoint on address and port")
configDir := flag.String("config", defaultConfigPath(), "Path to config root")
version := flag.Bool("version", false, "print version and exit")
logLevel := flag.String("log-level", "info", "Log level")
} else {
logger.Infow("Existing config dir found. Skipping initialization.")
}
}
if _, err := os.Stat(*configDir); os.IsNotExist(err) {
} else {
logger.Infow("Existing config dir found. Skipping initialization.")
}
}
if _, err := os.Stat(*configDir); os.IsNotExist(err) {
- logger.Fatalw("Configuration directory not found", "path", configDir)
+ logger.Fatalw("Configuration directory not found. Correct the path or re-run with -init to generate initial config.", "path", configDir)
- srv, err := hotline.NewServer(*configDir, "", *basePort, logger, &hotline.OSFileStore{})
+ srv, err := hotline.NewServer(*configDir, *basePort, logger, &hotline.OSFileStore{})
+func newLogFileCore(path string, level zapcore.Level) zapcore.Core {
+ encoderCfg := zap.NewProductionEncoderConfig()
+ encoderCfg.TimeKey = "timestamp"
+ encoderCfg.EncodeTime = zapcore.ISO8601TimeEncoder
+ writer := zapcore.AddSync(&lumberjack.Logger{
+ Filename: path,
+ MaxSize: 100, // MB
+ MaxBackups: 3,
+ MaxAge: 365, // days
+ })
+
+ return zapcore.NewCore(
+ zapcore.NewConsoleEncoder(encoderCfg),
+ writer,
+ level,
+ )
+}
+
case "darwin":
if _, err := os.Stat("/usr/local/var/mobius/config/"); err == nil {
cfgPath = "/usr/local/var/mobius/config/"
case "darwin":
if _, err := os.Stat("/usr/local/var/mobius/config/"); err == nil {
cfgPath = "/usr/local/var/mobius/config/"