| Total Lines | 54 |
| Duplicated Lines | 0 % |
| Changes | 0 | ||
| 1 | package main |
||
| 2 | |||
| 3 | import ( |
||
| 4 | "context" |
||
| 5 | "log" |
||
| 6 | "log/slog" |
||
| 7 | "os" |
||
| 8 | "os/signal" |
||
| 9 | "time" |
||
| 10 | |||
| 11 | v2 "github.com/memnix/memnix-rest/app/v2" |
||
| 12 | "github.com/memnix/memnix-rest/cmd/v2/config" |
||
| 13 | "github.com/memnix/memnix-rest/pkg/logger" |
||
| 14 | ) |
||
| 15 | |||
| 16 | func main() { |
||
| 17 | configPath := config.GetConfigPath() |
||
| 18 | |||
| 19 | cfg, err := config.LoadConfig(configPath) |
||
| 20 | if err != nil { |
||
| 21 | log.Fatalf("❌ Error loading config: %s", err.Error()) |
||
| 22 | } |
||
| 23 | |||
| 24 | logger.NewLogger().SetLogLevel(slog.LevelInfo) |
||
| 25 | |||
| 26 | setup(cfg) |
||
| 27 | |||
| 28 | e := v2.CreateEchoInstance(cfg.Server) |
||
| 29 | |||
| 30 | slog.Info("starting server 🚀", slog.String("version", cfg.Server.AppVersion)) |
||
| 31 | |||
| 32 | ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt) |
||
| 33 | defer stop() |
||
| 34 | |||
| 35 | go func() { |
||
| 36 | if err = e.Start(); err != nil { |
||
| 37 | slog.Error("error starting server", slog.Any("error", err)) |
||
| 38 | os.Exit(1) |
||
| 39 | } |
||
| 40 | }() |
||
| 41 | |||
| 42 | const shutdownTimeout = 10 * time.Second |
||
| 43 | |||
| 44 | <-ctx.Done() |
||
| 45 | _, cancel := context.WithTimeout(context.Background(), shutdownTimeout) |
||
| 46 | defer cancel() |
||
| 47 | |||
| 48 | slog.Info("shutting down server") |
||
| 49 | |||
| 50 | if err = shutdown(); err != nil { |
||
| 51 | slog.Error("error shutting down server", slog.Any("error", err)) |
||
| 52 | } |
||
| 53 | |||
| 54 | slog.Info("server stopped") |
||
| 55 | } |
||
| 56 |