MCPcopy
hub / github.com/PatchMon/PatchMon / main

Function main

server-source-code/cmd/server/main.go:29–227  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

27)
28
29func main() {
30 cfg, err := config.Load()
31 if err != nil {
32 _, _ = fmt.Fprintf(os.Stderr, "config: %v\n", err)
33 os.Exit(1)
34 }
35
36 // Bootstrap logger (env-only) for migrations and pre-DB errors
37 bootstrapLog := logger.New(logger.Config{
38 Enabled: cfg.EnableLogging,
39 Level: cfg.LogLevel,
40 JSONFormat: cfg.Env == "production",
41 })
42 bootstrapSlog := bootstrapLog.With("version", cfg.Version, "port", cfg.Port)
43
44 ctx := context.Background()
45
46 if err := migrate.Run(cfg.DatabaseURL, bootstrapSlog); err != nil {
47 _, _ = fmt.Fprintf(os.Stderr, "[fatal] migrations failed: %v\n", err)
48 bootstrapSlog.Error("migrations failed", "error", err)
49 os.Exit(1)
50 }
51
52 db, err := database.NewDB(ctx, cfg)
53 if err != nil {
54 _, _ = fmt.Fprintf(os.Stderr, "[fatal] database: %v\n", err)
55 bootstrapSlog.Error("database", "error", err)
56 os.Exit(1)
57 }
58 defer db.Close()
59
60 // Resolve config (env -> DB -> default) and create real logger
61 settingsStore := store.NewSettingsStore(db)
62 settings, _ := settingsStore.GetFirst(ctx)
63 resolved := config.ResolveConfig(ctx, cfg, settings)
64
65 log := logger.New(logger.Config{
66 Enabled: resolved.EnableLogging,
67 Level: resolved.LogLevel,
68 JSONFormat: cfg.Env == "production",
69 })
70 slog := log.With("version", cfg.Version, "port", cfg.Port)
71
72 slog.Info("database connected")
73
74 warnOidcSuperadminLockoutRisk(ctx, cfg, settingsStore, store.NewUsersStore(db), slog)
75 warnDBPoolUndersized(ctx, cfg, store.NewHostsStore(db), slog)
76
77 rdb := redis.NewClient()
78 if err := redis.Ping(ctx, rdb); err != nil {
79 slog.Error("redis", "error", err)
80 os.Exit(1)
81 }
82 defer func() { _ = redis.Close(rdb) }()
83 slog.Info("redis connected")
84
85 var ctxRegistry *hostctx.Registry
86 var poolCache *hostctx.PoolCache

Callers

nothing calls this directly

Calls 8

CloseMethod · 0.95
GetFirstMethod · 0.95
CloseMethod · 0.95
warnDBPoolUndersizedFunction · 0.85
ErrorMethod · 0.80
PingMethod · 0.45
StopMethod · 0.45

Tested by

no test coverage detected