Add Weave peers view

This commit is contained in:
Alfonso Acosta
2016-10-24 15:33:30 +00:00
parent 405a705943
commit 8e4dfd7987
8 changed files with 73 additions and 10 deletions

View File

@@ -147,6 +147,13 @@ func init() {
Name: "Hosts",
Rank: 4,
},
APITopologyDesc{
id: "weave",
parent: "hosts",
renderer: render.WeaveRenderer,
Name: "Weave",
Rank: 3,
},
)
}

View File

@@ -34,8 +34,15 @@ type Status struct {
type Router struct {
Name string
Peers []struct {
Name string
NickName string
Name string
NickName string
Connections []struct {
Name string
NickName string
Address string
Outbound bool
Established bool
}
}
}

View File

@@ -67,6 +67,14 @@ func TestStatus(t *testing.T) {
Peers: []struct {
Name string
NickName string
// TODO, extend
Connections []struct {
Name string
NickName string
Address string
Outbound bool
Established bool
}
}{
{
Name: mockWeavePeerName,

View File

@@ -29,9 +29,9 @@ func (t Tagger) Tag(r report.Report) (report.Report, error) {
parents = report.EmptySets.Add(report.Host, report.MakeStringSet(t.hostNodeID))
)
// Explicitly don't tag Endpoints and Addresses - These topologies include pseudo nodes,
// and as such do their own host tagging
for _, topology := range []report.Topology{r.Process, r.Container, r.ContainerImage, r.Host, r.Overlay, r.Pod} {
// Explicitly don't tag Endpoints, Addresses and Overlay nodes - These topologies include pseudo nodes,
// and as such do their own host tagging.
for _, topology := range []report.Topology{r.Process, r.Container, r.ContainerImage, r.Host, r.Pod} {
for _, node := range topology.Nodes {
topology.AddNode(node.WithLatests(metadata).WithParents(parents))
}

View File

@@ -6,6 +6,7 @@ import (
"time"
"github.com/weaveworks/scope/common/backoff"
"github.com/weaveworks/scope/common/mtime"
"github.com/weaveworks/scope/common/weave"
"github.com/weaveworks/scope/probe/docker"
"github.com/weaveworks/scope/probe/host"
@@ -163,11 +164,20 @@ func (w *Weave) Report() (report.Report, error) {
WeaveDNSHostname: {ID: WeaveDNSHostname, Label: "Weave DNS Name", From: report.FromLatest, Priority: 18},
})
for _, peer := range w.statusCache.Router.Peers {
r.Overlay.AddNode(report.MakeNodeWith(report.MakeOverlayNodeID(peer.Name), map[string]string{
node := report.MakeNodeWith(report.MakeOverlayNodeID(peer.Name), map[string]string{
WeavePeerName: peer.Name,
WeavePeerNickName: peer.NickName,
}))
})
if peer.Name == w.statusCache.Router.Name {
node = node.WithLatest(report.HostNodeID, mtime.Now(), w.hostID)
node = node.WithParents(report.EmptySets.Add(report.Host, report.MakeStringSet(w.hostID)))
}
for _, conn := range peer.Connections {
if conn.Outbound {
node = node.WithAdjacent(report.MakeOverlayNodeID(conn.Name))
}
}
r.Overlay.AddNode(node)
}
if w.statusCache.IPAM.DefaultSubnet != "" {
r.Overlay.AddNode(

View File

@@ -31,4 +31,5 @@ var (
SelectService = TopologySelector(report.Service)
SelectDeployment = TopologySelector(report.Deployment)
SelectReplicaSet = TopologySelector(report.ReplicaSet)
SelectOverlay = TopologySelector(report.Overlay)
)

23
render/weave.go Normal file
View File

@@ -0,0 +1,23 @@
package render
import (
"github.com/weaveworks/scope/probe/overlay"
"github.com/weaveworks/scope/report"
)
// WeaveRenderer is a Renderer which produces a renderable weave topology.
var WeaveRenderer = MakeMap(
MapWeaveIdentity,
SelectOverlay,
)
// MapWeaveIdentity maps an overlay topology node to a weave topology node.
func MapWeaveIdentity(m report.Node, _ report.Networks) report.Nodes {
var node = m
if _, ok := m.Latest.Lookup(report.HostNodeID); !ok {
nickname, _ := m.Latest.Lookup(overlay.WeavePeerNickName)
id := MakePseudoNodeID(UnmanagedID, nickname)
node = NewDerivedPseudoNode(id, m)
}
return report.Nodes{node.ID: node}
}

View File

@@ -26,8 +26,15 @@ func (MockClient) Status() (weave.Status, error) {
Router: weave.Router{
Name: MockWeavePeerName,
Peers: []struct {
Name string
NickName string
Name string
NickName string
Connections []struct {
Name string
NickName string
Address string
Outbound bool
Established bool
}
}{
{
Name: MockWeavePeerName,