package models import "time" // Agent repraesentiert einen registrierten OPNsense-Agent type Agent struct { ID string `json:"id"` Name string `json:"name"` Hostname string `json:"hostname"` IP string `json:"ip"` OPNsenseVersion string `json:"opnsense_version"` AgentVersion string `json:"agent_version,omitempty"` Platform string `json:"platform"` RegisteredAt time.Time `json:"registered_at"` LastHeartbeat *time.Time `json:"last_heartbeat,omitempty"` CustomerID *int `json:"customer_id,omitempty"` UpdateRequested bool `json:"update_requested"` LastAPIKey string `json:"last_api_key,omitempty"` } // AgentResponse erweitert Agent um den berechneten Status type AgentResponse struct { Agent Status string `json:"status"` } // AgentEvent repraesentiert ein Event in der agent_events Tabelle type AgentEvent struct { ID int `json:"id"` AgentID string `json:"agent_id"` EventType string `json:"event_type"` Message string `json:"message,omitempty"` CreatedAt time.Time `json:"created_at"` } // CalculateAgentStatus berechnet den Status aus dem letzten Heartbeat func CalculateAgentStatus(lastHeartbeat *time.Time) string { if lastHeartbeat == nil { return "unknown" } age := time.Since(*lastHeartbeat) switch { case age < 2*time.Minute: return "online" case age < 5*time.Minute: return "stale" default: return "offline" } } // RegisterRequest - Agent-Registrierung type RegisterRequest struct { AgentID string `json:"agent_id,omitempty"` Name string `json:"name"` Hostname string `json:"hostname"` IP string `json:"ip"` OPNsenseVersion string `json:"opnsense_version"` AgentVersion string `json:"agent_version,omitempty"` Platform string `json:"platform,omitempty"` } // RegisterResponse type RegisterResponse struct { ID string `json:"id"` Message string `json:"message"` }