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"
|
"github.com/rs/zerolog/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
const USER_DATABASE_DIR = "."
|
|
||||||
const WEB_SERVER_PORT = "8080"
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
initializeLogger()
|
initializeLogger()
|
||||||
log.Info().Msg("starting playback device server")
|
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 := users.UserDatabase{}
|
||||||
userDatabase.SetDirectory(USER_DATABASE_DIR)
|
userDatabase.SetDirectory(configuration.DatabaseDirectory)
|
||||||
err := userDatabase.Initialize()
|
err = userDatabase.Initialize()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("failed to initialize user database")
|
log.Error().Err(err).Msg("failed to initialize user database")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
@ -34,7 +37,7 @@ func main() {
|
|||||||
|
|
||||||
webServer := server.WebServer{}
|
webServer := server.WebServer{}
|
||||||
webServer.SetWebAppDirectoryPath("www")
|
webServer.SetWebAppDirectoryPath("www")
|
||||||
webServer.SetPort(WEB_SERVER_PORT)
|
webServer.SetPort(configuration.Port)
|
||||||
webServer.Initialize()
|
webServer.Initialize()
|
||||||
defer webServer.Close()
|
defer webServer.Close()
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user