Files
services/ip/main.go
Dominic Wong 5cd61c7dfb Tracing (#156)
2021-06-11 17:50:32 +01:00

102 lines
2.1 KiB
Go

package main
import (
"io"
"os"
"path"
"strings"
"github.com/micro/services/ip/handler"
pb "github.com/micro/services/ip/proto"
"github.com/micro/services/pkg/tracing"
"github.com/micro/micro/v3/service"
"github.com/micro/micro/v3/service/config"
"github.com/micro/micro/v3/service/logger"
"github.com/micro/micro/v3/service/store"
"github.com/oschwald/geoip2-golang"
)
// loadFile from the blob store
func loadFile(p string) (string, error) {
name := path.Base(p)
f, err := os.Create("./" + name)
if err != nil {
return "", err
}
defer f.Close()
reader, err := store.DefaultBlobStore.Read(p)
if err != nil {
return "", err
}
_, err = io.Copy(f, reader)
return "./" + name, err
}
func main() {
// Create service
srv := service.New(
service.Name("ip"),
service.Version("latest"),
)
// get the ip city database
v, err := config.Get("ip.city.database")
if err != nil {
logger.Fatalf("failed to get config: %v", err)
}
path := v.String("./GeoLite2-City.mmdb")
// load from blob store if specified
if strings.HasPrefix(path, "blob://") {
f, err := loadFile(strings.TrimPrefix(path, "blob://"))
if err != nil {
logger.Fatal("failed to load db: %v", err)
}
path = f
}
// load the ip city database
cr, err := geoip2.Open(path)
if err != nil {
logger.Fatalf("failed to open ip db: %v", err)
}
// get the asn database
v, err = config.Get("ip.asn.database")
if err != nil {
logger.Fatalf("failed to get config: %v", err)
}
path = v.String("./GeoLite2-ASN.mmdb")
// load from blob store if specified
if strings.HasPrefix(path, "blob://") {
f, err := loadFile(strings.TrimPrefix(path, "blob://"))
if err != nil {
logger.Fatal("failed to load db: %v", err)
}
path = f
}
ar, err := geoip2.Open(path)
if err != nil {
logger.Fatalf("failed to open ip db: %v", err)
}
// Register handler
pb.RegisterIpHandler(srv.Server(), &handler.Ip{CityReader: cr, ASNReader: ar})
traceCloser := tracing.SetupOpentracing("ip")
defer traceCloser.Close()
// Run service
if err := srv.Run(); err != nil {
logger.Fatal(err)
}
}