drive-health/lib/svc/service.go

69 lines
1.3 KiB
Go

package svc
import (
"fmt"
"time"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"tea.chunkbyte.com/kato/drive-health/lib/config"
"tea.chunkbyte.com/kato/drive-health/lib/hardware"
)
var db *gorm.DB
func InitDB() {
var err error
dbPath := config.GetConfiguration().DatabaseFilePath
if dbPath == "" {
dbPath = "./data.db"
}
db, err = gorm.Open(sqlite.Open(dbPath), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// Migrate the schema
db.AutoMigrate(&hardware.HardDrive{}, &hardware.HardDriveTemperature{})
}
func GetDatabaseRef() *gorm.DB {
return db
}
func LogDriveTemps() error {
drives, err := hardware.GetSystemHardDrives(db, nil, nil)
if err != nil {
return err
}
for _, hdd := range drives {
temp := hdd.GetTemperature()
db.Create(&hardware.HardDriveTemperature{
HardDriveID: hdd.ID,
TimeStamp: time.Now(),
Temperature: temp,
})
}
return nil
}
func RunLoggerService() {
fmt.Println("Initializing Temperature Logging Service...")
tickTime := time.Duration(config.GetConfiguration().DiskFetchFrequency) * time.Second
// Snapshot taking routine
go func() {
for {
time.Sleep(tickTime)
err := LogDriveTemps()
if err != nil {
fmt.Printf("🛑 Temperature logging failed: %s\n", err)
}
}
}()
}