Added ability to run & schedule tasks on a period

This commit is contained in:
🐙PiperYxzzy
2022-05-04 20:49:23 +02:00
parent 65c9309f43
commit d2dcd8c94b
2 changed files with 29 additions and 0 deletions

11
main.go
View File

@@ -3,6 +3,7 @@ package main
import (
"log"
"net/http"
"time"
"github.com/google/uuid"
"github.com/yxzzy-wtf/gin-gonic-prepack/config"
@@ -10,6 +11,7 @@ import (
"github.com/yxzzy-wtf/gin-gonic-prepack/controllers/core"
"github.com/yxzzy-wtf/gin-gonic-prepack/database"
"github.com/yxzzy-wtf/gin-gonic-prepack/models"
"github.com/yxzzy-wtf/gin-gonic-prepack/scheduled"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
@@ -27,6 +29,15 @@ func main() {
db := database.Init()
Migrate(db)
// Scheduled tasks
scheduled.Schedule(func() (string, time.Duration) {
err := database.Db.Where("used < ?", time.Now().Add(-24*time.Hour)).Delete(&models.TotpUsage{}).Error
if err != nil {
return "purge failed: " + err.Error(), time.Hour
}
return "purged old TOTP usages", time.Hour * 24
})
r := gin.Default()
// Fresh admin functionality

18
scheduled/scheduled.go Normal file
View File

@@ -0,0 +1,18 @@
package scheduled
import (
"fmt"
"time"
)
type Scheduled func() (string, time.Duration)
func Schedule(f Scheduled) {
print, wait := f()
fmt.Println(print)
go func(w time.Duration) {
time.Sleep(w)
Schedule(f)
}(wait)
}