diff --git a/database/dbmodule/db.go b/database/dbmodule/db.go index 780ae7e..13903c6 100644 --- a/database/dbmodule/db.go +++ b/database/dbmodule/db.go @@ -38,7 +38,7 @@ func start() error { return err } - startMaintainer() + registerMaintenanceTasks() return nil } diff --git a/database/dbmodule/maintenance.go b/database/dbmodule/maintenance.go index 82c6f98..8958299 100644 --- a/database/dbmodule/maintenance.go +++ b/database/dbmodule/maintenance.go @@ -1,45 +1,37 @@ package dbmodule import ( + "context" "time" "github.com/safing/portbase/database" "github.com/safing/portbase/log" + "github.com/safing/portbase/modules" ) -var ( - maintenanceShortTickDuration = 10 * time.Minute - maintenanceLongTickDuration = 1 * time.Hour -) - -func startMaintainer() { - module.AddWorkers(1) - go maintenanceWorker() +func registerMaintenanceTasks() { + module.NewTask("basic maintenance", maintainBasic).Repeat(10 * time.Minute).MaxDelay(10 * time.Minute) + module.NewTask("thorough maintenance", maintainThorough).Repeat(1 * time.Hour).MaxDelay(1 * time.Hour) + module.NewTask("record maintenance", maintainRecords).Repeat(1 * time.Hour).MaxDelay(1 * time.Hour) } -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 <-module.ShuttingDown(): - module.FinishWorker() - return - } +func maintainBasic(ctx context.Context, task *modules.Task) { + err := database.Maintain() + if err != nil { + log.Errorf("database: maintenance error: %s", err) + } +} + +func maintainThorough(ctx context.Context, task *modules.Task) { + err := database.MaintainThorough() + if err != nil { + log.Errorf("database: thorough maintenance error: %s", err) + } +} + +func maintainRecords(ctx context.Context, task *modules.Task) { + err := database.MaintainRecordStates() + if err != nil { + log.Errorf("database: record states maintenance error: %s", err) } }