feat: add working watchdog cycle

This commit is contained in:
DaanSelen
2026-04-22 11:51:57 +02:00
parent bf04e97850
commit 0c287cc917
10 changed files with 166 additions and 82 deletions
+17 -12
View File
@@ -1,30 +1,35 @@
package database
import (
"eden-server/internal/runtime"
"eden-server/internal/utility"
"log/slog"
"path/filepath"
"time"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
//var watchdogStop = make(chan struct{})
func KickoffDatabase(workDir string) (*gorm.DB, error) {
dbLoc := filepath.Join(workDir, "garden.db")
db, err := gorm.Open(sqlite.Open(dbLoc), &gorm.Config{})
db, err := gorm.Open(sqlite.Open(dbLoc), &gorm.Config{
Logger: logger.Discard, // disable gorm logging since its not slog (yet)
TranslateError: true,
})
if err != nil {
return nil, err
}
if err := db.AutoMigrate(&State{}); err != nil {
return nil, err
}
if err := db.AutoMigrate(&Device{}); err != nil {
return nil, err
}
if err := db.AutoMigrate(&File{}); err != nil {
// try to use GORM automigrate if the schema changes
slog.Info("performing migration")
if err := db.AutoMigrate(
&State{},
&Device{},
&File{},
); err != nil {
return nil, err
}
@@ -39,7 +44,7 @@ func KickoffDatabase(workDir string) (*gorm.DB, error) {
return db, nil
}
func KickoffDatabaseWatchdog(env runtime.Environment, db *gorm.DB) {
func KickoffDatabaseWatchdog(env utility.Environment, db *gorm.DB) {
timeInterval := time.Second * time.Duration(env.WatchInterval)
ticker := time.NewTicker(timeInterval)
@@ -58,11 +63,11 @@ func KickoffDatabaseWatchdog(env runtime.Environment, db *gorm.DB) {
*/
// run the watchdog function once to see if all is well.
watchdog(env.DataDirectory, db)
watchdog(env, db)
// then defer to a decoupled/disowned golang goroutine
for range ticker.C {
watchdog(env.DataDirectory, db)
watchdog(env, db)
}
}()
}