From 028ed32b6f6d8900e1fbdbf78d364d789130df1b Mon Sep 17 00:00:00 2001 From: Alfonso Acosta Date: Fri, 16 Sep 2016 13:48:37 +0000 Subject: [PATCH] Simplify service node matching --- probe/endpoint/dns_snooper.go | 4 ++-- probe/endpoint/reporter.go | 2 +- render/detailed/summary.go | 4 +--- render/process.go | 4 ++-- render/theinternet.go | 26 +++++++++++--------------- 5 files changed, 17 insertions(+), 23 deletions(-) diff --git a/probe/endpoint/dns_snooper.go b/probe/endpoint/dns_snooper.go index 3af147fd0..b07cc7367 100644 --- a/probe/endpoint/dns_snooper.go +++ b/probe/endpoint/dns_snooper.go @@ -207,9 +207,9 @@ func (s *DNSSnooper) processDNSMessage(dns *layers.DNS) { newDomain := string(domainQueried) for ip := range ips { if existingDomains, err := s.reverseDNSCache.Get(ip); err != nil { - existingDomains.(map[string]struct{})[newDomain] = struct{}{} - } else { s.reverseDNSCache.Set(ip, map[string]struct{}{newDomain: {}}) + } else { + existingDomains.(map[string]struct{})[newDomain] = struct{}{} } } } diff --git a/probe/endpoint/reporter.go b/probe/endpoint/reporter.go index 58d59e50e..544311236 100644 --- a/probe/endpoint/reporter.go +++ b/probe/endpoint/reporter.go @@ -197,7 +197,7 @@ func (r *Reporter) makeEndpointNode(namespaceID string, addr string, port uint16 map[string]string{Addr: addr, Port: portStr}) names := r.dnsSnooper.CachedNamesForIP(addr) if resolvedNames, err := r.reverseResolver.get(addr); err == nil { - append(names, resolvedNames) + names = append(names, resolvedNames...) } if len(names) > 0 { node = node.WithSet(ReverseDNSNames, report.MakeStringSet(names...)) diff --git a/render/detailed/summary.go b/render/detailed/summary.go index 3f68e2fad..f88a62a07 100644 --- a/render/detailed/summary.go +++ b/render/detailed/summary.go @@ -125,10 +125,8 @@ func pseudoNodeSummary(base NodeSummary, n report.Node) (NodeSummary, bool) { // try rendering as a known service node if strings.HasPrefix(n.ID, render.ServiceNodeIDPrefix) { - serviceID := n.ID[len(render.ServiceNodeIDPrefix):] - base.Label = render.KnownServicesForHumans[serviceID] + base.Label = n.ID[len(render.ServiceNodeIDPrefix):] base.LabelMinor = "" - // TODO: use custom icons for known services? base.Shape = report.Cloud return base, true } diff --git a/render/process.go b/render/process.go index 0e81261f1..bc344eba7 100644 --- a/render/process.go +++ b/render/process.go @@ -162,8 +162,8 @@ func toInternetNode(m report.Node) report.Node { // a specific node if it is hostnames, _ := m.Sets.Lookup(endpoint.ReverseDNSNames) for _, hostname := range hostnames { - if serviceID, ok := lookupKnownService(hostname); ok { - return NewDerivedPseudoNode(ServiceNodeIDPrefix+serviceID, m) + if isKnownService(hostname) { + return NewDerivedPseudoNode(ServiceNodeIDPrefix+hostname, m) } } diff --git a/render/theinternet.go b/render/theinternet.go index cb24dcc55..d32ed6fb3 100644 --- a/render/theinternet.go +++ b/render/theinternet.go @@ -2,7 +2,7 @@ package render import ( "net" - "regexp" + "strings" "github.com/weaveworks/scope/probe/host" "github.com/weaveworks/scope/report" @@ -12,26 +12,22 @@ var ( // ServiceNodeIDPrefix is how the ID all service pseudo nodes begin ServiceNodeIDPrefix = "service-" - // KnownServicesForHumans contains a human-readable format of the service Ids - KnownServicesForHumans = map[string]string{ - "aws-dynamo": "AWS Dynamo", - "aws-s3": "AWS S3", - } - // Correspondence between hostnames and the service id they are part of - knownServicesMatchers = map[*regexp.Regexp]string{ - regexp.MustCompile(`dynamodb.[^.]+.amazonaws.com`): "aws-dynamo", - regexp.MustCompile(`s3-[^.]+.amazonaws.com`): "aws-s3", + knownServicesSuffixes = []string{ + // See http://docs.aws.amazon.com/general/latest/gr/rande.html for fainer grained + // details + "amazonaws.com", + "googleapis.com", } ) -func lookupKnownService(hostname string) (string, bool) { - for re, id := range knownServicesMatchers { - if re.MatchString(hostname) { - return id, true +func isKnownService(hostname string) bool { + for _, suffix := range knownServicesSuffixes { + if strings.HasSuffix(hostname, suffix) { + return true } } - return "", false + return false } // LocalNetworks returns a superset of the networks (think: CIDRs) that are