diff --git a/controller/log.go b/controller/log.go index 20130642..8d67c83e 100644 --- a/controller/log.go +++ b/controller/log.go @@ -196,7 +196,7 @@ func DeleteHistoryLogs(c *gin.Context) { }) return } - count, err := model.DeleteOldLog(targetTimestamp) + count, err := model.DeleteOldLog(c.Request.Context(), targetTimestamp, 100) if err != nil { c.JSON(http.StatusOK, gin.H{ "success": false, diff --git a/model/log.go b/model/log.go index fbae4528..0a891fcd 100644 --- a/model/log.go +++ b/model/log.go @@ -1,6 +1,7 @@ package model import ( + "context" "fmt" "one-api/common" "os" @@ -340,7 +341,25 @@ func SumUsedToken(logType int, startTimestamp int64, endTimestamp int64, modelNa return token } -func DeleteOldLog(targetTimestamp int64) (int64, error) { - result := LOG_DB.Where("created_at < ?", targetTimestamp).Delete(&Log{}) - return result.RowsAffected, result.Error +func DeleteOldLog(ctx context.Context, targetTimestamp int64, limit int) (int64, error) { + var total int64 = 0 + + for { + if nil != ctx.Err() { + return total, ctx.Err() + } + + result := LOG_DB.Where("created_at < ?", targetTimestamp).Limit(limit).Delete(&Log{}) + if nil != result.Error { + return total, result.Error + } + + total += result.RowsAffected + + if result.RowsAffected < int64(limit) { + break + } + } + + return total, nil }