Skip to content

Commit 59bdfbe

Browse files
authored
geolocation: use maxmind (textileio#446)
* use maxmind Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com> * move Dockerfile to root Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com> * use db path parameter Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com> * consider ip6 in multiaddr conversion Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com> * new db version and tests Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com> * exported comments Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com> * make maxmind folder db configurable for tests Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com> * fix path Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com> * fix test Signed-off-by: Ignacio Hagopian <jsign.uy@gmail.com>
1 parent c55002d commit 59bdfbe

21 files changed

Lines changed: 225 additions & 145 deletions

File tree

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ COPY . .
99
RUN CGO_ENABLED=0 GOOS=linux go build -o powd cmd/powd/main.go
1010

1111
FROM alpine
12-
COPY --from=builder /app/api/server/ip2location-ip4.bin /app/ip2location-ip4.bin
12+
COPY --from=builder /app/iplocation/maxmind/GeoLite2-City.mmdb /app/GeoLite2-City.mmdb
1313
COPY --from=builder /app/powd /app/powd
1414
WORKDIR /app
1515
ENTRYPOINT ["./powd"]

api/client/net_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ func TestFindPeer(t *testing.T) {
3535
require.Nil(t, err)
3636
require.NotEmpty(t, peer.AddrInfo.ID)
3737
require.NotEmpty(t, peer.AddrInfo.Addrs)
38-
require.NotEmpty(t, peer.Location.Country)
38+
// The addrs of peers are in localhost, so
39+
// no location information will be available.
40+
require.Nil(t, peer.Location)
3941
}
4042

4143
func TestDisconnectConnect(t *testing.T) {

api/client/utils_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ func setupServer(t *testing.T) func() {
5050
GrpcWebProxyAddress: grpcWebProxyAddress,
5151
RepoPath: repoPath,
5252
GatewayHostAddr: gatewayHostAddr,
53+
MaxMindDBFolder: "../../iplocation/maxmind",
5354
}
5455
server, err := server.NewServer(conf)
5556
checkErr(t, err)

api/server/server.go

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ import (
3939
faultsRpc "github.com/textileio/powergate/index/faults/rpc"
4040
"github.com/textileio/powergate/index/miner"
4141
minerRpc "github.com/textileio/powergate/index/miner/rpc"
42-
"github.com/textileio/powergate/iplocation/ip2location"
42+
"github.com/textileio/powergate/iplocation/maxmind"
4343
"github.com/textileio/powergate/lotus"
4444
pgnet "github.com/textileio/powergate/net"
4545
pgnetlotus "github.com/textileio/powergate/net/lotus"
@@ -67,15 +67,15 @@ var (
6767
type Server struct {
6868
ds datastore.TxnDatastore
6969

70-
ip2l *ip2location.IP2Location
71-
ai *ask.Runner
72-
mi *miner.Index
73-
fi *faults.Index
74-
dm *deals.Module
75-
wm *wallet.Module
76-
rm *reputation.Module
77-
nm pgnet.Module
78-
hm *health.Module
70+
mm *maxmind.MaxMind
71+
ai *ask.Runner
72+
mi *miner.Index
73+
fi *faults.Index
74+
dm *deals.Module
75+
wm *wallet.Module
76+
rm *reputation.Module
77+
nm pgnet.Module
78+
hm *health.Module
7979

8080
ffsManager *manager.Manager
8181
sched *scheduler.Scheduler
@@ -105,6 +105,7 @@ type Config struct {
105105
GrpcWebProxyAddress string
106106
RepoPath string
107107
GatewayHostAddr string
108+
MaxMindDBFolder string
108109
}
109110

110111
// NewServer starts and returns a new server with the given configuration.
@@ -150,12 +151,15 @@ func NewServer(conf Config) (*Server, error) {
150151
return nil, fmt.Errorf("opening datastore on repo: %s", err)
151152
}
152153

153-
ip2l := ip2location.New([]string{"./ip2location-ip4.bin"})
154+
mm, err := maxmind.New(filepath.Join(conf.MaxMindDBFolder, "./GeoLite2-City.mmdb"))
155+
if err != nil {
156+
return nil, fmt.Errorf("opening maxmind database: %s", err)
157+
}
154158
ai, err := ask.New(txndstr.Wrap(ds, "index/ask"), c)
155159
if err != nil {
156160
return nil, fmt.Errorf("creating ask index: %s", err)
157161
}
158-
mi, err := miner.New(txndstr.Wrap(ds, "index/miner"), c, fchost, ip2l)
162+
mi, err := miner.New(txndstr.Wrap(ds, "index/miner"), c, fchost, mm)
159163
if err != nil {
160164
return nil, fmt.Errorf("creating miner index: %s", err)
161165
}
@@ -173,7 +177,7 @@ func NewServer(conf Config) (*Server, error) {
173177
}
174178
pm := paychLotus.New(c)
175179
rm := reputation.New(txndstr.Wrap(ds, "reputation"), mi, si, ai)
176-
nm := pgnetlotus.New(c, ip2l)
180+
nm := pgnetlotus.New(c, mm)
177181
hm := health.New(nm)
178182

179183
ipfs, err := httpapi.NewApi(conf.IpfsAPIAddr)
@@ -205,7 +209,7 @@ func NewServer(conf Config) (*Server, error) {
205209
s := &Server{
206210
ds: ds,
207211

208-
ip2l: ip2l,
212+
mm: mm,
209213

210214
ai: ai,
211215
mi: mi,
@@ -403,5 +407,7 @@ func (s *Server) Close() {
403407
log.Errorf("closing gateway: %s", err)
404408
}
405409
s.closeLotus()
406-
s.ip2l.Close()
410+
if err := s.mm.Close(); err != nil {
411+
log.Errorf("closing maxmind: %s", err)
412+
}
407413
}

cmd/powd/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ func setupLogging() error {
174174
"reputation-source-store",
175175
"chainstore",
176176
"fchost",
177-
"ip2location",
177+
"maxmind",
178178

179179
// Deals Module
180180
"deals",

docker/docker-compose-devnet.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ services:
55
powergate:
66
build:
77
context: ../
8-
dockerfile: cmd/powd/Dockerfile
98
ports:
109
- 8889:8889
1110
- 8888:8888

docker/docker-compose.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ services:
1010
powergate:
1111
build:
1212
context: ../
13-
dockerfile: cmd/powd/Dockerfile
1413
ports:
1514
- 8889:8889
1615
- 8888:8888

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ require (
2323
github.com/gosuri/uilive v0.0.4
2424
github.com/grpc-ecosystem/go-grpc-middleware v1.2.0
2525
github.com/improbable-eng/grpc-web v0.12.0
26-
github.com/ip2location/ip2location-go v8.3.0+incompatible
2726
github.com/ipfs/go-block-format v0.0.2
2827
github.com/ipfs/go-cid v0.0.6-0.20200501230655-7c82f3b81c00
2928
github.com/ipfs/go-datastore v0.4.4
@@ -49,6 +48,7 @@ require (
4948
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
5049
github.com/olekukonko/tablewriter v0.0.4
5150
github.com/ory/dockertest/v3 v3.6.0
51+
github.com/oschwald/geoip2-golang v1.4.0
5252
github.com/rs/cors v1.7.0
5353
github.com/spf13/cobra v1.0.0
5454
github.com/spf13/pflag v1.0.5

go.sum

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -491,8 +491,6 @@ github.com/improbable-eng/grpc-web v0.12.0/go.mod h1:6hRR09jOEG81ADP5wCQju1z71g6
491491
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
492492
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
493493
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
494-
github.com/ip2location/ip2location-go v8.3.0+incompatible h1:QwUE+FlSbo6bjOWZpv2Grb57vJhWYFNPyBj2KCvfWaM=
495-
github.com/ip2location/ip2location-go v8.3.0+incompatible/go.mod h1:3JUY1TBjTx1GdA7oRT7Zeqfc0bg3lMMuU5lXmzdpuME=
496494
github.com/ipfs/bbloom v0.0.1/go.mod h1:oqo8CVWsJFMOZqTglBG4wydCE4IQA/G2/SEofB0rjUI=
497495
github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs=
498496
github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0=
@@ -1304,6 +1302,10 @@ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnh
13041302
github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
13051303
github.com/ory/dockertest/v3 v3.6.0 h1:I6KNJ6izxGduLACQii2SP/g7GN0JM9Xfaik6aAVaw6Y=
13061304
github.com/ory/dockertest/v3 v3.6.0/go.mod h1:4ZOpj8qBUmh8fcBSVzkH2bws2s91JdGvHUqan4GHEuQ=
1305+
github.com/oschwald/geoip2-golang v1.4.0 h1:5RlrjCgRyIGDz/mBmPfnAF4h8k0IAcRv9PvrpOfz+Ug=
1306+
github.com/oschwald/geoip2-golang v1.4.0/go.mod h1:8QwxJvRImBH+Zl6Aa6MaIcs5YdlZSTKtzmPGzQqi9ng=
1307+
github.com/oschwald/maxminddb-golang v1.6.0 h1:KAJSjdHQ8Kv45nFIbtoLGrGWqHFajOIm7skTyz/+Dls=
1308+
github.com/oschwald/maxminddb-golang v1.6.0/go.mod h1:DUJFucBg2cvqx42YmDa/+xHvb0elJtOm3o4aFQ/nb/w=
13071309
github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
13081310
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
13091311
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
@@ -1766,6 +1768,7 @@ golang.org/x/sys v0.0.0-20191025021431-6c3a3bfe00ae/go.mod h1:h1NjWce9XRLGQEsW7w
17661768
golang.org/x/sys v0.0.0-20191025090151-53bf42e6b339/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
17671769
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
17681770
golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
1771+
golang.org/x/sys v0.0.0-20191224085550-c709ea063b76/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
17691772
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
17701773
golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
17711774
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=

index/miner/rpc/rpc.pb.go

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)