mirror of
https://github.com/weaveworks/scope.git
synced 2026-08-19 04:16:21 +00:00
Don't export reverseResolver
It's only used within package endpoint, so it shouldn't be exported. That means resolver_test becomes resolver_internal_test, and with the previous change to the fixture, we can avoid the dot-import. Also, update method names to reflect it's an unexported type.
This commit is contained in:
committed by
Tom Wilkie
parent
c8fbea0f15
commit
36ce1089f4
@@ -28,7 +28,7 @@ type Reporter struct {
|
||||
includeNAT bool
|
||||
conntracker Conntracker
|
||||
natmapper *NATMapper
|
||||
revResolver *ReverseResolver
|
||||
reverseResolver *reverseResolver
|
||||
}
|
||||
|
||||
// SpyDuration is an exported prometheus metric
|
||||
@@ -73,7 +73,7 @@ func NewReporter(hostID, hostName string, includeProcesses bool, useConntrack bo
|
||||
includeProcesses: includeProcesses,
|
||||
conntracker: conntracker,
|
||||
natmapper: natmapper,
|
||||
revResolver: NewReverseResolver(),
|
||||
reverseResolver: newReverseResolver(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ func (r *Reporter) Stop() {
|
||||
if r.natmapper != nil {
|
||||
r.natmapper.Stop()
|
||||
}
|
||||
r.revResolver.Stop()
|
||||
r.reverseResolver.stop()
|
||||
}
|
||||
|
||||
// Report implements Reporter.
|
||||
@@ -164,9 +164,9 @@ 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 revRemoteName, err := r.revResolver.Get(remoteAddr); err == nil {
|
||||
if remoteName, err := r.reverseResolver.get(remoteAddr); err == nil {
|
||||
remoteNode = remoteNode.WithMetadata(map[string]string{
|
||||
"name": revRemoteName,
|
||||
"name": remoteName,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -210,9 +210,9 @@ 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 revRemoteName, err := r.revResolver.Get(remoteAddr); err == nil {
|
||||
if remoteName, err := r.reverseResolver.get(remoteAddr); err == nil {
|
||||
remoteNode = remoteNode.WithMetadata(map[string]string{
|
||||
"name": revRemoteName,
|
||||
"name": remoteName,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
+11
-12
@@ -16,22 +16,22 @@ const (
|
||||
rAddrCacheExpiration = 30 * time.Minute
|
||||
)
|
||||
|
||||
var errNotFound = fmt.Errorf("Not found")
|
||||
var errNotFound = fmt.Errorf("not found")
|
||||
|
||||
type revResFunc func(addr string) (names []string, err error)
|
||||
|
||||
// ReverseResolver is a caching, reverse resolver.
|
||||
type ReverseResolver struct {
|
||||
// A caching, reverse resolver.
|
||||
type reverseResolver struct {
|
||||
addresses chan string
|
||||
cache gcache.Cache
|
||||
Throttle <-chan time.Time // Made public for mocking
|
||||
Resolver revResFunc
|
||||
}
|
||||
|
||||
// NewReverseResolver starts a new reverse resolver that performs reverse
|
||||
// newReverseResolver starts a new reverse resolver that performs reverse
|
||||
// resolutions and caches the result.
|
||||
func NewReverseResolver() *ReverseResolver {
|
||||
r := ReverseResolver{
|
||||
func newReverseResolver() *reverseResolver {
|
||||
r := reverseResolver{
|
||||
addresses: make(chan string, rAddrBacklog),
|
||||
cache: gcache.New(rAddrCacheLen).LRU().Expiration(rAddrCacheExpiration).Build(),
|
||||
Throttle: time.Tick(time.Second / 10),
|
||||
@@ -41,10 +41,10 @@ func NewReverseResolver() *ReverseResolver {
|
||||
return &r
|
||||
}
|
||||
|
||||
// Get the reverse resolution for an IP address if already in the cache, a
|
||||
// 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
|
||||
@@ -53,7 +53,7 @@ func (r *ReverseResolver) Get(address string) (string, error) {
|
||||
return "", errNotFound
|
||||
}
|
||||
if err == gcache.NotFoundKeyError {
|
||||
// We trigger a asynchronous reverse resolution when not cached
|
||||
// We trigger a asynchronous reverse resolution when not cached.
|
||||
select {
|
||||
case r.addresses <- address:
|
||||
default:
|
||||
@@ -62,7 +62,7 @@ func (r *ReverseResolver) Get(address string) (string, error) {
|
||||
return "", errNotFound
|
||||
}
|
||||
|
||||
func (r *ReverseResolver) loop() {
|
||||
func (r *reverseResolver) loop() {
|
||||
for request := range r.addresses {
|
||||
// check if the answer is already in the cache
|
||||
if _, err := r.cache.Get(request); err == nil {
|
||||
@@ -80,7 +80,6 @@ func (r *ReverseResolver) loop() {
|
||||
}
|
||||
}
|
||||
|
||||
// Stop the async reverse resolver.
|
||||
func (r *ReverseResolver) Stop() {
|
||||
func (r *reverseResolver) stop() {
|
||||
close(r.addresses)
|
||||
}
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package endpoint_test
|
||||
package endpoint
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
. "github.com/weaveworks/scope/probe/endpoint"
|
||||
"github.com/weaveworks/scope/test"
|
||||
)
|
||||
|
||||
@@ -15,8 +14,8 @@ func TestReverseResolver(t *testing.T) {
|
||||
"4.3.2.1": {"im.a.little.tea.pot"},
|
||||
}
|
||||
|
||||
revRes := NewReverseResolver()
|
||||
defer revRes.Stop()
|
||||
revRes := newReverseResolver()
|
||||
defer revRes.stop()
|
||||
|
||||
// Use a mocked resolver function.
|
||||
revRes.Resolver = func(addr string) (names []string, err error) {
|
||||
@@ -31,7 +30,7 @@ func TestReverseResolver(t *testing.T) {
|
||||
|
||||
for ip, names := range tests {
|
||||
test.Poll(t, 100*time.Millisecond, names[0], func() interface{} {
|
||||
result, _ := revRes.Get(ip)
|
||||
result, _ := revRes.get(ip)
|
||||
return result
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user