diff --git a/internal/handlers/connections.go b/internal/handlers/connections.go index dca784c..2c8dd09 100644 --- a/internal/handlers/connections.go +++ b/internal/handlers/connections.go @@ -23,6 +23,12 @@ type FlatPort struct { DeviceModel string } +type PortGroup struct { + DeviceName string + DeviceID int64 + Ports []FlatPort +} + func (h *Handlers) mustGetAllRacks() []models.Rack { racks, _ := h.Store.RackGetAll() if racks == nil { @@ -173,30 +179,36 @@ func (h *Handlers) renderConnectionModal(w http.ResponseWriter, returnPortID str type ConnectionModalData struct { Trace *services.TraceResult ConnectionTypes []models.ConnectionType - AllPorts []FlatPort + PortGroups []PortGroup } allDevices, _ := h.Store.DeviceGetAllUnracked() visitedMap := map[int64]bool{} + groupMap := map[int64]*PortGroup{} + var groupOrder []int64 - var flatPorts []FlatPort addPorts := func(devices []models.Device) { for _, d := range devices { if visitedMap[d.ID] { continue } visitedMap[d.ID] = true + if _, ok := groupMap[d.ID]; !ok { + groupMap[d.ID] = &PortGroup{DeviceName: d.Name, DeviceID: d.ID} + groupOrder = append(groupOrder, d.ID) + } for _, p := range d.Ports { - flatPorts = append(flatPorts, FlatPort{ + fp := FlatPort{ ID: p.ID, Name: p.Name, Side: p.Side, DeviceID: d.ID, DeviceName: d.Name, - }) - if d.Model != nil { - flatPorts[len(flatPorts)-1].DeviceModel = d.Model.Name } + if d.Model != nil { + fp.DeviceModel = d.Model.Name + } + groupMap[d.ID].Ports = append(groupMap[d.ID].Ports, fp) } } } @@ -211,10 +223,15 @@ func (h *Handlers) renderConnectionModal(w http.ResponseWriter, returnPortID str } } + var groups []PortGroup + for _, id := range groupOrder { + groups = append(groups, *groupMap[id]) + } + h.render(w, "connection_modal.html", ConnectionModalData{ Trace: trace, ConnectionTypes: connTypes, - AllPorts: flatPorts, + PortGroups: groups, }) } diff --git a/templates/connection_modal.html b/templates/connection_modal.html index 42f5190..d8a4d45 100644 --- a/templates/connection_modal.html +++ b/templates/connection_modal.html @@ -15,7 +15,11 @@