samba/util/config/config.go

124 lines
3.1 KiB
Go
Raw Normal View History

2025-06-04 09:51:39 +08:00
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
}