62 lines
1.1 KiB
Go
62 lines
1.1 KiB
Go
package watchdog
|
|
|
|
import (
|
|
"orbits-server/internal/server/bootstrap"
|
|
"orbits-server/internal/server/database"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func reconcile(fs map[string]struct{}, db map[string]database.File) Result {
|
|
r := Result{}
|
|
|
|
for path := range fs {
|
|
if _, ok := db[path]; !ok {
|
|
r.FSOrphans = append(r.FSOrphans, path)
|
|
}
|
|
}
|
|
|
|
for path, f := range db {
|
|
if _, ok := fs[path]; !ok {
|
|
r.DBOrphans = append(r.DBOrphans, f)
|
|
}
|
|
}
|
|
|
|
return r
|
|
}
|
|
|
|
func scanFS(env bootstrap.Environment) (map[string]struct{}, error) {
|
|
fsFiles, err := os.ReadDir(env.ContentDirectory)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resp := make(map[string]struct{})
|
|
for _, f := range fsFiles {
|
|
if f.IsDir() {
|
|
continue
|
|
}
|
|
|
|
full := filepath.Join(env.ContentDirectory, f.Name())
|
|
resp[full] = struct{}{}
|
|
}
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
func scanDB(db *gorm.DB) (map[string]database.File, error) {
|
|
files, err := database.ListFiles(db)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resp := make(map[string]database.File)
|
|
for _, f := range files {
|
|
resp[f.FilePath] = f
|
|
}
|
|
|
|
return resp, nil
|
|
}
|