mirror of
https://github.com/weaveworks/scope.git
synced 2026-03-03 02:00:43 +00:00
Figure out whether to show host tags in details pane from context
This commit is contained in:
@@ -68,7 +68,7 @@ func handleNode(rep xfer.Reporter, t topologyView, w http.ResponseWriter, r *htt
|
||||
http.NotFound(w, r)
|
||||
return
|
||||
}
|
||||
respondWith(w, http.StatusOK, APINode{Node: render.MakeDetailedNode(rpt, node, t.isMultiHost)})
|
||||
respondWith(w, http.StatusOK, APINode{Node: render.MakeDetailedNode(rpt, node)})
|
||||
}
|
||||
|
||||
// Individual edges.
|
||||
|
||||
@@ -107,10 +107,9 @@ var topologyRegistry = map[string]topologyView{
|
||||
renderer: render.FilterUnconnected{Renderer: render.ProcessWithContainerNameRenderer{}},
|
||||
},
|
||||
"applications-by-name": {
|
||||
human: "by name",
|
||||
parent: "applications",
|
||||
renderer: render.FilterUnconnected{Renderer: render.ProcessNameRenderer},
|
||||
isMultiHost: true,
|
||||
human: "by name",
|
||||
parent: "applications",
|
||||
renderer: render.FilterUnconnected{Renderer: render.ProcessNameRenderer},
|
||||
},
|
||||
"containers": {
|
||||
human: "Containers",
|
||||
@@ -118,10 +117,9 @@ var topologyRegistry = map[string]topologyView{
|
||||
renderer: render.ContainerRenderer,
|
||||
},
|
||||
"containers-by-image": {
|
||||
human: "by image",
|
||||
parent: "containers",
|
||||
renderer: render.ContainerImageRenderer,
|
||||
isMultiHost: true,
|
||||
human: "by image",
|
||||
parent: "containers",
|
||||
renderer: render.ContainerImageRenderer,
|
||||
},
|
||||
"hosts": {
|
||||
human: "Hosts",
|
||||
@@ -131,8 +129,7 @@ var topologyRegistry = map[string]topologyView{
|
||||
}
|
||||
|
||||
type topologyView struct {
|
||||
human string
|
||||
parent string
|
||||
renderer render.Renderer
|
||||
isMultiHost bool // does the view involve information from multiple hosts?
|
||||
human string
|
||||
parent string
|
||||
renderer render.Renderer
|
||||
}
|
||||
|
||||
@@ -72,15 +72,28 @@ func (t sortableTables) Less(i, j int) bool { return t[i].Rank > t[j].Rank }
|
||||
|
||||
// MakeDetailedNode transforms a renderable node to a detailed node. It uses
|
||||
// aggregate metadata, plus the set of origin node IDs, to produce tables.
|
||||
func MakeDetailedNode(r report.Report, n RenderableNode, addHostTags bool) DetailedNode {
|
||||
func MakeDetailedNode(r report.Report, n RenderableNode) DetailedNode {
|
||||
tables := sortableTables{}
|
||||
|
||||
// Figure out if multiple hosts are referenced by the renderableNode
|
||||
originHosts := make(map[string]struct{})
|
||||
for _, id := range n.Origins {
|
||||
for _, topology := range r.Topologies() {
|
||||
if nmd, ok := topology.NodeMetadatas[id]; ok {
|
||||
originHosts[report.ExtractHostID(nmd)] = struct{}{}
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
multiHost := len(originHosts) > 1
|
||||
|
||||
// RenderableNode may be the result of merge operation(s), and so may have
|
||||
// multiple origins. The ultimate goal here is to generate tables to view
|
||||
// in the UI, so we skip the intermediate representations, but we could
|
||||
// add them later.
|
||||
connections := []Row{}
|
||||
for _, id := range n.Origins {
|
||||
if table, ok := OriginTable(r, id, addHostTags); ok {
|
||||
if table, ok := OriginTable(r, id, multiHost); ok {
|
||||
tables = append(tables, table)
|
||||
} else if _, ok := r.Endpoint.NodeMetadatas[id]; ok {
|
||||
connections = append(connections, connectionDetailsRows(r.Endpoint, id)...)
|
||||
|
||||
@@ -74,7 +74,7 @@ func TestOriginTable(t *testing.T) {
|
||||
|
||||
func TestMakeDetailedHostNode(t *testing.T) {
|
||||
renderableNode := render.HostRenderer.Render(test.Report)[render.MakeHostID(test.ClientHostID)]
|
||||
have := render.MakeDetailedNode(test.Report, renderableNode, false)
|
||||
have := render.MakeDetailedNode(test.Report, renderableNode)
|
||||
want := render.DetailedNode{
|
||||
ID: render.MakeHostID(test.ClientHostID),
|
||||
LabelMajor: "client",
|
||||
@@ -131,7 +131,7 @@ func TestMakeDetailedHostNode(t *testing.T) {
|
||||
|
||||
func TestMakeDetailedContainerNode(t *testing.T) {
|
||||
renderableNode := render.ContainerRenderer.Render(test.Report)[test.ServerContainerID]
|
||||
have := render.MakeDetailedNode(test.Report, renderableNode, false)
|
||||
have := render.MakeDetailedNode(test.Report, renderableNode)
|
||||
want := render.DetailedNode{
|
||||
ID: test.ServerContainerID,
|
||||
LabelMajor: "server",
|
||||
|
||||
Reference in New Issue
Block a user