init the project
This commit is contained in:
222
rest/config.go
Normal file
222
rest/config.go
Normal file
@ -0,0 +1,222 @@
|
||||
package rest
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/json-iterator/go"
|
||||
"time"
|
||||
"unsafe"
|
||||
"io/ioutil"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
)
|
||||
|
||||
const (
|
||||
//用户身份的cookie字段名
|
||||
COOKIE_AUTH_KEY = "_ak"
|
||||
|
||||
//数据库表前缀 tank100表示当前应用版本是tank:1.0.x版,数据库结构发生变化必然是中型升级
|
||||
TABLE_PREFIX = "tank10_"
|
||||
|
||||
//当前版本
|
||||
VERSION = "1.0.0"
|
||||
)
|
||||
|
||||
var (
|
||||
CONFIG = &Config{
|
||||
//以下内容是默认配置项。
|
||||
|
||||
//默认监听端口号
|
||||
ServerPort: 9090,
|
||||
//将日志输出到控制台。
|
||||
LogToConsole: true,
|
||||
//mysql相关配置。
|
||||
//数据库端口
|
||||
MysqlPort: 3306,
|
||||
//数据库Host
|
||||
MysqlHost: "127.0.0.1",
|
||||
//数据库名字
|
||||
MysqlSchema: "tank",
|
||||
//用户名
|
||||
MysqlUserName: "tank",
|
||||
//密码
|
||||
MysqlPassword: "tank123",
|
||||
//数据库连接信息。
|
||||
MysqlUrl: "%MysqlUserName:%MysqlPassword@tcp(%MysqlHost:%MysqlPort)/%MysqlSchema?charset=utf8&parseTime=True&loc=Local",
|
||||
//超级管理员用户名,只能包含英文和数字
|
||||
AdminUsername: "admin",
|
||||
//超级管理员邮箱
|
||||
AdminEmail: "admin@tank.eyeblue.cn",
|
||||
//超级管理员密码
|
||||
AdminPassword: "123456",
|
||||
}
|
||||
)
|
||||
|
||||
//依赖外部定义的变量。
|
||||
type Config struct {
|
||||
//默认监听端口号
|
||||
ServerPort int
|
||||
|
||||
//将日志输出到控制台。
|
||||
LogToConsole bool
|
||||
|
||||
//mysql相关配置。
|
||||
//数据库端口
|
||||
MysqlPort int
|
||||
//数据库Host
|
||||
MysqlHost string
|
||||
//数据库名字
|
||||
MysqlSchema string
|
||||
//用户名
|
||||
MysqlUserName string
|
||||
//密码
|
||||
MysqlPassword string
|
||||
//数据库连接信息。
|
||||
MysqlUrl string
|
||||
|
||||
//超级管理员用户名,只能包含英文和数字
|
||||
AdminUsername string
|
||||
//超级管理员邮箱
|
||||
AdminEmail string
|
||||
//超级管理员密码
|
||||
AdminPassword string
|
||||
}
|
||||
|
||||
//验证配置文件的正确性。
|
||||
func (this *Config) validate() {
|
||||
|
||||
if this.ServerPort == 0 {
|
||||
LogPanic("ServerPort 未配置")
|
||||
}
|
||||
|
||||
if this.MysqlUserName == "" {
|
||||
LogPanic("MysqlUserName 未配置")
|
||||
}
|
||||
|
||||
if this.MysqlPassword == "" {
|
||||
LogPanic("MysqlPassword 未配置")
|
||||
}
|
||||
|
||||
if this.MysqlHost == "" {
|
||||
LogPanic("MysqlHost 未配置")
|
||||
}
|
||||
|
||||
if this.MysqlPort == 0 {
|
||||
LogPanic("MysqlPort 未配置")
|
||||
}
|
||||
|
||||
if this.MysqlSchema == "" {
|
||||
LogPanic("MysqlSchema 未配置")
|
||||
}
|
||||
|
||||
this.MysqlUrl = fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", this.MysqlUserName, this.MysqlPassword, this.MysqlHost, this.MysqlPort, this.MysqlSchema)
|
||||
|
||||
}
|
||||
|
||||
//init方法只要这个包被引入了就一定会执行。
|
||||
func init() {
|
||||
|
||||
//json中需要去特殊处理时间。
|
||||
jsoniter.RegisterTypeDecoderFunc("time.Time", func(ptr unsafe.Pointer, iter *jsoniter.Iterator) {
|
||||
//如果使用time.UTC,那么时间会相差8小时
|
||||
t, err := time.ParseInLocation("2006-01-02 15:04:05", iter.ReadString(), time.Local)
|
||||
if err != nil {
|
||||
iter.Error = err
|
||||
return
|
||||
}
|
||||
*((*time.Time)(ptr)) = t
|
||||
})
|
||||
|
||||
jsoniter.RegisterTypeEncoderFunc("time.Time", func(ptr unsafe.Pointer, stream *jsoniter.Stream) {
|
||||
t := *((*time.Time)(ptr))
|
||||
//如果使用time.UTC,那么时间会相差8小时
|
||||
stream.WriteString(t.Local().Format("2006-01-02 15:04:05"))
|
||||
}, nil)
|
||||
}
|
||||
|
||||
//从conf/tank.json中获取变量。
|
||||
|
||||
//从flag中或者conf/tank.json中装填变量
|
||||
func PrepareConfigs() {
|
||||
|
||||
//读取配置文件
|
||||
filePath := GetConfPath() + "/tank.json"
|
||||
content, err := ioutil.ReadFile(filePath)
|
||||
if err != nil {
|
||||
LogWarning(fmt.Sprintf("无法找到配置文件:%s,%v", filePath, err))
|
||||
} else {
|
||||
// 用 json.Unmarshal
|
||||
err := json.Unmarshal(content, CONFIG)
|
||||
if err != nil {
|
||||
LogPanic("配置文件格式错误!")
|
||||
}
|
||||
}
|
||||
|
||||
//从运行时参数中读取,运行时参数具有更高优先级。
|
||||
//系统端口号
|
||||
ServerPortPtr := flag.Int("ServerPort", CONFIG.ServerPort, "server port")
|
||||
|
||||
//系统端口号
|
||||
LogToConsolePtr := flag.Bool("LogToConsole", CONFIG.LogToConsole, "write log to console. for debug.")
|
||||
|
||||
//mysql相关配置。
|
||||
MysqlPortPtr := flag.Int("MysqlPort", CONFIG.MysqlPort, "mysql port")
|
||||
MysqlHostPtr := flag.String("MysqlHost", CONFIG.MysqlHost, "mysql host")
|
||||
MysqlSchemaPtr := flag.String("MysqlSchema", CONFIG.MysqlSchema, "mysql schema")
|
||||
MysqlUserNamePtr := flag.String("MysqlUserName", CONFIG.MysqlUserName, "mysql username")
|
||||
MysqlPasswordPtr := flag.String("MysqlPassword", CONFIG.MysqlPassword, "mysql password")
|
||||
|
||||
//超级管理员信息
|
||||
AdminUsernamePtr := flag.String("AdminUsername", CONFIG.AdminUsername, "administrator username")
|
||||
AdminEmailPtr := flag.String("AdminEmail", CONFIG.AdminEmail, "administrator email")
|
||||
AdminPasswordPtr := flag.String("AdminPassword", CONFIG.AdminPassword, "administrator password")
|
||||
|
||||
//flag.Parse()方法必须要在使用之前调用。
|
||||
flag.Parse()
|
||||
|
||||
if *ServerPortPtr != CONFIG.ServerPort {
|
||||
CONFIG.ServerPort = *ServerPortPtr
|
||||
}
|
||||
|
||||
if *LogToConsolePtr != CONFIG.LogToConsole {
|
||||
CONFIG.LogToConsole = *LogToConsolePtr
|
||||
}
|
||||
|
||||
if *MysqlPortPtr != CONFIG.MysqlPort {
|
||||
CONFIG.MysqlPort = *MysqlPortPtr
|
||||
}
|
||||
|
||||
if *MysqlHostPtr != CONFIG.MysqlHost {
|
||||
CONFIG.MysqlHost = *MysqlHostPtr
|
||||
}
|
||||
|
||||
if *MysqlSchemaPtr != CONFIG.MysqlSchema {
|
||||
CONFIG.MysqlSchema = *MysqlSchemaPtr
|
||||
}
|
||||
|
||||
if *MysqlUserNamePtr != CONFIG.MysqlUserName {
|
||||
CONFIG.MysqlUserName = *MysqlUserNamePtr
|
||||
}
|
||||
|
||||
if *MysqlPasswordPtr != CONFIG.MysqlPassword {
|
||||
CONFIG.MysqlPassword = *MysqlPasswordPtr
|
||||
}
|
||||
|
||||
if *AdminUsernamePtr != CONFIG.AdminUsername {
|
||||
CONFIG.AdminUsername = *AdminUsernamePtr
|
||||
}
|
||||
|
||||
if *AdminEmailPtr != CONFIG.AdminEmail {
|
||||
CONFIG.AdminEmail = *AdminEmailPtr
|
||||
}
|
||||
|
||||
if *AdminPasswordPtr != CONFIG.AdminPassword {
|
||||
CONFIG.AdminPassword = *AdminPasswordPtr
|
||||
}
|
||||
|
||||
//验证配置项的正确性
|
||||
CONFIG.validate()
|
||||
|
||||
//安装程序开始导入初始表和初始数据。
|
||||
InstallDatabase()
|
||||
|
||||
}
|
Reference in New Issue
Block a user