Files
core/main.go
Ingo Oppermann 17c9f6ef13 Test different standard location for config file
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
2023-01-03 07:55:55 +01:00

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
}