mirror of
https://github.com/lzh-1625/go_process_manager.git
synced 2025-09-27 20:32:10 +08:00
139 lines
2.9 KiB
Go
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()
|
|
}
|