mirror of https://github.com/shunfei/cronsun
51 lines
1012 B
Go
51 lines
1012 B
Go
package web
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/shunfei/cronsun"
|
|
"github.com/shunfei/cronsun/log"
|
|
mgo "gopkg.in/mgo.v2"
|
|
"gopkg.in/mgo.v2/bson"
|
|
)
|
|
|
|
func RunLogCleaner(cleanPeriod, expiration time.Duration) (close chan struct{}) {
|
|
t := time.NewTicker(cleanPeriod)
|
|
close = make(chan struct{})
|
|
go func() {
|
|
for {
|
|
select {
|
|
case <-t.C:
|
|
cleanupLogs(expiration)
|
|
case <-close:
|
|
return
|
|
}
|
|
}
|
|
}()
|
|
|
|
return
|
|
}
|
|
|
|
func cleanupLogs(expiration time.Duration) {
|
|
err := cronsun.GetDb().WithC(cronsun.Coll_JobLog, func(c *mgo.Collection) error {
|
|
_, err := c.RemoveAll(bson.M{"$or": []bson.M{
|
|
bson.M{"$and": []bson.M{
|
|
bson.M{"cleanup": bson.M{"$exists": true}},
|
|
bson.M{"cleanup": bson.M{"$lte": time.Now()}},
|
|
}},
|
|
bson.M{"$and": []bson.M{
|
|
bson.M{"cleanup": bson.M{"$exists": false}},
|
|
bson.M{"endTime": bson.M{"$lte": time.Now().Add(-expiration)}},
|
|
}},
|
|
}})
|
|
|
|
return err
|
|
})
|
|
|
|
if err != nil {
|
|
log.Errorf("[Cleaner] Failed to remove expired logs: %s", err.Error())
|
|
return
|
|
}
|
|
|
|
}
|