diff --git a/http/cache.go b/http/cache.go index 6b68dfb..b21dcb7 100644 --- a/http/cache.go +++ b/http/cache.go @@ -9,7 +9,7 @@ import ( type Cache struct { capacity int mu sync.RWMutex - entries map[uint64]*Response + entries map[uint64]Response keys []uint64 } @@ -19,7 +19,7 @@ func NewCache(capacity int) *Cache { } return &Cache{ capacity: capacity, - entries: make(map[uint64]*Response), + entries: make(map[uint64]Response), keys: make([]uint64, 0, capacity), } } @@ -30,7 +30,7 @@ func key(ip net.IP) uint64 { return h.Sum64() } -func (c *Cache) Set(ip net.IP, resp *Response) { +func (c *Cache) Set(ip net.IP, resp Response) { if c.capacity == 0 { return } @@ -45,7 +45,7 @@ func (c *Cache) Set(ip net.IP, resp *Response) { c.keys = append(c.keys, k) } -func (c *Cache) Get(ip net.IP) (*Response, bool) { +func (c *Cache) Get(ip net.IP) (Response, bool) { k := key(ip) c.mu.RLock() defer c.mu.RUnlock() diff --git a/http/cache_test.go b/http/cache_test.go index dd16e2b..1020750 100644 --- a/http/cache_test.go +++ b/http/cache_test.go @@ -4,24 +4,8 @@ import ( "fmt" "net" "testing" - "unsafe" ) -func TestCache(t *testing.T) { - - c := NewCache(10) - - for i := 0; i < 100; i++ { - ip := net.ParseIP(fmt.Sprintf("192.0.2.%d", i)) - r := &Response{IP: ip} - fmt.Println(unsafe.Sizeof(r)) - c.Set(ip, r) - } - - fmt.Println(len(c.entries)) - fmt.Println(len(c.keys)) -} - func TestCacheCapacity(t *testing.T) { var tests = []struct { addCount, capacity, size int @@ -33,10 +17,10 @@ func TestCacheCapacity(t *testing.T) { } for i, tt := range tests { c := NewCache(tt.capacity) - var responses []*Response + var responses []Response for i := 0; i < tt.addCount; i++ { ip := net.ParseIP(fmt.Sprintf("192.0.2.%d", i)) - r := &Response{IP: ip} + r := Response{IP: ip} responses = append(responses, r) c.Set(ip, r) } diff --git a/http/http.go b/http/http.go index 0f1f65d..c41ef65 100644 --- a/http/http.go +++ b/http/http.go @@ -7,10 +7,11 @@ import ( "path/filepath" "strings" + "net/http/pprof" + "github.com/mpolden/echoip/iputil" "github.com/mpolden/echoip/iputil/geo" "github.com/mpolden/echoip/useragent" - "net/http/pprof" "math/big" "net" @@ -125,9 +126,9 @@ func (s *Server) newResponse(r *http.Request) (Response, error) { } response, ok := s.cache.Get(ip) if ok { - // Not Caching the userAgent as it can vary for a given IP + // Do not cache user agent response.UserAgent = userAgentFromRequest(r) - return *response, nil + return response, nil } ipDecimal := iputil.ToDecimal(ip) country, _ := s.gr.Country(ip) @@ -141,7 +142,7 @@ func (s *Server) newResponse(r *http.Request) (Response, error) { if asn.AutonomousSystemNumber > 0 { autonomousSystemNumber = fmt.Sprintf("AS%d", asn.AutonomousSystemNumber) } - response = &Response{ + response = Response{ IP: ip, IPDecimal: ipDecimal, Country: country.Name, @@ -161,7 +162,7 @@ func (s *Server) newResponse(r *http.Request) (Response, error) { } s.cache.Set(ip, response) response.UserAgent = userAgentFromRequest(r) - return *response, nil + return response, nil } func (s *Server) newPortResponse(r *http.Request) (PortResponse, error) {