package main import ( "log/slog" "orbits-server/internal/api" "orbits-server/internal/database" "orbits-server/internal/utility" "os" ) func main() { // grab the environment variables from the runtime environment // unfortunately since its before we configure the loglevel, we cannot use slog logging in those functions env := utility.GrabEnvironment() // configure the logger so we have nice json level := utility.ParseSlogLevel(env.LogLevel) // defaults to Info logger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{ Level: &level, })) slog.SetDefault(logger) // print our running environment variable set slog.Debug("displaying environment variables", "environment", env) // TO DO, allow cmd args parsing // checking directories to ensure its expected environment is ready slog.Debug("checking if directories are present") if err := utility.EnsureOperation(env.DataDirectory); err != nil { slog.Error("failed to ensure the operating environment", "error", err) os.Exit(1) } // initiating the database connection for which we safe things slog.Info("kicking off database connection") db, err := database.KickoffDatabase(env.DataDirectory) if err != nil { slog.Error("failed to initiate a database connection", "error", err) os.Exit(1) } // kick off the watchdog depending on the environment variables if env.WatchdogEnabled { slog.Info("kicking off database watchdog", "watchdog_interval", env.WatchdogInterval) database.KickoffDatabaseWatchdog(env, db) } else { slog.Info("skipping database watchdog", "watchdog_enabled", env.WatchdogEnabled) } // TO DO make gin log as json // get ready to kick off the http api with Vue frontend slog.Info("kicking off http api backend") api.KickoffApi(logger, env, db) }