mirror of
https://github.com/weaveworks/scope.git
synced 2026-02-14 18:09:59 +00:00
Resolve to a group of names (instead of taking only the first one)
This commit is contained in:
@@ -139,10 +139,8 @@ func (r *Reporter) addConnection(rpt *report.Report, localAddr, remoteAddr strin
|
||||
|
||||
// In case we have a reverse resolution for the IP, we can use it for
|
||||
// the name...
|
||||
if remoteName, err := r.reverseResolver.get(remoteAddr); err == nil {
|
||||
remoteNode = remoteNode.WithMetadata(map[string]string{
|
||||
"name": remoteName,
|
||||
})
|
||||
if remoteNames, err := r.reverseResolver.get(remoteAddr); err == nil {
|
||||
remoteNode = remoteNode.WithSet("name", report.MakeStringSet(remoteNames...))
|
||||
}
|
||||
|
||||
if localIsClient {
|
||||
@@ -185,10 +183,8 @@ func (r *Reporter) addConnection(rpt *report.Report, localAddr, remoteAddr strin
|
||||
|
||||
// In case we have a reverse resolution for the IP, we can use it for
|
||||
// the name...
|
||||
if remoteName, err := r.reverseResolver.get(remoteAddr); err == nil {
|
||||
remoteNode = remoteNode.WithMetadata(map[string]string{
|
||||
"name": remoteName,
|
||||
})
|
||||
if remoteNames, err := r.reverseResolver.get(remoteAddr); err == nil {
|
||||
remoteNode = remoteNode.WithSet("name", report.MakeStringSet(remoteNames...))
|
||||
}
|
||||
|
||||
if localIsClient {
|
||||
|
||||
@@ -3,7 +3,6 @@ package endpoint
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
"sort"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -44,13 +43,13 @@ func newReverseResolver() *reverseResolver {
|
||||
// get the reverse resolution for an IP address if already in the cache, a
|
||||
// gcache.NotFoundKeyError error otherwise. Note: it returns one of the
|
||||
// possible names that can be obtained for that IP.
|
||||
func (r *reverseResolver) get(address string) (string, error) {
|
||||
func (r *reverseResolver) get(address string) ([]string, error) {
|
||||
val, err := r.cache.Get(address)
|
||||
if hostname, ok := val.(string); err == nil && ok {
|
||||
return hostname, nil
|
||||
if hostnames, ok := val.([]string); err == nil && ok {
|
||||
return hostnames, nil
|
||||
}
|
||||
if _, ok := val.(struct{}); err == nil && ok {
|
||||
return "", errNotFound
|
||||
return nil, errNotFound
|
||||
}
|
||||
if err == gcache.NotFoundKeyError {
|
||||
// We trigger a asynchronous reverse resolution when not cached.
|
||||
@@ -59,7 +58,7 @@ func (r *reverseResolver) get(address string) (string, error) {
|
||||
default:
|
||||
}
|
||||
}
|
||||
return "", errNotFound
|
||||
return nil, errNotFound
|
||||
}
|
||||
|
||||
func (r *reverseResolver) loop() {
|
||||
@@ -71,9 +70,10 @@ func (r *reverseResolver) loop() {
|
||||
<-r.Throttle // rate limit our DNS resolutions
|
||||
names, err := r.Resolver(request)
|
||||
if err == nil && len(names) > 0 {
|
||||
sort.Strings(names)
|
||||
name := strings.TrimRight(names[0], ".")
|
||||
r.cache.Set(request, name)
|
||||
for idx, name := range names {
|
||||
names[idx] = strings.TrimRight(name, ".")
|
||||
}
|
||||
r.cache.Set(request, names)
|
||||
} else {
|
||||
r.cache.Set(request, struct{}{})
|
||||
}
|
||||
|
||||
@@ -29,9 +29,9 @@ func TestReverseResolver(t *testing.T) {
|
||||
revRes.Throttle = time.Tick(time.Millisecond)
|
||||
|
||||
for ip, names := range tests {
|
||||
test.Poll(t, 100*time.Millisecond, names[0], func() interface{} {
|
||||
result, _ := revRes.get(ip)
|
||||
return result
|
||||
test.Poll(t, 100*time.Millisecond, names, func() interface{} {
|
||||
ns, _ := revRes.get(ip)
|
||||
return ns
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user