Split monolithic scan_updates into individual subsystems (updates/storage/system/docker). Scanners now run in parallel via goroutines - cuts scan time roughly in half, maybe more. Agent changes: - Orchestrator pattern for scanner management - New scanners: storage (disk metrics), system (cpu/mem/processes) - New commands: scan_storage, scan_system, scan_docker - Wrapped existing scanners (APT/DNF/Docker/Windows/Winget) with common interface - Version bump to 0.1.20 Server changes: - Migration 015: agent_subsystems table with trigger for auto-init - Subsystem CRUD: enable/disable, interval (5min-24hr), auto-run toggle - API routes: /api/v1/agents/:id/subsystems/* (9 endpoints) - Stats tracking per subsystem Web UI changes: - ChatTimeline shows subsystem-specific labels and icons - AgentScanners got interactive toggles, interval dropdowns, manual trigger buttons - TypeScript types added for subsystems Backward compatible with legacy scan_updates - for now. Bugs probably exist somewhere.
52 lines
1.9 KiB
Go
52 lines
1.9 KiB
Go
package models
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
// AgentSubsystem represents a subsystem configuration for an agent
|
|
type AgentSubsystem struct {
|
|
ID uuid.UUID `json:"id" db:"id"`
|
|
AgentID uuid.UUID `json:"agent_id" db:"agent_id"`
|
|
Subsystem string `json:"subsystem" db:"subsystem"`
|
|
Enabled bool `json:"enabled" db:"enabled"`
|
|
IntervalMinutes int `json:"interval_minutes" db:"interval_minutes"`
|
|
AutoRun bool `json:"auto_run" db:"auto_run"`
|
|
LastRunAt *time.Time `json:"last_run_at,omitempty" db:"last_run_at"`
|
|
NextRunAt *time.Time `json:"next_run_at,omitempty" db:"next_run_at"`
|
|
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
|
|
}
|
|
|
|
// SubsystemType represents the type of subsystem
|
|
type SubsystemType string
|
|
|
|
const (
|
|
SubsystemUpdates SubsystemType = "updates"
|
|
SubsystemStorage SubsystemType = "storage"
|
|
SubsystemSystem SubsystemType = "system"
|
|
SubsystemDocker SubsystemType = "docker"
|
|
)
|
|
|
|
// SubsystemConfig represents the configuration for updating a subsystem
|
|
type SubsystemConfig struct {
|
|
Enabled *bool `json:"enabled,omitempty"`
|
|
IntervalMinutes *int `json:"interval_minutes,omitempty"`
|
|
AutoRun *bool `json:"auto_run,omitempty"`
|
|
}
|
|
|
|
// SubsystemStats provides statistics about a subsystem's execution
|
|
type SubsystemStats struct {
|
|
Subsystem string `json:"subsystem"`
|
|
Enabled bool `json:"enabled"`
|
|
LastRunAt *time.Time `json:"last_run_at,omitempty"`
|
|
NextRunAt *time.Time `json:"next_run_at,omitempty"`
|
|
IntervalMinutes int `json:"interval_minutes"`
|
|
AutoRun bool `json:"auto_run"`
|
|
RunCount int `json:"run_count"` // Total runs
|
|
LastStatus string `json:"last_status"` // Last command status
|
|
LastDuration int `json:"last_duration"` // Last run duration in seconds
|
|
}
|