From b30a9c44b6cdf00f202931d347bd8c8a369801eb Mon Sep 17 00:00:00 2001 From: Alfonso Acosta Date: Thu, 3 Nov 2016 21:58:54 +0000 Subject: [PATCH] Review feedback (and fix metadata bug) --- probe/overlay/weave.go | 126 +++++++++++++++++++++++------------------ 1 file changed, 70 insertions(+), 56 deletions(-) diff --git a/probe/overlay/weave.go b/probe/overlay/weave.go index e2ecf757a..445e19090 100644 --- a/probe/overlay/weave.go +++ b/probe/overlay/weave.go @@ -60,14 +60,15 @@ var ( } weaveMetadata = report.MetadataTemplates{ - WeaveVersion: {ID: WeaveVersion, Label: "Version", From: report.FromLatest, Priority: 1}, - WeaveProtocol: {ID: WeaveProtocol, Label: "Protocol", From: report.FromLatest, Priority: 2}, - WeavePeerName: {ID: WeavePeerName, Label: "Peer Name", From: report.FromLatest, Truncate: 17, Priority: 3}, - WeaveEncryption: {ID: WeaveEncryption, Label: "Encryption", From: report.FromLatest, Priority: 4}, - WeavePeerDiscovery: {ID: WeavePeerDiscovery, Label: "Peer Discovery", From: report.FromLatest, Priority: 5}, - WeaveTargetCount: {ID: WeaveTargetCount, Label: "Targets", From: report.FromLatest, Priority: 6}, - WeavePeerCount: {ID: WeaveConnectionCount, Label: "Connections", From: report.FromLatest, Priority: 7}, - WeaveTrustedSubnets: {ID: WeaveTrustedSubnets, Label: "Trusted Subnets", From: report.FromSets, Priority: 8}, + WeaveVersion: {ID: WeaveVersion, Label: "Version", From: report.FromLatest, Priority: 1}, + WeaveProtocol: {ID: WeaveProtocol, Label: "Protocol", From: report.FromLatest, Priority: 2}, + WeavePeerName: {ID: WeavePeerName, Label: "Peer Name", From: report.FromLatest, Priority: 3}, + WeaveEncryption: {ID: WeaveEncryption, Label: "Encryption", From: report.FromLatest, Priority: 4}, + WeavePeerDiscovery: {ID: WeavePeerDiscovery, Label: "Peer Discovery", From: report.FromLatest, Priority: 5}, + WeaveTargetCount: {ID: WeaveTargetCount, Label: "# Targets", From: report.FromLatest, Priority: 6}, + WeaveConnectionCount: {ID: WeaveConnectionCount, Label: "# Connections", From: report.FromLatest, Priority: 8}, + WeavePeerCount: {ID: WeavePeerCount, Label: "# Peers", From: report.FromLatest, Priority: 7}, + WeaveTrustedSubnets: {ID: WeaveTrustedSubnets, Label: "Trusted Subnets", From: report.FromSets, Priority: 9}, } weaveTableTemplates = report.TableTemplates{ @@ -83,7 +84,7 @@ var ( WeaveDNSDomain: "Domain", WeaveDNSUpstream: "Upstream", WeaveDNSTTL: "TTL", - WeaveDNSEntryCount: "Entries", + WeaveDNSEntryCount: "# Entries", }, }, WeaveProxyTableID: {ID: WeaveProxyTableID, Label: "Proxy", @@ -214,7 +215,8 @@ func filterContainerNotFound(err error) error { switch err.(type) { case *docker_client.Error: - // This is really ugly, but there's no way around it :( + // This is really ugly, but this error comes from the client in some cases + // and there is no other way to distinguish it :( dockerError := err.(*docker_client.Error) if containerNotRunningRE.MatchString(dockerError.Message) { return nil @@ -355,61 +357,19 @@ func (w *Weave) Report() (report.Report, error) { return r, nil } +// getPeerNode obtains an Overlay topology node for representing a peer in the Weave network func (w *Weave) getPeerNode(peer weave.Peer) report.Node { node := report.MakeNode(report.MakeOverlayNodeID(report.WeaveOverlayPeerPrefix, peer.Name)) latests := map[string]string{ WeavePeerName: peer.Name, WeavePeerNickName: peer.NickName, } + // Peer corresponding to current host if peer.Name == w.statusCache.Router.Name { - latests[report.HostNodeID] = w.hostID - latests[WeaveVersion] = w.statusCache.Version - latests[WeaveEncryption] = "disabled" - if w.statusCache.Router.Encryption { - latests[WeaveEncryption] = "enabled" - } - latests[WeavePeerDiscovery] = "disabled" - if w.statusCache.Router.PeerDiscovery { - latests[WeavePeerDiscovery] = "enabled" - } - if w.statusCache.Router.ProtocolMinVersion == w.statusCache.Router.ProtocolMaxVersion { - latests[WeaveProtocol] = fmt.Sprintf("%d", w.statusCache.Router.ProtocolMinVersion) - } else { - latests[WeaveProtocol] = fmt.Sprintf("%d..%d", w.statusCache.Router.ProtocolMinVersion, w.statusCache.Router.ProtocolMaxVersion) - } - latests[WeaveTargetCount] = fmt.Sprintf("#%d", len(w.statusCache.Router.Targets)) - latests[WeaveConnectionCount] = fmt.Sprintf("#%d", len(w.statusCache.Router.Connections)) - node = node.WithSet(WeaveTrustedSubnets, report.MakeStringSet(w.statusCache.Router.TrustedSubnets...)) - if w.statusCache.IPAM != nil { - latests[WeaveIPAMStatus] = getIPAMStatus(*w.statusCache.IPAM) - latests[WeaveIPAMRange] = w.statusCache.IPAM.Range - latests[WeaveIPAMDefaultSubnet] = w.statusCache.IPAM.DefaultSubnet - } - if w.statusCache.DNS != nil { - latests[WeaveDNSDomain] = w.statusCache.DNS.Domain - latests[WeaveDNSUpstream] = strings.Join(w.statusCache.DNS.Upstream, ", ") - latests[WeaveDNSTTL] = fmt.Sprintf("%d", w.statusCache.DNS.TTL) - dnsEntryCount := 0 - for _, entry := range w.statusCache.DNS.Entries { - if entry.Tombstone == 0 { - dnsEntryCount++ - } - } - latests[WeaveDNSEntryCount] = fmt.Sprintf("#%d", dnsEntryCount) - } - latests[WeaveProxyStatus] = "not running" - if w.proxyRunningCache { - latests[WeaveProxyStatus] = "running" - latests[WeaveProxyAddress] = w.proxyAddressCache - } - latests[WeavePluginStatus] = "not running" - if w.pluginRunningCache { - latests[WeavePluginStatus] = "running" - latests[WeavePluginDriver] = "weave" - } - node = node.WithParents(report.EmptySets.Add(report.Host, report.MakeStringSet(w.hostID))) + latests, node = w.addCurrentPeerInfo(latests, node) } + for _, conn := range peer.Connections { if conn.Outbound { node = node.WithAdjacent(report.MakeOverlayNodeID(report.WeaveOverlayPeerPrefix, conn.Name)) @@ -419,6 +379,60 @@ func (w *Weave) getPeerNode(peer weave.Peer) report.Node { return node.WithLatests(latests) } +// addCurrentPeerInfo adds information exclusive to the Overlay topology node representing current Weave Net peer +// (i.e. in the same host as the reporting Scope probe) +func (w *Weave) addCurrentPeerInfo(latests map[string]string, node report.Node) (map[string]string, report.Node) { + latests[report.HostNodeID] = w.hostID + latests[WeaveVersion] = w.statusCache.Version + latests[WeaveEncryption] = "disabled" + if w.statusCache.Router.Encryption { + latests[WeaveEncryption] = "enabled" + } + latests[WeavePeerDiscovery] = "disabled" + if w.statusCache.Router.PeerDiscovery { + latests[WeavePeerDiscovery] = "enabled" + } + if w.statusCache.Router.ProtocolMinVersion == w.statusCache.Router.ProtocolMaxVersion { + latests[WeaveProtocol] = fmt.Sprintf("%d", w.statusCache.Router.ProtocolMinVersion) + } else { + latests[WeaveProtocol] = fmt.Sprintf("%d..%d", w.statusCache.Router.ProtocolMinVersion, w.statusCache.Router.ProtocolMaxVersion) + } + latests[WeaveTargetCount] = fmt.Sprintf("%d", len(w.statusCache.Router.Targets)) + latests[WeaveConnectionCount] = fmt.Sprintf("%d", len(w.statusCache.Router.Connections)) + latests[WeavePeerCount] = fmt.Sprintf("%d", len(w.statusCache.Router.Peers)) + node = node.WithSet(WeaveTrustedSubnets, report.MakeStringSet(w.statusCache.Router.TrustedSubnets...)) + if w.statusCache.IPAM != nil { + latests[WeaveIPAMStatus] = getIPAMStatus(*w.statusCache.IPAM) + latests[WeaveIPAMRange] = w.statusCache.IPAM.Range + latests[WeaveIPAMDefaultSubnet] = w.statusCache.IPAM.DefaultSubnet + } + if w.statusCache.DNS != nil { + latests[WeaveDNSDomain] = w.statusCache.DNS.Domain + latests[WeaveDNSUpstream] = strings.Join(w.statusCache.DNS.Upstream, ", ") + latests[WeaveDNSTTL] = fmt.Sprintf("%d", w.statusCache.DNS.TTL) + dnsEntryCount := 0 + for _, entry := range w.statusCache.DNS.Entries { + if entry.Tombstone == 0 { + dnsEntryCount++ + } + } + latests[WeaveDNSEntryCount] = fmt.Sprintf("%d", dnsEntryCount) + } + latests[WeaveProxyStatus] = "not running" + if w.proxyRunningCache { + latests[WeaveProxyStatus] = "running" + latests[WeaveProxyAddress] = w.proxyAddressCache + } + latests[WeavePluginStatus] = "not running" + if w.pluginRunningCache { + latests[WeavePluginStatus] = "running" + latests[WeavePluginDriver] = "weave" + } + node = node.WithParents(report.EmptySets.Add(report.Host, report.MakeStringSet(w.hostID))) + + return latests, node +} + func getIPAMStatus(ipam weave.IPAM) string { allIPAMOwnersUnreachable := func(ipam weave.IPAM) bool { for _, entry := range ipam.Entries {