feat: load persisted devices from DB on startup; offline devices still shown

This commit is contained in:
tian 2026-05-06 14:42:18 +08:00
parent cacc0a7b83
commit 87088a26f3
2 changed files with 15 additions and 3 deletions

View File

@ -31,13 +31,13 @@ func main() {
// Initialize Services
agentClient := service.NewAgentClient(cfg)
regSvc := service.NewRegistryService(cfg, agentClient)
discoSvc := service.NewDiscoveryService(cfg, regSvc)
regSvc.SetDiscovery(discoSvc)
store, err := storage.OpenSQLite(cfg.DBPathOrDefault())
if err != nil {
log.Fatalf("failed to open storage: %v", err)
}
regSvc := service.NewRegistryService(cfg, agentClient, storage.NewDevicesRepo(store.DB()))
discoSvc := service.NewDiscoveryService(cfg, regSvc)
regSvc.SetDiscovery(discoSvc)
defer store.Close()
taskRepo := storage.NewTasksRepo(store.DB())
assetsRepo := storage.NewAssetsRepo(store.DB())

View File

@ -35,6 +35,18 @@ func NewRegistryService(cfg *config.Config, agent *AgentClient, repo ...DeviceRe
repo: deviceRepo,
devices: make(map[string]*models.Device),
}
// Load persisted devices from DB so offline devices still appear in the list
if deviceRepo != nil {
if saved, err := deviceRepo.List(); err == nil {
for _, dev := range saved {
if dev == nil || dev.DeviceID == "" {
continue
}
dev.Online = false // mark offline until discovery confirms
s.devices[dev.DeviceID] = dev
}
}
}
go s.startPruning()
if agent != nil {
go s.startGraphPolling()