new proxy

This commit is contained in:
2026-03-18 21:18:17 +03:00
parent 971332c283
commit b51a8850bc
17 changed files with 126 additions and 516 deletions

View File

@@ -13,48 +13,40 @@ import (
// LoadConfig загружает конфиг из .env (если есть) и окружения.
func LoadConfig(logger *slog.Logger) (*Config, error) {
_ = godotenv.Load() // необязательно фейлиться, если файла нет
_ = godotenv.Load()
cfg := &Config{}
cfg.Timezone = GetEnvAs("TIMEZONE", "UTC", ParseString)
cfg.ServiceURL = GetEnvAs("SERVICE_URL", "http://localhost:8080", ParseString)
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)
cfg.DatabaseConfig = FillDatabaseConfig()
if cfg.LoggingConfig.ShowCfgDump {
cfg.Print()
}
return cfg, nil
}
// PrintConfig выводит конфигурацию (или любой другой struct) в виде таблички "KEY - VALUE".
// Функция использует рефлексию для перебора полей структуры.
// 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-----")
// Получаем reflect.Value объекта.
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()
// Если поле имеет тип time.Duration, выводим его в виде строки.
if d, ok := fieldValue.(time.Duration); ok {
fieldValue = d.String()
}