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
|
||
|
}
|
||
|
|
||
|
}
|