mirror of
https://github.com/weaveworks/scope.git
synced 2026-02-14 18:09:59 +00:00
Add Weave peers view
This commit is contained in:
@@ -147,6 +147,13 @@ func init() {
|
||||
Name: "Hosts",
|
||||
Rank: 4,
|
||||
},
|
||||
APITopologyDesc{
|
||||
id: "weave",
|
||||
parent: "hosts",
|
||||
renderer: render.WeaveRenderer,
|
||||
Name: "Weave",
|
||||
Rank: 3,
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
23
render/weave.go
Normal 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}
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user