53 lines
2.0 KiB
Cheetah
53 lines
2.0 KiB
Cheetah
package main
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"flag"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
omni "git.yuntuo.hk/k2safe/go-omni"
|
|
"git.yuntuo.hk/k2safe/go-omni/logx"
|
|
"{{.Module}}/internal/handler"
|
|
"{{.Module}}/internal/service"
|
|
"{{.Module}}/internal/servicecontext"
|
|
"{{.Module}}/internal/settings"
|
|
)
|
|
|
|
func main(){
|
|
path:=flag.String("config","etc/config.yaml","configuration file; empty uses only Default()")
|
|
check:=flag.Bool("check-config",false,"validate without starting dependencies")
|
|
flag.Parse()
|
|
if *check {if _,err:=settings.Load(*path);err!=nil{log.Fatal(err)};return}
|
|
if err:=run(*path);err!=nil{log.Fatal(err)}
|
|
}
|
|
func run(path string)(runErr error){
|
|
ctx,stop:=signal.NotifyContext(context.Background(),os.Interrupt,syscall.SIGTERM)
|
|
defer stop()
|
|
cfg,err:=settings.Load(path)
|
|
if err!=nil{return err}
|
|
logger,err:=logx.New(cfg.Server.Log)
|
|
if err!=nil{return err}
|
|
defer func(){runErr=errors.Join(runErr,logger.Close())}()
|
|
logx.SetDefault(logger)
|
|
services,err:=servicecontext.New(ctx,logger,cfg)
|
|
if err!=nil{return err}
|
|
defer func(){runErr=errors.Join(runErr,services.Close())}()
|
|
{{if ne .Storage "none"}}if err=services.InitStorage(ctx,cfg.Storage);err!=nil{return err}{{end}}
|
|
application:=omni.New(omni.WithConfig(cfg.Server))
|
|
application.OnShutdown(logger.Close)
|
|
application.OnShutdown(services.Close)
|
|
application.GET("/health/live",services.Health.LivenessHandler())
|
|
application.GET("/health/ready",services.Health.ReadinessHandler())
|
|
handler.NewUsers(service.NewUsers(services)).RegisterRoutes(application)
|
|
{{if ne .Storage "none"}}
|
|
files:=service.NewFiles(services.Files,services.Uploads,services.Downloads,services.UploadLinks,logger,cfg.Storage.LinkTTL)
|
|
if err=handler.NewFiles(files,cfg.Storage.MaxBytes,cfg.Storage.RequestTimeout).RegisterRoutes(application,cfg.Storage.FilesToken,services.FileHTTP);err!=nil{return err}
|
|
{{end}}
|
|
logger.InfoContext(ctx,"service.starting","address",cfg.Server.Address)
|
|
return application.RunContext(ctx,cfg.Server.Address)
|
|
}
|