123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- package config
- import (
- "fmt"
- "regexp"
- "github.com/spf13/viper"
- )
- type Config struct {
- ImportConfig ImportConfig
- ExportConfig ExportConfig
- }
- type ImportConfig struct {
- DBConfig DBConfig
- Delimiter rune
- PageSize int
- FilenamePattern *regexp.Regexp
- }
- type ExportConfig struct {
- DBConfig DBConfig
- BaseFilePath string
- Delimiter rune
- MaxFileSize int64
- PageSize int
- }
- type DBConfig struct {
- DBType string
- DBName string
- User string
- Password string
- IP string
- Port int
- }
- func LoadConfig() (*Config, error) {
- viper.SetConfigName("config")
- viper.SetConfigType("toml")
- viper.AddConfigPath(".")
- if err := viper.ReadInConfig(); err != nil {
- return nil, fmt.Errorf("error reading config file: %v", err)
- }
-
- importPattern, err := regexp.Compile(viper.GetString("import.cfg.filename_pattern"))
- if err != nil {
- return nil, fmt.Errorf("error compiling filename pattern: %v", err)
- }
- importConfig := ImportConfig{
- DBConfig: DBConfig{
- DBType: viper.GetString("import.db_type"),
- DBName: viper.GetString("import.dbname"),
- User: viper.GetString("import.user"),
- Password: viper.GetString("import.password"),
- IP: viper.GetString("import.ip"),
- Port: viper.GetInt("import.port"),
- },
- Delimiter: rune(viper.GetString("import.cfg.delimiter")[0]),
- PageSize: viper.GetInt("import.cfg.page_size"),
- FilenamePattern: importPattern,
- }
-
- exportConfig := ExportConfig{
- DBConfig: DBConfig{
- DBType: viper.GetString("export.db_type"),
- DBName: viper.GetString("export.dbname"),
- User: viper.GetString("export.user"),
- Password: viper.GetString("export.password"),
- IP: viper.GetString("export.ip"),
- Port: viper.GetInt("export.port"),
- },
- BaseFilePath: viper.GetString("export.cfg.base_file_path"),
- Delimiter: rune(viper.GetString("export.cfg.delimiter")[0]),
- MaxFileSize: viper.GetInt64("export.cfg.max_file_size"),
- PageSize: viper.GetInt("export.cfg.page_size"),
- }
- return &Config{
- ImportConfig: importConfig,
- ExportConfig: exportConfig,
- }, nil
- }
- func (dbConfig *DBConfig) GetDSN() string {
- switch dbConfig.DBType {
- case "mysql":
- return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", dbConfig.User, dbConfig.Password, dbConfig.IP, dbConfig.Port, dbConfig.DBName)
- case "xugu":
- return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", dbConfig.User, dbConfig.Password, dbConfig.IP, dbConfig.Port, dbConfig.DBName)
- }
- return ""
- }
|