mirror of
https://github.com/safing/portmaster
synced 2025-09-01 18:19:12 +00:00
58 lines
1.2 KiB
Go
58 lines
1.2 KiB
Go
package core
|
|
|
|
import (
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/safing/portbase/database"
|
|
"github.com/safing/portbase/log"
|
|
|
|
"github.com/safing/portmaster/core/structure"
|
|
)
|
|
|
|
var (
|
|
maintenanceWg sync.WaitGroup
|
|
maintenanceShortTickDuration = 10 * time.Minute
|
|
maintenanceLongTickDuration = 1 * time.Hour
|
|
)
|
|
|
|
func startDB() error {
|
|
err := database.Initialize(dataDir, structure.Root())
|
|
if err == nil {
|
|
maintenanceWg.Add(1)
|
|
go maintenanceWorker()
|
|
}
|
|
return err
|
|
}
|
|
|
|
func stopDB() error {
|
|
maintenanceWg.Wait()
|
|
return database.Shutdown()
|
|
}
|
|
|
|
func maintenanceWorker() {
|
|
ticker := time.NewTicker(maintenanceShortTickDuration)
|
|
longTicker := time.NewTicker(maintenanceLongTickDuration)
|
|
|
|
for {
|
|
select {
|
|
case <-ticker.C:
|
|
err := database.Maintain()
|
|
if err != nil {
|
|
log.Errorf("database: maintenance error: %s", err)
|
|
}
|
|
case <-longTicker.C:
|
|
err := database.MaintainRecordStates()
|
|
if err != nil {
|
|
log.Errorf("database: record states maintenance error: %s", err)
|
|
}
|
|
err = database.MaintainThorough()
|
|
if err != nil {
|
|
log.Errorf("database: thorough maintenance error: %s", err)
|
|
}
|
|
case <-shuttingDown:
|
|
maintenanceWg.Done()
|
|
return
|
|
}
|
|
}
|
|
}
|