73 lines
1.5 KiB
Go
73 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"flag"
|
|
"os"
|
|
"os/signal"
|
|
"path/filepath"
|
|
"strings"
|
|
"syscall"
|
|
"time"
|
|
|
|
"litepan/internal/app"
|
|
"litepan/internal/config"
|
|
"litepan/internal/logx"
|
|
|
|
_ "litepan/drivers" //
|
|
)
|
|
|
|
const shutdownBudget = 25 * time.Second
|
|
|
|
func main() {
|
|
cfg := config.Load()
|
|
|
|
listen := flag.String("listen", cfg.ListenAddr, "HTTP 监听地址")
|
|
dataDir := flag.String("data-dir", cfg.DataDir, "数据目录")
|
|
strmDir := flag.String("strm-dir", "", "STRM 输出根目录(默认在数据目录同级)")
|
|
flag.Parse()
|
|
|
|
cfg.ListenAddr = *listen
|
|
if *dataDir != cfg.DataDir {
|
|
cfg.DataDir = *dataDir
|
|
cfg.DBPath = filepath.Join(*dataDir, "litepan.db")
|
|
if strings.TrimSpace(os.Getenv("LITEPAN_STRM_DIR")) == "" {
|
|
cfg.StrmDir = config.StrmDirForData(*dataDir)
|
|
}
|
|
}
|
|
if strings.TrimSpace(*strmDir) != "" {
|
|
cfg.StrmDir = *strmDir
|
|
}
|
|
|
|
logs, err := logx.New(logx.Options{
|
|
Dir: filepath.Join(cfg.DataDir, "log"),
|
|
Level: cfg.LogLevel,
|
|
})
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
|
|
defer stop()
|
|
|
|
a, err := app.New(ctx, app.Options{Config: cfg, Logs: logs})
|
|
if err != nil {
|
|
logs.Root().Error("startup failed", "err", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
runErr := a.Run(ctx)
|
|
stop()
|
|
|
|
shCtx, cancel := context.WithTimeout(context.Background(), shutdownBudget)
|
|
defer cancel()
|
|
if err := a.Shutdown(shCtx); err != nil {
|
|
logs.Root().Error("shutdown error", "err", err)
|
|
os.Exit(1)
|
|
}
|
|
if runErr != nil {
|
|
logs.Root().Error("run error", "err", runErr)
|
|
os.Exit(1)
|
|
}
|
|
}
|