forked from templates/template-go-backend
59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"log/slog"
|
|
"os"
|
|
"reflect"
|
|
"text/tabwriter"
|
|
"time"
|
|
|
|
"github.com/joho/godotenv"
|
|
)
|
|
|
|
// LoadConfig загружает конфиг из .env (если есть) и окружения.
|
|
func LoadConfig(logger *slog.Logger) (*Config, error) {
|
|
_ = godotenv.Load()
|
|
|
|
cfg := &Config{}
|
|
|
|
cfg.ListenAddr = GetEnvAs("LISTEN_ADDR", ":8080", ParseString)
|
|
cfg.BackendURL = GetEnvAs("OLLAMA_BACKEND", "http://localhost:11434", ParseString)
|
|
|
|
cfg.LoggingConfig.Instance = logger
|
|
cfg.LoggingConfig.Level = GetEnvAs("LOG_LEVEL", "info", ParseString)
|
|
cfg.LoggingConfig.ShowCfgDump = GetEnvAs("LOG_SHOW_DUMP", false, ParseBool)
|
|
|
|
if cfg.LoggingConfig.ShowCfgDump {
|
|
cfg.Print()
|
|
}
|
|
return cfg, nil
|
|
}
|
|
|
|
// Print выводит конфигурацию в виде таблички "KEY - VALUE".
|
|
func (c *Config) Print() {
|
|
w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
|
|
fmt.Fprintln(w, "Loaded configuration:")
|
|
fmt.Fprintln(w, "KEY\tVALUE")
|
|
fmt.Fprintln(w, "----\t-----")
|
|
|
|
v := reflect.ValueOf(c)
|
|
if v.Kind() == reflect.Ptr {
|
|
v = v.Elem()
|
|
}
|
|
t := v.Type()
|
|
|
|
for i := 0; i < v.NumField(); i++ {
|
|
fieldName := t.Field(i).Name
|
|
fieldValue := v.Field(i).Interface()
|
|
|
|
if d, ok := fieldValue.(time.Duration); ok {
|
|
fieldValue = d.String()
|
|
}
|
|
|
|
fmt.Fprintf(w, "%s:\t%v\n", fieldName, fieldValue)
|
|
}
|
|
fmt.Fprintln(w, "----\t-----")
|
|
w.Flush()
|
|
}
|