自动删除N天之前过期的IP条目

This commit is contained in:
刘祥超
2022-01-30 11:24:31 +08:00
parent 84e2628769
commit 0de6fa5ce8
2 changed files with 43 additions and 0 deletions

View File

@@ -291,6 +291,16 @@ func (this *IPItemDAO) ListIPItemsWithListId(tx *dbs.Tx, listId int64, keyword s
// ListIPItemsAfterVersion 根据版本号查找IP列表
func (this *IPItemDAO) ListIPItemsAfterVersion(tx *dbs.Tx, version int64, size int64) (result []*IPItem, err error) {
// 删除很早之前过期的
_, err = this.Query(tx).
Where("(expiredAt>0 AND expiredAt<=:timestamp)").
State(IPItemStateDisabled).
Param("timestamp", time.Now().Unix()-7*86400). // N 天之前过期的
Delete()
if err != nil {
return nil, err
}
// 将过期的设置为已删除,这样是为了在 expiredAt<UNIX_TIMESTAMP()边缘节点让过期的IP有一个执行删除的机会
ones, _, err := this.Query(tx).
ResultPk().

View File

@@ -3,7 +3,10 @@ package models
import (
_ "github.com/go-sql-driver/mysql"
"github.com/iwind/TeaGo/dbs"
"github.com/iwind/TeaGo/rands"
"github.com/iwind/TeaGo/types"
"testing"
"time"
)
func TestIPItemDAO_NotifyClustersUpdate(t *testing.T) {
@@ -27,3 +30,33 @@ func TestIPItemDAO_DisableIPItemsWithListId(t *testing.T) {
}
t.Log("ok")
}
func TestIPItemDAO_ListIPItemsAfterVersion(t *testing.T) {
dbs.NotifyReady()
var tx *dbs.Tx
_, err := SharedIPItemDAO.ListIPItemsAfterVersion(tx, 0, 100)
if err != nil {
t.Fatal(err)
}
t.Log("ok")
}
func TestIPItemDAO_CreateManyIPs(t *testing.T) {
dbs.NotifyReady()
var tx *dbs.Tx
var dao = NewIPItemDAO()
var n = 5
for i := 0; i < n; i++ {
itemId, err := dao.CreateIPItem(tx, 1, "192."+types.String(rands.Int(0, 255))+"."+types.String(rands.Int(0, 255))+"."+types.String(rands.Int(0, 255)), "", time.Now().Unix()-86400, "test", IPItemTypeIPv4, "warning", 0, 0, 0, 0, 0, 0, 0)
if err != nil {
t.Fatal(err)
}
err = dao.Query(tx).Pk(itemId).Set("state", 0).UpdateQuickly()
if err != nil {
t.Fatal(err)
}
}
t.Log("ok")
}