Просмотр исходного кода

fix: clean not do not concurrent (#93)

* fix: clean not do not concurrent

* fix
zijiren 9 месяцев назад
Родитель
Сommit
637f8f93e1
4 измененных файлов с 7 добавлено и 4 удалено
  1. 1 1
      README.md
  2. 1 1
      README.zh.md
  3. 4 1
      main.go
  4. 1 1
      model/log.go

+ 1 - 1
README.md

@@ -110,7 +110,7 @@ docker-compose up -d
 - `LOG_DETAIL_REQUEST_BODY_MAX_SIZE`: Maximum size for request body in log details, default is `128KB`
 - `LOG_DETAIL_RESPONSE_BODY_MAX_SIZE`: Maximum size for response body in log details, default is `128KB`
 - `LOG_DETAIL_STORAGE_HOURS`: Hours to store log details, default is `72` (3 days)
-- `CLEAN_LOG_BATCH_SIZE`: Batch size for cleaning logs, default is `2000`
+- `CLEAN_LOG_BATCH_SIZE`: Batch size for cleaning logs, cleaning interval is 1 minute, default is `2000`
 
 ### Service Control
 

+ 1 - 1
README.zh.md

@@ -111,7 +111,7 @@ docker-compose up -d
 - `LOG_DETAIL_REQUEST_BODY_MAX_SIZE`: 日志详情请求体最大大小,默认 `128KB`
 - `LOG_DETAIL_RESPONSE_BODY_MAX_SIZE`: 日志详情响应体最大大小,默认 `128KB`
 - `LOG_DETAIL_STORAGE_HOURS`: 日志详情存储时间,默认 `72`(3 天)
-- `CLEAN_LOG_BATCH_SIZE`: 日志清理批量大小,默认 `2000`
+- `CLEAN_LOG_BATCH_SIZE`: 日志清理批量大小,清理间隔一分钟,默认 `2000`
 
 ### 服务控制
 

+ 4 - 1
main.go

@@ -243,7 +243,7 @@ func DetectIPGroups() {
 func cleanLog(ctx context.Context) {
 	log.Info("clean log start")
 	// the interval should not be too large to avoid cleaning too much at once
-	ticker := time.NewTicker(time.Second * 15)
+	ticker := time.NewTicker(time.Minute)
 	defer ticker.Stop()
 
 	for {
@@ -251,6 +251,9 @@ func cleanLog(ctx context.Context) {
 		case <-ctx.Done():
 			return
 		case <-ticker.C:
+			if !trylock.Lock("cleanLog", time.Minute) {
+				continue
+			}
 			optimize := trylock.Lock("optimizeLog", time.Hour*24)
 			err := model.CleanLog(int(config.GetCleanLogBatchSize()), optimize)
 			if err != nil {

+ 1 - 1
model/log.go

@@ -266,7 +266,7 @@ func cleanLog(batchSize int, optimize bool) error {
 			"created_at < ?",
 			time.Now().Truncate(time.Hour).Add(-time.Duration(logContentStorageHours)*time.Hour),
 		).
-		Where("endpoint IS NOT NULL").
+		Where("content IS NOT NULL").
 		Order("created_at DESC").
 		Limit(1).
 		Select("id").