This commit is contained in:
gotoeasy 2024-04-08 09:26:17 +08:00
parent c05556d41c
commit 86567c8070
3 changed files with 59 additions and 44 deletions

View File

@ -53,6 +53,7 @@ var enableUploadMinio bool
var goMaxProcess int
var enableCors bool
var pageSize int
var nearSearchSize int
var mulitLineSearch bool
var testMode bool
var tokenSalt string
@ -66,42 +67,48 @@ func init() {
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数量设定值不在实际数量范围是按最大看待
enableCors = cmn.GetEnvBool("GLC_ENABLE_CORS", false) // 是否允许跨域默认false
pageSize = getPageSizeConf(cmn.GetEnvInt("GLC_PAGE_SIZE", 100)) // 每次检索件数默认100有效范围1~1000
mulitLineSearch = cmn.GetEnvBool("GLC_SEARCH_MULIT_LINE", false) // 是否检索日志的全部行日志可能有换行默认false仅第一行
testMode = cmn.GetEnvBool("GLC_TEST_MODE", false) // 是否测试模式默认false
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数量设定值不在实际数量范围是按最大看待
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
}
// 取配置: 定位相邻检索的查询件数可通过环境变量“GLC_NEAR_SEARCH_SIZE”设定默认200件
func GetNearSearchSize() int {
return nearSearchSize
}
// 取配置: IP是否要自动附加城市信息默认false
@ -143,6 +150,15 @@ func IsMulitLineSearch() bool {
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

View File

@ -155,19 +155,18 @@ func (e *Engine) Search(cond *search.SearchCondition) *search.SearchResult {
// 多关键词查询模式
if cond.NewNearId > 0 {
// 相邻检索模式的判断及条件准备
max := conf.GetPageSize()
leftSize := 20
max := conf.GetNearSearchSize()
cond.CurrentId = cond.NewNearId
isForward := cond.OldNearId < 1 || cond.NewNearId < cond.OldNearId // 是否向下检索更多的旧日志
// 搜索更多的新数据
// 反向检索前x条
cond.Forward = false
if isForward {
cond.SearchSize = leftSize
} else {
cond.SearchSize = max - leftSize
leftSize := 20
if !isForward {
leftSize = max - leftSize
}
cond.Forward = false
cond.SearchSize = leftSize
rs = search.SearchWordIndex(e.storeName, cond)
// 定位日志1条固定不管是否满足检索条件
ldm := search.GetLogDataModelById(cond.NearStoreName, cond.NewNearId)

View File

@ -364,7 +364,7 @@ func findSame(cond *SearchCondition, minDocumentId uint32, maxDocumentId uint32,
// 简单检查排除没结果的情景
totalCount := minIdx.idxwordStorage.GetTotalCount(minIdx.word)
if totalCount == 0 || (totalCount == 1 && cond.CurrentId > 0) {
if totalCount == 0 || (cond.NewNearId == 0 && totalCount == 1 && cond.CurrentId > 0) {
return rs // 索引件数0、或只有1条又还要跳过都是找不到
}