94 lines
1.9 KiB
Go
94 lines
1.9 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"os"
|
|
"strconv"
|
|
"time"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
type Config struct {
|
|
Server ServerConfig `yaml:"server"`
|
|
Export ExportConfig `yaml:"export"`
|
|
Logging LoggingConfig `yaml:"logging"`
|
|
Backup BackupConfig `yaml:"backup"`
|
|
}
|
|
|
|
type ServerConfig struct {
|
|
Host string `yaml:"host"`
|
|
Port int `yaml:"port"`
|
|
Mode string `yaml:"mode"`
|
|
ReadTimeout time.Duration `yaml:"read_timeout"`
|
|
WriteTimeout time.Duration `yaml:"write_timeout"`
|
|
}
|
|
|
|
type LoggingConfig struct {
|
|
Level string `yaml:"level"`
|
|
Format string `yaml:"format"`
|
|
Output string `yaml:"output"`
|
|
FilePath string `yaml:"file_path"`
|
|
}
|
|
|
|
// ExportConfig is kept for constructor compatibility in export services.
|
|
// Runtime no longer persists an export section in config.yaml.
|
|
type ExportConfig struct{}
|
|
|
|
type BackupConfig struct {
|
|
Time string `yaml:"time"`
|
|
}
|
|
|
|
func Load(path string) (*Config, error) {
|
|
data, err := os.ReadFile(path)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("reading config file: %w", err)
|
|
}
|
|
|
|
var cfg Config
|
|
if err := yaml.Unmarshal(data, &cfg); err != nil {
|
|
return nil, fmt.Errorf("parsing config file: %w", err)
|
|
}
|
|
|
|
cfg.setDefaults()
|
|
|
|
return &cfg, nil
|
|
}
|
|
|
|
func (c *Config) setDefaults() {
|
|
if c.Server.Host == "" {
|
|
c.Server.Host = "127.0.0.1"
|
|
}
|
|
if c.Server.Port == 0 {
|
|
c.Server.Port = 8080
|
|
}
|
|
if c.Server.Mode == "" {
|
|
c.Server.Mode = "release"
|
|
}
|
|
if c.Server.ReadTimeout == 0 {
|
|
c.Server.ReadTimeout = 30 * time.Second
|
|
}
|
|
if c.Server.WriteTimeout == 0 {
|
|
c.Server.WriteTimeout = 30 * time.Second
|
|
}
|
|
|
|
if c.Logging.Level == "" {
|
|
c.Logging.Level = "info"
|
|
}
|
|
if c.Logging.Format == "" {
|
|
c.Logging.Format = "json"
|
|
}
|
|
if c.Logging.Output == "" {
|
|
c.Logging.Output = "stdout"
|
|
}
|
|
|
|
if c.Backup.Time == "" {
|
|
c.Backup.Time = "00:00"
|
|
}
|
|
}
|
|
|
|
func (c *Config) Address() string {
|
|
return net.JoinHostPort(c.Server.Host, strconv.Itoa(c.Server.Port))
|
|
}
|