safing-portbase/notifications/cleaner.go
2020-09-16 08:46:12 +02:00

50 lines
756 B
Go

package notifications
import (
"context"
"time"
"github.com/safing/portbase/log"
)
func cleaner(ctx context.Context) error {
ticker := time.NewTicker(5 * time.Second)
defer ticker.Stop()
L:
for {
select {
case <-ctx.Done():
break L
case <-ticker.C:
deleteExpiredNotifs()
}
}
return nil
}
func deleteExpiredNotifs() {
now := time.Now().Unix()
notsLock.Lock()
defer notsLock.Unlock()
toDelete := make([]*Notification, 0, len(nots))
for _, n := range nots {
n.Lock()
if now > n.Expires {
toDelete = append(toDelete, n)
}
n.Unlock()
}
for _, n := range toDelete {
n.Lock()
err := n.delete(true)
n.Unlock()
if err != nil {
log.Debugf("notifications: failed to delete %s: %s", n.EventID, err)
}
}
}