Figure out whether to show host tags in details pane from context

This commit is contained in:
Alfonso Acosta
2015-08-24 18:40:20 +00:00
parent 75595a5519
commit 807b30bfe3
4 changed files with 27 additions and 17 deletions

View File

@@ -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.

View File

@@ -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
}

View File

@@ -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)...)

View File

@@ -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",