DB 적재 초기구조
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"log"
|
||||
"net/url"
|
||||
"os"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
@@ -15,12 +17,20 @@ const (
|
||||
)
|
||||
|
||||
func main() {
|
||||
backend := geo.Backend(env("GEOIP_BACKEND", string(geo.BackendMMDB)))
|
||||
dbPath := env("GEOIP_DB_PATH", defaultDBPath)
|
||||
dbURL := os.Getenv("DATABASE_URL")
|
||||
lookupQuery := os.Getenv("GEOIP_LOOKUP_QUERY")
|
||||
port := env("PORT", defaultPort)
|
||||
|
||||
resolver, err := geo.NewResolver(dbPath)
|
||||
resolver, err := geo.NewResolver(geo.Config{
|
||||
Backend: backend,
|
||||
MMDBPath: dbPath,
|
||||
DatabaseURL: dbURL,
|
||||
LookupQuery: lookupQuery,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatalf("failed to open GeoIP database: %v", err)
|
||||
log.Fatalf("failed to initialize resolver: %v", err)
|
||||
}
|
||||
defer resolver.Close()
|
||||
|
||||
@@ -50,21 +60,33 @@ func main() {
|
||||
|
||||
location, err := resolver.Lookup(ip)
|
||||
if err != nil {
|
||||
if err == geo.ErrInvalidIP {
|
||||
switch {
|
||||
case errors.Is(err, geo.ErrInvalidIP):
|
||||
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
||||
"error": "invalid ip address",
|
||||
})
|
||||
case errors.Is(err, geo.ErrNotFound):
|
||||
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{
|
||||
"error": "location not found",
|
||||
})
|
||||
default:
|
||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
||||
"error": "lookup failed",
|
||||
})
|
||||
}
|
||||
|
||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
||||
"error": "lookup failed",
|
||||
})
|
||||
}
|
||||
|
||||
return c.JSON(location)
|
||||
})
|
||||
|
||||
log.Printf("starting GeoIP API on :%s using %s", port, dbPath)
|
||||
log.Printf("starting GeoIP API on :%s backend=%s", port, backend)
|
||||
switch backend {
|
||||
case geo.BackendPostgres:
|
||||
log.Printf("using postgres DSN %s", sanitizeDBURL(dbURL))
|
||||
default:
|
||||
log.Printf("using mmdb path %s", dbPath)
|
||||
}
|
||||
|
||||
if err := app.Listen(":" + port); err != nil {
|
||||
log.Fatalf("server stopped: %v", err)
|
||||
}
|
||||
@@ -76,3 +98,11 @@ func env(key, fallback string) string {
|
||||
}
|
||||
return fallback
|
||||
}
|
||||
|
||||
func sanitizeDBURL(raw string) string {
|
||||
u, err := url.Parse(raw)
|
||||
if err != nil {
|
||||
return "postgres"
|
||||
}
|
||||
return u.Redacted()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user