bi/model/config.go
1340691923@qq.com 742458ee1d 优化代码
2022-03-16 16:04:29 +08:00

147 lines
4.4 KiB
Go

//应用启动引擎层
package model
import (
"errors"
"fmt"
jsoniter "github.com/json-iterator/go"
"os"
)
var GlobConfig Config
var CmdName string
//全局配置结构体
type Config struct {
Manager ManagerConfig `json:"manager"`
Report ReportConfig `json:"report"`
Sinker SinkerConfig `json:"sinker"`
Comm struct {
Log LogConfig `json:"log"`
Mysql MysqlConfig `json:"mysql"`
ClickHouse ClickHouseConfig `json:"clickhouse"`
Kafka KafkaCfg `json:"kafka"`
Redis RedisConfig `json:"redis"`
} `json:"comm"`
}
type ManagerConfig struct {
Port uint16 `json:"port"` //铸龙分析系统http启动端口
CkQueryLimit int `json:"ckQueryLimit"` //clickhouse 查询限流器阈值
CkQueryExpiration int `json:"ckQueryExpiration"` //clickhouse 查询限流器阈值
JwtSecret string `json:"jwtSecret"`
DeBug bool `json:"deBug"`
}
type SinkerConfig struct {
ReportAcceptStatus BatchConfig `json:"reportAcceptStatus"`
ReportData2CK BatchConfig `json:"reportData2CK"`
RealTimeWarehousing BatchConfig `json:"realTimeWarehousing"`
PprofHttpPort uint16 `json:"pprofHttpPort"`
}
type RedisConfig struct {
Addr string `json:"addr"`
Passwd string `json:"passwd"`
Db int `json:"db"`
MaxIdle int `json:"maxIdle"`
MaxActive int `json:"maxActive"`
}
type ClickHouseConfig struct {
Username string `json:"username"`
Pwd string `json:"pwd"`
IP string `json:"ip"`
Port string `json:"port"`
DbName string `json:"dbName"`
MaxOpenConns int `json:"maxOpenConns"`
MaxIdleConns int `json:"maxIdleConns"`
MacrosShardKeyName string `json:"macrosShardKeyName"`
MacrosReplicaKeyName string `json:"macrosReplicaKeyName"`
ClusterName string `json:"clusterName"`
}
type MysqlConfig struct {
Username string `json:"username"`
Pwd string `json:"pwd"`
IP string `json:"ip"`
Port string `json:"port"`
DbName string `json:"dbName"`
MaxOpenConns int `json:"maxOpenConns"`
MaxIdleConns int `json:"maxIdleConns"`
}
type ReportConfig struct {
ReportPort uint16 `json:"reportPort"` //上报程序启动端口
ReadTimeout int `json:"readTimeout"`
WriteTimeout int `json:"writeTimeout"`
MaxConnsPerIP int `json:"maxConnsPerIP"`
MaxRequestsPerConn int `json:"maxRequestsPerConn"`
IdleTimeout int `json:"idleTimeout"`
UserAgentBanList []string `json:"userAgentBanList"`
}
type LogConfig struct {
StorageDays int `json:"storageDays"` //日志保留天数
LogDir string `json:"logDir"` //日志保留文件夹地址
}
func (this *Config) GetCkQueryLimit() int {
if this.Manager.CkQueryLimit == 0 {
return 5
}
return this.Manager.CkQueryLimit
}
func (this *Config) GetCkQueryExpiration() int {
if this.Manager.CkQueryExpiration == 0 {
return 2
}
return this.Manager.CkQueryExpiration
}
func (this *Config) GetKafkaCfgProducerType() string {
if this.Comm.Kafka.ProducerType == "" {
return "sync"
}
return this.Comm.Kafka.ProducerType
}
type KafkaCfg struct {
NumPartitions int32 `json:"numPartitions"`
Addresses []string `json:"addresses"`
Username string `json:"username"`
Password string `json:"password"`
ReportTopicName string `json:"reportTopicName"`
ConsumerGroupName string `json:"consumerGroupName"`
RealTimeDataGroup string `json:"realTimeDataGroup"`
ReportData2CKGroup string `json:"reportData2CKGroup"`
DebugDataTopicName string `json:"debugDataTopicName"`
DebugDataGroup string `json:"debugDataGroup"`
ProducerType string `json:"producer_type"`
}
type BatchConfig struct {
BufferSize int `json:"bufferSize"`
FlushInterval int `json:"flushInterval"`
}
//下载配置文件
func DownloadConfigFile(fname string) (err error) {
var json = jsoniter.ConfigCompatibleWithStandardLibrary
var config Config
filePtr, err := os.Create(fname)
if err != nil {
return errors.New(fmt.Sprintf("创建配置文件异常:%s", err.Error()))
}
defer filePtr.Close()
// 带JSON缩进格式写文件
data, err := json.MarshalIndent(config, "", " ")
if err != nil {
return errors.New(fmt.Sprintf("创建配置文件异常:%s", err.Error()))
}
_, err = filePtr.Write(data)
return
}