Finish the clean expired deleted files feature.
This commit is contained in:
@ -255,7 +255,17 @@ func (this *MatterDao) FindByUuids(uuids []string, sortArray []builder.OrderPair
|
|||||||
|
|
||||||
return matters
|
return matters
|
||||||
}
|
}
|
||||||
func (this *MatterDao) PlainPage(page int, pageSize int, puuid string, userUuid string, name string, dir string, deleted string, extensions []string, sortArray []builder.OrderPair) (int, []*Matter) {
|
func (this *MatterDao) PlainPage(
|
||||||
|
page int,
|
||||||
|
pageSize int,
|
||||||
|
puuid string,
|
||||||
|
userUuid string,
|
||||||
|
name string,
|
||||||
|
dir string,
|
||||||
|
deleted string,
|
||||||
|
deleteTimeBefore *time.Time,
|
||||||
|
extensions []string,
|
||||||
|
sortArray []builder.OrderPair) (int, []*Matter) {
|
||||||
|
|
||||||
var wp = &builder.WherePair{}
|
var wp = &builder.WherePair{}
|
||||||
|
|
||||||
@ -271,6 +281,10 @@ func (this *MatterDao) PlainPage(page int, pageSize int, puuid string, userUuid
|
|||||||
wp = wp.And(&builder.WherePair{Query: "name LIKE ?", Args: []interface{}{"%" + name + "%"}})
|
wp = wp.And(&builder.WherePair{Query: "name LIKE ?", Args: []interface{}{"%" + name + "%"}})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if deleteTimeBefore != nil {
|
||||||
|
wp = wp.And(&builder.WherePair{Query: "delete_time < ?", Args: []interface{}{&deleteTimeBefore}})
|
||||||
|
}
|
||||||
|
|
||||||
if dir == TRUE {
|
if dir == TRUE {
|
||||||
wp = wp.And(&builder.WherePair{Query: "dir = ?", Args: []interface{}{1}})
|
wp = wp.And(&builder.WherePair{Query: "dir = ?", Args: []interface{}{1}})
|
||||||
} else if dir == FALSE {
|
} else if dir == FALSE {
|
||||||
@ -308,30 +322,40 @@ func (this *MatterDao) PlainPage(page int, pageSize int, puuid string, userUuid
|
|||||||
}
|
}
|
||||||
func (this *MatterDao) Page(page int, pageSize int, puuid string, userUuid string, name string, dir string, deleted string, extensions []string, sortArray []builder.OrderPair) *Pager {
|
func (this *MatterDao) Page(page int, pageSize int, puuid string, userUuid string, name string, dir string, deleted string, extensions []string, sortArray []builder.OrderPair) *Pager {
|
||||||
|
|
||||||
count, matters := this.PlainPage(page, pageSize, puuid, userUuid, name, dir, deleted, extensions, sortArray)
|
count, matters := this.PlainPage(page, pageSize, puuid, userUuid, name, dir, deleted, nil, extensions, sortArray)
|
||||||
pager := NewPager(page, pageSize, count, matters)
|
pager := NewPager(page, pageSize, count, matters)
|
||||||
|
|
||||||
return pager
|
return pager
|
||||||
}
|
}
|
||||||
|
|
||||||
//handle matter page by page.
|
//handle matter page by page.
|
||||||
func (this *MatterDao) PageHandle(puuid string, userUuid string, name string, dir string, deleted string, fun func(matter *Matter)) {
|
func (this *MatterDao) PageHandle(
|
||||||
|
puuid string,
|
||||||
|
userUuid string,
|
||||||
|
name string,
|
||||||
|
dir string,
|
||||||
|
deleted string,
|
||||||
|
deleteTimeBefore *time.Time,
|
||||||
|
sortArray []builder.OrderPair,
|
||||||
|
fun func(matter *Matter)) {
|
||||||
|
|
||||||
//delete share and bridges.
|
|
||||||
pageSize := 1000
|
pageSize := 1000
|
||||||
sortArray := []builder.OrderPair{
|
if sortArray == nil || len(sortArray) == 0 {
|
||||||
|
sortArray = []builder.OrderPair{
|
||||||
{
|
{
|
||||||
Key: "uuid",
|
Key: "uuid",
|
||||||
Value: DIRECTION_ASC,
|
Value: DIRECTION_ASC,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
count, _ := this.PlainPage(0, pageSize, puuid, userUuid, name, dir, deleted, nil, sortArray)
|
}
|
||||||
|
|
||||||
|
count, _ := this.PlainPage(0, pageSize, puuid, userUuid, name, dir, deleted, deleteTimeBefore, nil, sortArray)
|
||||||
if count > 0 {
|
if count > 0 {
|
||||||
var totalPages = int(math.Ceil(float64(count) / float64(pageSize)))
|
var totalPages = int(math.Ceil(float64(count) / float64(pageSize)))
|
||||||
|
|
||||||
var page int
|
var page int
|
||||||
for page = 0; page < totalPages; page++ {
|
for page = 0; page < totalPages; page++ {
|
||||||
_, matters := this.PlainPage(0, pageSize, puuid, userUuid, name, dir, deleted, nil, sortArray)
|
_, matters := this.PlainPage(0, pageSize, puuid, userUuid, name, dir, deleted, deleteTimeBefore, nil, sortArray)
|
||||||
for _, matter := range matters {
|
for _, matter := range matters {
|
||||||
fun(matter)
|
fun(matter)
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"archive/zip"
|
"archive/zip"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/eyebluecn/tank/code/core"
|
"github.com/eyebluecn/tank/code/core"
|
||||||
|
"github.com/eyebluecn/tank/code/tool/builder"
|
||||||
"github.com/eyebluecn/tank/code/tool/download"
|
"github.com/eyebluecn/tank/code/tool/download"
|
||||||
"github.com/eyebluecn/tank/code/tool/i18n"
|
"github.com/eyebluecn/tank/code/tool/i18n"
|
||||||
"github.com/eyebluecn/tank/code/tool/result"
|
"github.com/eyebluecn/tank/code/tool/result"
|
||||||
@ -1151,7 +1152,7 @@ func (this *MatterService) DeleteByPhysics(request *http.Request, user *User) {
|
|||||||
func (this *MatterService) deleteFolderByPhysics(request *http.Request, dirMatter *Matter, user *User) {
|
func (this *MatterService) deleteFolderByPhysics(request *http.Request, dirMatter *Matter, user *User) {
|
||||||
|
|
||||||
//scan user's file. scan level by level.
|
//scan user's file. scan level by level.
|
||||||
this.matterDao.PageHandle(dirMatter.Uuid, user.Uuid, "", "", "", func(matter *Matter) {
|
this.matterDao.PageHandle(dirMatter.Uuid, user.Uuid, "", "", "", nil, nil, func(matter *Matter) {
|
||||||
|
|
||||||
if matter.Dir {
|
if matter.Dir {
|
||||||
//delete children first.
|
//delete children first.
|
||||||
@ -1195,7 +1196,7 @@ func (this *MatterService) scanPhysicsFolder(request *http.Request, dirInfo os.F
|
|||||||
}
|
}
|
||||||
|
|
||||||
//fetch all matters under this folder.
|
//fetch all matters under this folder.
|
||||||
_, matters := this.matterDao.PlainPage(0, 1000, dirMatter.Uuid, user.Uuid, "", "", "", nil, nil)
|
_, matters := this.matterDao.PlainPage(0, 1000, dirMatter.Uuid, user.Uuid, "", "", "", nil, nil, nil)
|
||||||
nameMatterMap := make(map[string]*Matter)
|
nameMatterMap := make(map[string]*Matter)
|
||||||
for _, m := range matters {
|
for _, m := range matters {
|
||||||
nameMatterMap[m.Name] = m
|
nameMatterMap[m.Name] = m
|
||||||
@ -1255,3 +1256,39 @@ func (this *MatterService) scanPhysicsFolder(request *http.Request, dirInfo os.F
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//clean all the expired deleted matters
|
||||||
|
func (this *MatterService) CleanExpiredDeletedMatters() {
|
||||||
|
//mock a request.
|
||||||
|
request := &http.Request{}
|
||||||
|
|
||||||
|
preference := this.preferenceService.Fetch()
|
||||||
|
|
||||||
|
this.userDao.PageHandle("", "", func(user *User) {
|
||||||
|
|
||||||
|
this.logger.Info("Clean %s 's deleted matters", user.Username)
|
||||||
|
|
||||||
|
thenDate := time.Now()
|
||||||
|
thenDate = thenDate.AddDate(0, 0, int(-preference.DeletedKeepDays))
|
||||||
|
thenDate = util.FirstSecondOfDay(thenDate)
|
||||||
|
|
||||||
|
//first remove all the matter(not dir).
|
||||||
|
this.matterDao.PageHandle("", "", "", FALSE, TRUE, &thenDate, nil, func(matter *Matter) {
|
||||||
|
this.Delete(request, matter, user)
|
||||||
|
})
|
||||||
|
|
||||||
|
sortArray := []builder.OrderPair{
|
||||||
|
{
|
||||||
|
Key: "path",
|
||||||
|
Value: DIRECTION_DESC,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
//remove all the deleted directories. sort by path.
|
||||||
|
this.matterDao.PageHandle("", "", "", TRUE, TRUE, &thenDate, sortArray, func(matter *Matter) {
|
||||||
|
this.Delete(request, matter, user)
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -58,11 +58,11 @@ func (this *TaskService) InitCleanFootprintTask() {
|
|||||||
//use standard cron expression. 5 fields. ()
|
//use standard cron expression. 5 fields. ()
|
||||||
expression := "10 0 * * *"
|
expression := "10 0 * * *"
|
||||||
cronJob := cron.New()
|
cronJob := cron.New()
|
||||||
entryId, err := cronJob.AddFunc(expression, this.footprintService.CleanOldData)
|
_, err := cronJob.AddFunc(expression, this.footprintService.CleanOldData)
|
||||||
core.PanicError(err)
|
core.PanicError(err)
|
||||||
cronJob.Start()
|
cronJob.Start()
|
||||||
|
|
||||||
this.logger.Info("[cron job] Every day 00:10 delete Footprint data of 8 days ago. entryId = %d", entryId)
|
this.logger.Info("[cron job] Every day 00:10 delete Footprint data of 8 days ago.")
|
||||||
}
|
}
|
||||||
|
|
||||||
//init the elt task.
|
//init the elt task.
|
||||||
@ -70,11 +70,23 @@ func (this *TaskService) InitEtlTask() {
|
|||||||
|
|
||||||
expression := "5 0 * * *"
|
expression := "5 0 * * *"
|
||||||
cronJob := cron.New()
|
cronJob := cron.New()
|
||||||
entryId, err := cronJob.AddFunc(expression, this.dashboardService.Etl)
|
_, err := cronJob.AddFunc(expression, this.dashboardService.Etl)
|
||||||
core.PanicError(err)
|
core.PanicError(err)
|
||||||
cronJob.Start()
|
cronJob.Start()
|
||||||
|
|
||||||
this.logger.Info("[cron job] Everyday 00:05 ETL dashboard data. entryId = %d", entryId)
|
this.logger.Info("[cron job] Everyday 00:05 ETL dashboard data.")
|
||||||
|
}
|
||||||
|
|
||||||
|
//init the clean deleted matters task.
|
||||||
|
func (this *TaskService) InitCleanDeletedMattersTask() {
|
||||||
|
|
||||||
|
expression := "0 1 * * *"
|
||||||
|
cronJob := cron.New()
|
||||||
|
_, err := cronJob.AddFunc(expression, this.matterService.CleanExpiredDeletedMatters)
|
||||||
|
core.PanicError(err)
|
||||||
|
cronJob.Start()
|
||||||
|
|
||||||
|
this.logger.Info("[cron job] Everyday 01:00 Clean deleted matters.")
|
||||||
}
|
}
|
||||||
|
|
||||||
//scan task.
|
//scan task.
|
||||||
@ -165,11 +177,11 @@ func (this *TaskService) InitScanTask() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.scanTaskCron = cron.New()
|
this.scanTaskCron = cron.New()
|
||||||
entryId, err := this.scanTaskCron.AddFunc(scanConfig.Cron, this.doScanTask)
|
_, err := this.scanTaskCron.AddFunc(scanConfig.Cron, this.doScanTask)
|
||||||
core.PanicError(err)
|
core.PanicError(err)
|
||||||
this.scanTaskCron.Start()
|
this.scanTaskCron.Start()
|
||||||
|
|
||||||
this.logger.Info("[cron job] %s do scan task. entryId = %d", scanConfig.Cron, entryId)
|
this.logger.Info("[cron job] %s do scan task.", scanConfig.Cron)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *TaskService) Bootstrap() {
|
func (this *TaskService) Bootstrap() {
|
||||||
@ -180,6 +192,9 @@ func (this *TaskService) Bootstrap() {
|
|||||||
//load the etl task.
|
//load the etl task.
|
||||||
this.InitEtlTask()
|
this.InitEtlTask()
|
||||||
|
|
||||||
|
//load the clean deleted matters task.
|
||||||
|
this.InitCleanDeletedMattersTask()
|
||||||
|
|
||||||
//load the scan task.
|
//load the scan task.
|
||||||
this.InitScanTask()
|
this.InitScanTask()
|
||||||
|
|
||||||
|
@ -27,11 +27,11 @@ func (this *TankLogger) Init() {
|
|||||||
|
|
||||||
expression := "0 0 * * *"
|
expression := "0 0 * * *"
|
||||||
cronJob := cron.New()
|
cronJob := cron.New()
|
||||||
entryId, err := cronJob.AddFunc(expression, this.maintain)
|
_, err := cronJob.AddFunc(expression, this.maintain)
|
||||||
core.PanicError(err)
|
core.PanicError(err)
|
||||||
cronJob.Start()
|
cronJob.Start()
|
||||||
|
|
||||||
this.Info("[cron job] Every day 00:00 maintain log file. entryId = %d", entryId)
|
this.Info("[cron job] Every day 00:00 maintain log file.")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *TankLogger) Destroy() {
|
func (this *TankLogger) Destroy() {
|
||||||
|
Reference in New Issue
Block a user