From 3fac2cd570f0b08e428206cecc143201e33fde6b Mon Sep 17 00:00:00 2001 From: langhuihui <178529795@qq.com> Date: Fri, 18 Aug 2023 18:13:40 +0800 Subject: [PATCH] feat: add more config format when call Run --- main.go | 40 +++++++++++++++++++++++++--------------- util/index.go | 13 ++++++++----- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/main.go b/main.go index 3c297f9..a3c8f14 100755 --- a/main.go +++ b/main.go @@ -57,38 +57,48 @@ func init() { } // Run 启动Monibuca引擎,传入总的Context,可用于关闭所有 -func Run(ctx context.Context, configFile string) (err error) { +func Run(ctx context.Context, conf any) (err error) { id, _ := machineid.ProtectedID("monibuca") SysInfo.StartTime = time.Now() SysInfo.Version = Engine.Version Engine.Context = ctx - if _, err = os.Stat(configFile); err != nil { - configFile = filepath.Join(ExecDir, configFile) + var cg config.Config + switch v := conf.(type) { + case string: + if _, err = os.Stat(v); err != nil { + v = filepath.Join(ExecDir, v) + } + if ConfigRaw, err = os.ReadFile(v); err != nil { + log.Warn("read config file error:", err.Error()) + } + case []byte: + ConfigRaw = v + case config.Config: + cg = v } + if err = util.CreateShutdownScript(); err != nil { log.Error("create shutdown script error:", err) } - if ConfigRaw, err = os.ReadFile(configFile); err != nil { - log.Warn("read config file error:", err.Error()) - } + if err = os.MkdirAll(SettingDir, 0766); err != nil { log.Error("create dir .m7s error:", err) return } log.Info("Ⓜ starting engine:", Blink(Engine.Version)) - var cg config.Config if ConfigRaw != nil { - if err = yaml.Unmarshal(ConfigRaw, &cg); err == nil { - Engine.RawConfig = cg.GetChild("global") - if b, err := yaml.Marshal(Engine.RawConfig); err == nil { - Engine.Yaml = string(b) - } - //将配置信息同步到结构体 - Engine.RawConfig.Unmarshal(&EngineConfig.Engine) - } else { + if err = yaml.Unmarshal(ConfigRaw, &cg); err != nil { log.Error("parsing yml error:", err) } } + if cg != nil { + Engine.RawConfig = cg.GetChild("global") + if b, err := yaml.Marshal(Engine.RawConfig); err == nil { + Engine.Yaml = string(b) + } + //将配置信息同步到结构体 + Engine.RawConfig.Unmarshal(&EngineConfig.Engine) + } var logger log.Logger log.LocaleLogger = logger.Lang(lang.Get(EngineConfig.LogLang)) if EngineConfig.LogLevel == "trace" { diff --git a/util/index.go b/util/index.go index d08fa79..3de448f 100644 --- a/util/index.go +++ b/util/index.go @@ -9,7 +9,6 @@ import ( "runtime" "strings" "syscall" - "time" ) var Null = struct{}{} @@ -19,12 +18,16 @@ func Clone[T any](x T) *T { } func initFatalLog() *os.File { - fatal_log := "./fatal" + fatal_log_dir := "./fatal" if _fatal_log := os.Getenv("M7S_FATAL_LOG"); _fatal_log != "" { - fatal_log = _fatal_log + fatal_log_dir = _fatal_log + } + os.MkdirAll(fatal_log_dir, 0766) + fatal_log := filepath.Join(fatal_log_dir, "latest.log") + info, err := os.Stat(fatal_log) + if err == nil && info.Size() != 0 { + os.Rename(fatal_log, filepath.Join(fatal_log_dir, info.ModTime().Format("2006-01-02 15:04:05")+".log")) } - os.MkdirAll(fatal_log, 0766) - fatal_log = filepath.Join(fatal_log, time.Now().Format("2006-01-02 15:04:05")+".log") logFile, err := os.OpenFile(fatal_log, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666) if err != nil { log.Println("服务启动出错", "打开异常日志文件失败", err)