mediahls/main.go
2023-12-22 16:51:09 +08:00

82 lines
1.8 KiB
Go

package main
import (
"database/sql"
"embed"
"io/fs"
"log"
"github.com/hibiken/asynq"
"github.com/zhang2092/mediahls/internal/db"
"github.com/zhang2092/mediahls/internal/handlers"
"github.com/zhang2092/mediahls/internal/pkg/config"
"github.com/zhang2092/mediahls/internal/pkg/logger"
"github.com/zhang2092/mediahls/internal/worker"
)
//go:embed web/templates
var templateFS embed.FS
//go:embed web/statics
var staticFS embed.FS
func main() {
// Set up templates
templates, err := fs.Sub(templateFS, "web/templates")
if err != nil {
log.Fatal(err)
}
// Set up statics
statics, err := fs.Sub(staticFS, "web/statics")
if err != nil {
log.Fatal(err)
}
config, err := config.LoadConfig(".")
if err != nil {
log.Fatal("cannot load config: ", err)
}
logger.NewLogger()
conn, err := sql.Open(config.DBDriver, config.DBSource)
if err != nil {
log.Fatal("cannot connect to db: ", err)
}
store := db.NewStore(conn)
redisOpt := asynq.RedisClientOpt{
Addr: config.RDSource,
Password: config.RDPassowrd,
DB: config.RDIndex,
}
taskDistributor := worker.NewRedisTaskDistributor(redisOpt)
go runTaskProcessor(redisOpt, store)
server, err := handlers.NewServer(templates, statics, config, store, taskDistributor)
if err != nil {
log.Fatal("cannot create server: ", err)
}
server.Start(conn)
// s := xid.New().String()
// log.Println(s)
// err := convert.ConvertHLS("media/"+s+"/", "upload/20231129/o6e6qKaMdk0VC1Ys2SHnr.mp4")
// if err != nil {
// log.Fatal(err)
// }
// log.Println("ok")
}
func runTaskProcessor(redisOpt asynq.RedisClientOpt, store db.Store) {
taskProcessor := worker.NewRedisTaskProcessor(redisOpt, store)
log.Printf("task processor start\n")
err := taskProcessor.Start()
if err != nil {
log.Fatal("failed to start task processor: %w", err)
}
}