package server import ( "context" "fmt" "net/http" "github.com/urfave/cli/v3" "tangled.org/core/knot2/config" "tangled.org/core/knot2/db" "tangled.org/core/log" ) func Command() *cli.Command { return &cli.Command{ Name: "server", Usage: "run a knot server", Action: Run, Flags: []cli.Flag{ &cli.StringFlag{ Name: "config", Aliases: []string{"c"}, Usage: "config path", Required: true, }, }, } } func Run(ctx context.Context, cmd *cli.Command) error { l := log.FromContext(ctx) l = log.SubLogger(l, cmd.Name) ctx = log.IntoContext(ctx, l) configPath := cmd.String("config") cfg, err := config.Load(ctx, configPath) if err != nil { return fmt.Errorf("failed to load config: %w", err) } fmt.Println("config:", cfg) // TODO: start listening to jetstream d, err := db.New(cfg.DbPath()) if err != nil { panic(err) } err = db.Init(d) if err != nil { panic(err) } clientApp := newAtClientApp(&cfg) mux := Routes(&cfg, d, clientApp) l.Info("starting knot server", "address", cfg.ListenAddr()) err = http.ListenAndServe(cfg.ListenAddr(), mux) if err != nil { l.Error("server error", "err", err) } return nil }