feat: add configuration file and environment
This commit is contained in:
parent
2e27714fcf
commit
e845d88b6c
87
main/configuration.go
Normal file
87
main/configuration.go
Normal file
@ -0,0 +1,87 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
type Configuration struct {
|
||||
Port string `json:"port"`
|
||||
DatabaseDirectory string `json:"database_directory"`
|
||||
}
|
||||
|
||||
func getDefaultConfig() Configuration {
|
||||
return Configuration{
|
||||
Port: "8080",
|
||||
DatabaseDirectory: ".",
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func LoadConfiguration(configurationFilePath string) (Configuration, error) {
|
||||
config, err := fromFile(configurationFilePath)
|
||||
if err != nil {
|
||||
log.Info().Msg("failed to load configuration from file, using default values")
|
||||
}
|
||||
config.Port = os.Getenv("HTTP_PORT")
|
||||
config.DatabaseDirectory = os.Getenv("DATABASE_DIRECTORY")
|
||||
|
||||
config = mergeConfig(getDefaultConfig(), config)
|
||||
|
||||
err = checkConfiguration(&config)
|
||||
if err != nil {
|
||||
return config, err
|
||||
}
|
||||
|
||||
return config, nil
|
||||
}
|
||||
|
||||
func fromFile(filePath string) (Configuration, error) {
|
||||
file, err := os.Open(filePath)
|
||||
if err != nil {
|
||||
return Configuration{}, err
|
||||
}
|
||||
|
||||
jsonData, err := io.ReadAll(file)
|
||||
if err != nil {
|
||||
return Configuration{}, err
|
||||
}
|
||||
|
||||
var config Configuration
|
||||
err = json.Unmarshal(jsonData, &config)
|
||||
if err != nil {
|
||||
return Configuration{}, err
|
||||
}
|
||||
return config, nil
|
||||
}
|
||||
|
||||
func mergeConfig(base Configuration, override Configuration) Configuration {
|
||||
mergedConfig := base
|
||||
|
||||
if override.Port != "" {
|
||||
mergedConfig.Port = override.Port
|
||||
}
|
||||
|
||||
if override.DatabaseDirectory != "" {
|
||||
mergedConfig.DatabaseDirectory = override.DatabaseDirectory
|
||||
}
|
||||
|
||||
return mergedConfig
|
||||
}
|
||||
|
||||
func checkConfiguration(configuration *Configuration) error {
|
||||
databaseDirectory := configuration.DatabaseDirectory
|
||||
if !checkDirectoryPath(databaseDirectory) {
|
||||
return fmt.Errorf("database directory %s does not exist", databaseDirectory)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func checkDirectoryPath(directoryPath string) bool {
|
||||
_, err := os.Stat(directoryPath)
|
||||
return !os.IsNotExist(err)
|
||||
}
|
||||
15
main/main.go
15
main/main.go
@ -10,16 +10,19 @@ import (
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
const USER_DATABASE_DIR = "."
|
||||
const WEB_SERVER_PORT = "8080"
|
||||
|
||||
func main() {
|
||||
initializeLogger()
|
||||
log.Info().Msg("starting playback device server")
|
||||
|
||||
configuration, err := LoadConfiguration("config.json")
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("configuration error")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
userDatabase := users.UserDatabase{}
|
||||
userDatabase.SetDirectory(USER_DATABASE_DIR)
|
||||
err := userDatabase.Initialize()
|
||||
userDatabase.SetDirectory(configuration.DatabaseDirectory)
|
||||
err = userDatabase.Initialize()
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("failed to initialize user database")
|
||||
os.Exit(1)
|
||||
@ -34,7 +37,7 @@ func main() {
|
||||
|
||||
webServer := server.WebServer{}
|
||||
webServer.SetWebAppDirectoryPath("www")
|
||||
webServer.SetPort(WEB_SERVER_PORT)
|
||||
webServer.SetPort(configuration.Port)
|
||||
webServer.Initialize()
|
||||
defer webServer.Close()
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user