Monorepo for Tangled tangled.org
1package server 2 3import ( 4 "context" 5 "fmt" 6 "net/http" 7 8 "github.com/urfave/cli/v3" 9 "tangled.org/core/knot2/config" 10 "tangled.org/core/knot2/db" 11 "tangled.org/core/log" 12) 13 14func Command() *cli.Command { 15 return &cli.Command{ 16 Name: "server", 17 Usage: "run a knot server", 18 Action: Run, 19 Flags: []cli.Flag{ 20 &cli.StringFlag{ 21 Name: "config", 22 Aliases: []string{"c"}, 23 Usage: "config path", 24 Required: true, 25 }, 26 }, 27 } 28} 29 30func Run(ctx context.Context, cmd *cli.Command) error { 31 l := log.FromContext(ctx) 32 l = log.SubLogger(l, cmd.Name) 33 ctx = log.IntoContext(ctx, l) 34 35 configPath := cmd.String("config") 36 37 cfg, err := config.Load(ctx, configPath) 38 if err != nil { 39 return fmt.Errorf("failed to load config: %w", err) 40 } 41 fmt.Println("config:", cfg) 42 43 // TODO: start listening to jetstream 44 45 d, err := db.New(cfg.DbPath()) 46 if err != nil { 47 panic(err) 48 } 49 err = db.Init(d) 50 if err != nil { 51 panic(err) 52 } 53 54 clientApp := newAtClientApp(&cfg) 55 56 mux := Routes(&cfg, d, clientApp) 57 58 l.Info("starting knot server", "address", cfg.ListenAddr()) 59 err = http.ListenAndServe(cfg.ListenAddr(), mux) 60 if err != nil { 61 l.Error("server error", "err", err) 62 } 63 64 return nil 65}