glogcenter/glc/conf/config.go
2024-07-29 17:23:54 +08:00

371 lines
15 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 系统配置
* 1统一管理系统的全部配置信息
* 2所有配置都有默认值以便直接使用
* 3所有配置都可以通过环境变量设定覆盖方便自定义配置方便容器化部署
*/
package conf
import (
"runtime"
"sort"
"strings"
"github.com/gotoeasy/glang/cmn"
)
const LogTransferAdd = "/v1/log/transferAdd"
const SysUserTransferSave = "/v1/sysuser/transferSave"
const SysUserTransferChgPsw = "/v1/sysuser/transferChgPsw"
const SysUserTransferDel = "/v1/sysuser/transferDel"
const UserTransferLogin = "/v1/user/transferLogin"
var storeRoot string = "/glogcenter" // 【固定】容器化缘故,不适合修改
var serverPort string = "8080" // 【固定】容器化缘故,不适合修改
var contextPath string = "/glc" // 【固定】容器化缘故,不适合修改
var storeChanLength int
var maxIdleTime int
var storeNameAutoAddDate bool
var serverUrl string
var serverIp string
var enableSecurityKey bool
var securityKey string
var headerSecurityKey string
var enableAmqpConsume bool
var enableWebGzip bool
var amqpAddr string
var amqpQueueName string
var amqpJsonFormat bool
var saveDays int
var enableLogin bool
var username string
var password string
var sessionTimeout int
var clusterMode bool
var clusterUrls []string
var enableBackup bool
var glcGroup string
var minioUrl string
var minioUser string
var minioPassword string
var minioBucket string
var enableUploadMinio bool
var goMaxProcess int
var goMaxProcessIdx int
var enableCors bool
var pageSize int
var nearSearchSize int
var mulitLineSearch bool
var testMode bool
var tokenSalt string
var aryWhite []string
var aryBlack []string
var ipAddCity bool
var enableChatAi bool
func init() {
UpdateConfigByEnv()
}
func UpdateConfigByEnv() {
// 读取环境变量初始化配置,各配置都有默认值
storeChanLength = cmn.GetEnvInt("GLC_STORE_CHAN_LENGTH", 64) // 【X】存储通道长度
maxIdleTime = cmn.GetEnvInt("GLC_MAX_IDLE_TIME", 300) // 【X】最大闲置时间,超过闲置时间将自动关闭0时表示不关闭
storeNameAutoAddDate = cmn.GetEnvBool("GLC_STORE_NAME_AUTO_ADD_DATE", true) // 存储名是否自动添加日期日志量大通常按日单位区分存储默认true
serverUrl = cmn.GetEnvStr("GLC_SERVER_URL", "") // 服务URL默认“”集群配置时自动获取地址可能不对可通过这个设定
serverIp = cmn.GetEnvStr("GLC_SERVER_IP", "") // 【X】服务IP默认“”当“”时会自动获取
enableSecurityKey = cmn.GetEnvBool("GLC_ENABLE_SECURITY_KEY", false) // web服务是否开启API秘钥校验默认false
headerSecurityKey = cmn.GetEnvStr("GLC_HEADER_SECURITY_KEY", "X-GLC-AUTH") // web服务API秘钥的header键名
securityKey = cmn.GetEnvStr("GLC_SECURITY_KEY", "glogcenter") // web服务API秘钥
enableWebGzip = cmn.GetEnvBool("GLC_ENABLE_WEB_GZIP", false) // web服务是否开启Gzip
enableAmqpConsume = cmn.GetEnvBool("GLC_ENABLE_AMQP_CONSUME", false) // 是否开启rabbitMq消费者接收日志
amqpAddr = cmn.GetEnvStr("GLC_AMQP_ADDR", "") // rabbitMq连接地址"amqp://user:password@ip:port/"
amqpQueueName = cmn.GetEnvStr("GLC_AMQP_QUEUE_NAME", "glc-log-queue") // rabbitMq队列名
amqpJsonFormat = cmn.GetEnvBool("GLC_AMQP_JSON_FORMAT", true) // rabbitMq消息文本是否为json格式默认true
saveDays = cmn.GetEnvInt("GLC_SAVE_DAYS", 180) // 日志分仓时的保留天数(0~1200)0表示不自动删除默认180天
enableLogin = cmn.GetEnvBool("GLC_ENABLE_LOGIN", false) // 是否开启用户密码登录默认“false”
sessionTimeout = cmn.GetEnvInt("GLC_SESSION_TIMEOUT", 30) // 登录会话超时时间默认“30”分钟
username = cmn.GetEnvStr("GLC_USERNAME", "glc") // 登录用户名默认“glc”
password = cmn.GetEnvStr("GLC_PASSWORD", "GLogCenter100%666") // 登录密码默认“GLogCenter100%666”
tokenSalt = cmn.GetEnvStr("GLC_TOKEN_SALT", "") // 令牌盐,默认“”
aryWhite = cmn.Split(cmn.GetEnvStr("GLC_WHITE_LIST", ""), ",") // IP或区域白名单逗号分隔默认“”
aryBlack = cmn.Split(cmn.GetEnvStr("GLC_BLACK_LIST", ""), ",") // IP或区域黑名单逗号分隔单个*代表全部,内网地址不受限制,默认“”
ipAddCity = cmn.GetEnvBool("GLC_IP_ADD_CITY", false) // IP是否要自动附加城市信息默认false
clusterMode = cmn.GetEnvBool("GLC_CLUSTER_MODE", false) // 是否开启集群模式默认false
splitUrls(cmn.GetEnvStr("GLC_CLUSTER_URLS", "")) // 从服务器地址,多个时逗号分开,默认“”
enableBackup = cmn.GetEnvBool("GLC_ENABLE_BACKUP", false) // 【X】是否开启备份默认false
glcGroup = cmn.GetEnvStr("GLC_GROUP", "default") // 【X】日志中心分组名默认“default”
minioUrl = cmn.GetEnvStr("GLC_MINIO_URL", "") // 【X】MINIO地址默认“”
minioUser = cmn.GetEnvStr("GLC_MINIO_USER", "") // 【X】MINIO用户名默认“”
minioPassword = cmn.GetEnvStr("GLC_MINIO_PASS", "") // 【X】MINIO密码默认“”
minioBucket = cmn.GetEnvStr("GLC_MINIO_BUCKET", "") // 【X】MINIO桶名默认“”
enableUploadMinio = cmn.GetEnvBool("GLC_ENABLE_UPLOAD_MINIO", false) // 【X】是否开启上传备份至MINIO服务器默认false
goMaxProcess = getGoMaxProcessConf(cmn.GetEnvInt("GLC_GOMAXPROCS", -1)) // 使用的最大CPU数量默认是最大CPU数量设定值不在实际数量范围是按最大看待
goMaxProcessIdx = getGoMaxProcessConf(cmn.GetEnvInt("GLC_GOMAXPROCS_IDX", -1)) // 创建索引使用的最大协程数量默认是最大CPU数量设定值不在实际数量范围是按最大看待
enableCors = cmn.GetEnvBool("GLC_ENABLE_CORS", false) // 是否允许跨域默认false
pageSize = getPageSizeConf(cmn.GetEnvInt("GLC_PAGE_SIZE", 100)) // 每次检索件数默认100有效范围1~1000
nearSearchSize = getNearSearchSizeConf(cmn.GetEnvInt("GLC_NEAR_SEARCH_SIZE", 200)) // 定位相邻检索的查询件数默认200有效范围50~1000
mulitLineSearch = cmn.GetEnvBool("GLC_SEARCH_MULIT_LINE", false) // 是否检索日志的全部行日志可能有换行默认false仅第一行
testMode = cmn.GetEnvBool("GLC_TEST_MODE", false) // 是否测试模式默认false
enableChatAi = cmn.GetEnvBool("GLC_ENABLE_CHATAI", true) // 是否开启GLC智能助手默认true
}
// 取配置: 是否开启GLC智能助手
func IsEnableChatAi() bool {
return enableChatAi
}
// 取配置: 定位相邻检索的查询件数可通过环境变量“GLC_NEAR_SEARCH_SIZE”设定默认200件
func GetNearSearchSize() int {
return nearSearchSize
}
// 取配置: IP是否要自动附加城市信息默认false
func IsIpAddCity() bool {
return ipAddCity
}
// 取配置: 登录会话超时时间可通过环境变量“GLC_SESSION_TIMEOUT”设定默认“30”分钟
func GetSessionTimeout() int {
return sessionTimeout
}
// 取配置: 白名单可通过环境变量“GLC_WHITE_LIST”设定默认“”
func GetWhiteList() []string {
return aryWhite
}
// 取配置: 黑名单可通过环境变量“GLC_BLACK_LIST”设定默认“”
func GetBlackList() []string {
return aryBlack
}
// 取配置: 令牌盐可通过环境变量“GLC_TOKEN_SALT”设定默认“”
func GetTokenSalt() string {
return tokenSalt
}
// 取配置: 是否测试模式可通过环境变量“GLC_TEST_MODE”设定默认false
func IsTestMode() bool {
return testMode
}
// 取配置: 是否检索日志的全部行可通过环境变量“GLC_SEARCH_MULIT_LINE”设定默认false
func IsMulitLineSearch() bool {
return mulitLineSearch
}
// 取配置: 每次检索件数可通过环境变量“GLC_PAGE_SIZE”设定默认100有效范围1~1000
func GetPageSize() int {
return pageSize
}
func getNearSearchSizeConf(n int) int {
if n < 50 {
n = 50
}
if n > 1000 {
n = 1000
}
return n
}
func getPageSizeConf(n int) int {
if n < 1 {
n = 1
}
if n > 1000 {
n = 1000
}
return n
}
// 取配置: 是否允许跨域可通过环境变量“GLC_ENABLE_CROSS”设定默认false
func IsEnableCors() bool {
return enableCors
}
// 取配置: 创建索引使用的最大协程数量默认是最大CPU数量设定值不在实际数量范围是按最大看待
func GetGoMaxProcessIdx() int {
return goMaxProcessIdx
}
// 取配置: 使用的最大CPU数量可通过环境变量“GLC_GOMAXPROCS”设定默认最大CPU数量
func GetGoMaxProcess() int {
return goMaxProcess
}
func getGoMaxProcessConf(n int) int {
max := runtime.NumCPU()
if n < 1 || n > max {
n = max
}
return n
}
// 取配置: 服务URL集群配置时自动获取地址可能不对可通过环境变量“GLC_ENABLE_BACKUP”设定默认“”
func GetServerUrl() string {
return serverUrl
}
// 取配置: 是否开启MINIO备份可通过环境变量“GLC_ENABLE_BACKUP”设定默认false
func IsEnableBackup() bool {
return enableBackup
}
// 取配置: 日志中心分组名可通过环境变量“GLC_GROUP”设定默认“default”
func GetGlcGroup() string {
return glcGroup
}
// 取配置: MINIO地址可通过环境变量“GLC_MINIO_URL”设定默认“”
func GetMinioUrl() string {
return minioUrl
}
// 取配置: MINIO用户名可通过环境变量“GLC_MINIO_USER”设定默认“”
func GetMinioUser() string {
return minioUser
}
// 取配置: MINIO密码可通过环境变量“GLC_MINIO_PASS”设定默认“”
func GetMinioPassword() string {
return minioPassword
}
// 取配置: MINIO桶名可通过环境变量“GLC_MINIO_BUCKET”设定默认“”
func GetMinioBucket() string {
return minioBucket
}
// 取配置: 是否开启上传备份至MINIO服务器可通过环境变量“GLC_ENABLE_UPLOAD_MINIO”设定默认false
func IsEnableUploadMinio() bool {
return enableUploadMinio
}
// 取配置: 是否开启转发日志到其他GLC服务可通过环境变量“GLC_CLUSTER_MODE”设定默认false
func IsClusterMode() bool {
return clusterMode
}
// 取配置: 从服务器地址可通过环境变量“GLC_SLAVE_HOSTS”设定默认“”
func GetClusterUrls() []string {
return clusterUrls
}
func splitUrls(str string) {
hosts := strings.Split(str, ";")
for i := 0; i < len(hosts); i++ {
url := strings.TrimSpace(hosts[i])
if url != "" {
clusterUrls = append(clusterUrls, url)
}
}
// 倒序
sort.Slice(clusterUrls, func(i, j int) bool {
return clusterUrls[i] > clusterUrls[j]
})
}
// 取配置: 是否开启用户密码登录可通过环境变量“GLC_ENABLE_LOGIN”设定默认“false”
func IsEnableLogin() bool {
return enableLogin
}
// 取配置: 登录用户名可通过环境变量“GLC_USERNAME”设定默认“glc”
func GetUsername() string {
return username
}
// 存取配置: 登录用户名可通过环境变量“GLC_PASSWORD”设定默认“glogcenter”
func GetPassword() string {
return password
}
func SetPassword(psw string) {
password = psw
}
// 取配置: 日志分仓时的保留天数(0~180)0表示不自动删除可通过环境变量“GLC_SAVE_DAYS”设定默认180天
func GetSaveDays() int {
if saveDays < 0 {
saveDays = 0
}
if saveDays > 1200 {
saveDays = 1200
}
return saveDays
}
// 取配置: rabbitMq消息文本是否为json格式可通过环境变量“GLC_AMQP_JSON_FORMAT”设定默认值“true”
func IsAmqpJsonFormat() bool {
return amqpJsonFormat
}
// 取配置: rabbitMq连接地址可通过环境变量“GLC_AMQP_ADDR”设定默认值“”
func GetAmqpQueueName() string {
return amqpQueueName
}
// 取配置: rabbitMq连接地址可通过环境变量“GLC_AMQP_ADDR”设定默认值“”
func GetAmqpAddr() string {
return amqpAddr
}
// 取配置: 是否开启rabbitMq消费者接收日志可通过环境变量“GLC_ENABLE_AMQP_CONSUME”设定默认值“false”
func IsEnableAmqpConsume() bool {
return enableAmqpConsume
}
// 取配置: web服务API秘钥的header键名可通过环境变量“GLC_HEADER_SECURITY_KEY”设定默认值“X-GLC-AUTH”
func IsEnableWebGzip() bool {
return enableWebGzip
}
// 取配置: web服务API秘钥的header键名可通过环境变量“GLC_HEADER_SECURITY_KEY”设定默认值“X-GLC-AUTH”
func IsEnableSecurityKey() bool {
return enableSecurityKey
}
// 取配置: web服务API秘钥的header键名可通过环境变量“GLC_HEADER_SECURITY_KEY”设定默认值“X-GLC-AUTH”
func GetHeaderSecurityKey() string {
return headerSecurityKey
}
// 取配置: web服务API秘钥可通过环境变量“GLC_SECURITY_KEY”设定默认值“glogcenter”
func GetSecurityKey() string {
return securityKey
}
// 取配置: web服务端口可通过环境变量“GLC_CONTEXT_PATH”设定默认值“8080”
func GetContextPath() string {
return contextPath
}
// 取配置: 服务IP可通过环境变量“GLC_SERVER_IP”设定默认值“”自动获取
func GetServerIp() string {
return serverIp
}
// 取配置: web服务端口可通过环境变量“GLC_SERVER_PORT”设定默认值“8080”
func GetServerPort() string {
return serverPort
}
// 取配置存储根目录可通过环境变量“GLC_STORE_ROOT”设定默认值“/glogcenter”
func GetStorageRoot() string {
return storeRoot
}
// 取配置存储通道长度可通过环境变量“GLC_STORE_CHAN_LENGTH”设定默认值“64”
func GetStoreChanLength() int {
return storeChanLength
}
// 取配置最大闲置时间可通过环境变量“GLC_MAX_IDLE_TIME”设定默认值“180”超过闲置时间将自动关闭存储器0时表示不关闭
func GetMaxIdleTime() int {
return maxIdleTime
}
// 取配置存储名是否自动添加日期日志量大通常按日单位区分存储可通过环境变量“GLC_STORE_NAME_AUTO_ADD_DATE”设定默认值“true”
func IsStoreNameAutoAddDate() bool {
return storeNameAutoAddDate
}