// Command server runs Oolong in one process. package main import ( "context" "flag" "fmt" "os" "os/signal" "syscall" "tangled.org/oolong.social/oolong/internal/atplatform/domain" "tangled.org/oolong.social/oolong/internal/atplatform/server" "tangled.org/oolong.social/oolong/internal/handlers" "tangled.org/oolong.social/oolong/internal/logging" oolongapp "tangled.org/oolong.social/oolong/internal/oolong/app" teahandlers "tangled.org/oolong.social/oolong/internal/oolong/handlers" "tangled.org/oolong.social/oolong/internal/routing" "github.com/rs/zerolog/log" ) type appRun struct { app *domain.App defaultPort string defaultMetricsPort string appRoutes routing.AppRoutes staticPages handlers.StaticPageRenderers } func main() { knownDIDsFile := flag.String("known-dids", "", "Path to file containing DIDs to backfill on startup (one per line)") flag.Parse() logging.ConfigureFromEnv(os.Stdout) ctx, cancel := context.WithCancel(context.Background()) defer cancel() sigCh := make(chan os.Signal, 1) signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM) go func() { <-sigCh log.Info().Msg("Signal received, shutting down") cancel() }() runs := []appRun{{ app: oolongapp.New(), defaultPort: "18920", defaultMetricsPort: "9102", appRoutes: teahandlers.Routes{}, staticPages: teahandlers.StaticPages(), }} if err := runApps(ctx, *knownDIDsFile, runs); err != nil { log.Fatal().Err(err).Msg("Server exited with error") } log.Info().Msg("Stopped") } func runApps(ctx context.Context, knownDIDsFile string, runs []appRun) error { if len(runs) != 1 { return fmt.Errorf("expected exactly one app, got %d", len(runs)) } run := runs[0] log.Info().Str("app", run.app.Name).Msg("Starting app") return server.Run(ctx, run.app, server.Options{ KnownDIDsPath: knownDIDsFile, DefaultPort: run.defaultPort, DefaultMetricsPort: run.defaultMetricsPort, AppRoutes: run.appRoutes, StaticPages: run.staticPages, }) }