You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.7 KiB
74 lines
1.7 KiB
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) |
|
} |
|
}
|
|
|