package config import ( "encoding/xml" "flag" "fmt" "io/ioutil" "strings" ) type Command struct { LogLevel int SaveDay bool Filesize int ConfigPath string ChildId int ChildNum int IsClub int // 0:非俱乐部 MinRoomId int // 最小房间id MaxRoomId int // 最大房间id LogPath string // 日志相对路径 } var Config XmlConfig var Cmd Command type XmlConfig struct { Logger Logger `xml:"logger"` Application Application `xml:"Application"` Rabbitmq Rabbitmq `xml:"Rabbitmq"` DBConfig DBConfig `xml:"Mysql"` Redis RedisConfig `xml:"Redis"` ClickHouse ClickHouseConfig `xml:"ClickHouse"` } type Logger struct { Encode string `xml:"encode"` Level string `xml:"level"` SaveDay string `xml:"saveday"` Filesize string `xml:"filesize"` Monitor string `xml:"monitor"` } type Application struct { Gm int `xml:"Gm"` //RoomMinId int `xml:"RoomMinId"` //RoomMaxId int `xml:"RoomMaxId"` //IsClub int `xml:"IsClub"` } type Rabbitmq struct { Host string `xml:"Host"` Port string `xml:"Port"` Username string `xml:"Username"` Password string `xml:"Password"` VHost string `xml:"VHost"` } type DBConfig struct { ConfigDB string `xml:"ConfigDB"` UserDB string `xml:"UserDB"` PayDB string `xml:"PayDB"` DataDB string `xml:"DataDB"` Host string `xml:"Host"` Port string `xml:"Port"` Username string `xml:"Username"` Password string `xml:"Password"` } type RedisEntry struct { XMLName xml.Name `xml:"Entry"` Key string `xml:"key,attr"` Host string `xml:"Host"` Port string `xml:"Port"` Password string `xml:"Password"` DB0 int `xml:"DB0"` } type RedisConfig struct { Entries []RedisEntry `xml:"Entry"` } type ClickHouseConfig struct { Host string `xml:"Host"` Port string `xml:"Port"` Username string `xml:"Username"` Password string `xml:"Password"` DbName string `xml:"DbName"` } func Load(path string) error { data, err := ioutil.ReadFile(path) if err != nil { return err } //log.Debug(fmt.Sprintf("load xml:%v", string(data))) err = xml.Unmarshal(data, &Config) if err != nil { return err } return err } func RabbitmqUrl() string { return fmt.Sprintf("amqp://%s:%s@%s:%s/%s", Config.Rabbitmq.Username, Config.Rabbitmq.Password, Config.Rabbitmq.Host, Config.Rabbitmq.Port, Config.Rabbitmq.VHost) } func ParseCommand() *Command { flag.IntVar(&Cmd.LogLevel, "log", -1, "log level") flag.StringVar(&Cmd.ConfigPath, "config", "default path", "xml config path") flag.IntVar(&Cmd.ChildId, "id", 0, "current service id") flag.IntVar(&Cmd.ChildNum, "service_num", 1, "number of services") flag.IntVar(&Cmd.IsClub, "is_club", 0, "is club service") flag.IntVar(&Cmd.MinRoomId, "min_room_id", 0, "min room id") flag.IntVar(&Cmd.MaxRoomId, "max_room_id", 0, "max room id") flag.StringVar(&Cmd.LogPath, "log_path", "./log", "log path") flag.Parse() if strings.Contains(Cmd.ConfigPath, "_dev") && Cmd.LogPath == "./log" { Cmd.LogPath = "./log_dev" } //Cmd.Version = fmt.Sprintf("版本编译时间:%s", time.Now().Format("2006-01-02 15:04:05")) return &Cmd }