go-common/app/job/main/history/service/delete.go
2019-04-22 18:49:16 +08:00

75 lines
1.7 KiB
Go

package service
import (
"context"
"time"
"go-common/library/log"
"go-common/library/stat/prom"
)
const _businessArchive = 3
const _delLen = 1000
func (s *Service) shouldDelete() bool {
now := time.Now()
return now.Hour() >= s.c.Job.DeleteStartHour && now.Hour() < s.c.Job.DeleteEndHour
}
func (s *Service) deleteproc() {
for {
now := time.Now()
if !s.shouldDelete() {
time.Sleep(time.Minute)
continue
}
if ok, err := s.dao.DelLock(context.Background()); err != nil {
time.Sleep(time.Second)
continue
} else if !ok {
log.Info("not get lock wait.")
time.Sleep(time.Hour * 6)
continue
}
log.Info("start clean db")
bs, err := s.dao.Businesses(context.Background())
if err != nil {
time.Sleep(time.Second)
continue
}
for _, b := range bs {
if b.TTL <= 0 {
continue
}
endTime := time.Unix(now.Unix()-b.TTL, 0)
startTime, err := s.dao.EarlyHistory(context.Background(), b.ID)
if err != nil {
continue
}
log.Info("start clean business %s start:%v end: %v", b.Name, startTime, endTime)
var count int64
for startTime.Before(endTime) {
if !s.shouldDelete() {
log.Info("%s not delete time.", b.Name)
break
}
partTime := startTime.Add(time.Duration(s.c.Job.DeleteStep))
rows, err := s.dao.DeleteHistories(context.Background(), b.ID, startTime, partTime)
prom.BusinessInfoCount.Add("del-"+b.Name, rows)
if err != nil {
time.Sleep(time.Second)
continue
}
count += rows
// 删除完这个时间段的数据后再删除下个时间段
if rows == 0 {
startTime = partTime
}
}
log.Info("end clean business %s, rows: %v", b.Name, count)
}
log.Info("end clean db")
time.Sleep(time.Hour * 6)
}
}