server/internal/handlers/nodes.go
Rama main · réplica de lectura del repositorio original.
package handlers
import (
"encoding/json"
"log"
"net/http"
"time"
"blackbox/server/internal/models"
"gorm.io/gorm"
)
type nodeResponse struct {
ID string `json:"id"`
Name string `json:"name"`
LastSeen time.Time `json:"last_seen"`
AgentVersion string `json:"agent_version"`
IPAddress string `json:"ip_address"`
OsInfo string `json:"os_info"`
Status string `json:"status"`
}
func ListNodes(database *gorm.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var nodes []models.Node
if err := database.Order("last_seen DESC").Find(&nodes).Error; err != nil {
writeError(w, http.StatusInternalServerError, "failed to fetch nodes")
return
}
now := time.Now()
resp := make([]nodeResponse, len(nodes))
for i, node := range nodes {
resp[i] = nodeResponse{
ID: node.ID,
Name: node.Name,
LastSeen: node.LastSeen,
AgentVersion: node.AgentVersion,
IPAddress: node.IPAddress,
OsInfo: node.OsInfo,
Status: effectiveNodeStatus(node, now),
}
}
w.Header().Set("Content-Type", "application/json")
if err := json.NewEncoder(w).Encode(resp); err != nil {
log.Printf("ListNodes encode error: %v", err)
}
}
}