mirror of
https://github.com/datarhei/core.git
synced 2025-09-27 04:16:25 +08:00

If no path is given in the environment variable CORE_CONFIGFILE, different standard locations will be probed: - os.UserConfigDir() + /datarhei-core/config.js - os.UserHomeDir() + /.config/datarhei-core/config.js - ./config/config.js If the config.js doesn't exist in any of these locations, it will be assumed at ./config/config.js
108 lines
2.2 KiB
Go
108 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"os/signal"
|
|
"path"
|
|
|
|
"github.com/datarhei/core/v16/app/api"
|
|
"github.com/datarhei/core/v16/log"
|
|
|
|
_ "github.com/joho/godotenv/autoload"
|
|
)
|
|
|
|
func main() {
|
|
logger := log.New("Core").WithOutput(log.NewConsoleWriter(os.Stderr, log.Lwarn, true))
|
|
|
|
configfile := findConfigfile()
|
|
|
|
app, err := api.New(configfile, os.Stderr)
|
|
if err != nil {
|
|
logger.Error().WithError(err).Log("Failed to create new API")
|
|
os.Exit(1)
|
|
}
|
|
|
|
go func() {
|
|
defer func() {
|
|
if proc, err := os.FindProcess(os.Getpid()); err == nil {
|
|
proc.Signal(os.Interrupt)
|
|
}
|
|
}()
|
|
|
|
for {
|
|
if err := app.Start(); err != api.ErrConfigReload {
|
|
if err != nil {
|
|
logger.Error().WithError(err).Log("Failed to start API")
|
|
}
|
|
|
|
break
|
|
} else {
|
|
logger.Warn().WithError(err).Log("Config reload requested")
|
|
}
|
|
|
|
app.Stop()
|
|
|
|
if err := app.Reload(); err != nil {
|
|
logger.Error().WithError(err).Log("Failed to reload config")
|
|
break
|
|
}
|
|
}
|
|
}()
|
|
|
|
// Wait for interrupt signal to gracefully shutdown the app
|
|
quit := make(chan os.Signal, 1)
|
|
signal.Notify(quit, os.Interrupt)
|
|
<-quit
|
|
|
|
// Stop the app
|
|
app.Destroy()
|
|
}
|
|
|
|
// findConfigfie returns the path to the config file. If no path is given
|
|
// in the environment variable CORE_CONFIGFILE, different standard location
|
|
// will be probed:
|
|
// - os.UserConfigDir() + /datarhei-core/config.js
|
|
// - os.UserHomeDir() + /.config/datarhei-core/config.js
|
|
// - ./config/config.js
|
|
// If the config doesn't exist in none of these locations, it will be assumed
|
|
// at ./config/config.js
|
|
func findConfigfile() string {
|
|
configfile := os.Getenv("CORE_CONFIGFILE")
|
|
if len(configfile) != 0 {
|
|
return configfile
|
|
}
|
|
|
|
locations := []string{}
|
|
|
|
if dir, err := os.UserConfigDir(); err == nil {
|
|
locations = append(locations, dir+"/datarhei-core/config.js")
|
|
}
|
|
|
|
if dir, err := os.UserHomeDir(); err == nil {
|
|
locations = append(locations, dir+"/.config/datarhei-core/config.js")
|
|
}
|
|
|
|
locations = append(locations, "./config/config.js")
|
|
|
|
for _, path := range locations {
|
|
info, err := os.Stat(path)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
|
|
if info.IsDir() {
|
|
continue
|
|
}
|
|
|
|
configfile = path
|
|
}
|
|
|
|
if len(configfile) == 0 {
|
|
configfile = "./config/config.js"
|
|
}
|
|
|
|
os.MkdirAll(path.Dir(configfile), 0740)
|
|
|
|
return configfile
|
|
}
|