Files
go_process_manager/boot/boot.go
2025-07-09 10:49:27 +08:00

139 lines
2.9 KiB
Go

package boot
import (
"log"
"os"
"os/signal"
"reflect"
"strconv"
"syscall"
"github.com/lzh-1625/go_process_manager/config"
"github.com/lzh-1625/go_process_manager/internal/app/constants"
"github.com/lzh-1625/go_process_manager/internal/app/logic"
"github.com/lzh-1625/go_process_manager/internal/app/middle"
"github.com/lzh-1625/go_process_manager/internal/app/repository"
"github.com/lzh-1625/go_process_manager/internal/app/termui"
logger "github.com/lzh-1625/go_process_manager/log"
"github.com/lzh-1625/go_process_manager/utils"
)
func init() {
initDb()
initResetConfig()
initConfiguration()
initArgs()
initLogHandle()
initLog()
initLogHanler()
initWaitCond()
initProcess()
initJwtSecret()
initTui()
InitTask()
initListenKillSignal()
}
func initDb() {
repository.InitDb()
}
func initConfiguration() {
defer func() {
if err := recover(); err != nil {
panic("config init fail")
}
}()
typeElem := reflect.TypeOf(config.CF).Elem()
valueElem := reflect.ValueOf(config.CF).Elem()
for i := 0; i < typeElem.NumField(); i++ {
typeField := typeElem.Field(i)
valueField := valueElem.Field(i)
value, err := repository.ConfigRepository.GetConfigValue(typeField.Name)
if err != nil {
value = typeField.Tag.Get("default")
}
if value == "-" {
continue
}
switch typeField.Type.Kind() {
case reflect.String:
valueField.SetString(value)
case reflect.Bool:
valueField.SetBool(utils.UnwarpIgnore(strconv.ParseBool(value)))
case reflect.Float64:
valueField.SetFloat(utils.UnwarpIgnore(strconv.ParseFloat(value, 64)))
case reflect.Int64, reflect.Int:
valueField.SetInt(utils.UnwarpIgnore(strconv.ParseInt(value, 10, 64)))
default:
continue
}
}
}
func initArgs() {
if len(os.Args) >= 2 && os.Args[1] == "tui" {
config.CF.Tui = true
}
}
func initLog() {
logger.InitLog()
}
func initProcess() {
logic.ProcessCtlLogic.ProcessInit()
}
func initJwtSecret() {
if secret, err := repository.ConfigRepository.GetConfigValue(constants.SECRET_KEY); err == nil {
utils.SetSecret([]byte(secret))
return
}
secret := utils.RandString(32)
repository.ConfigRepository.SetConfigValue(constants.SECRET_KEY, secret)
utils.SetSecret([]byte(secret))
}
func initLogHanler() {
logic.InitLog()
}
func initTui() {
go termui.Tui.TermuiInit()
}
func InitTask() {
logic.TaskLogic.InitTaskJob()
}
func initResetConfig() {
if len(os.Args) >= 2 && os.Args[1] == "reset" {
err := logic.ConfigLogic.ResetSystemConfiguration()
if err != nil {
log.Panic(err)
}
log.Print("reset system config to deafult success!")
os.Exit(0)
}
}
func initListenKillSignal() {
go func() {
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
<-sigs
logic.ProcessCtlLogic.KillAllProcess()
log.Print("已停止所有进程")
os.Exit(0)
}()
}
func initLogHandle() {
logic.InitLogHandle()
}
func initWaitCond() {
middle.InitWaitCond()
}