Files
2025-12-10 13:01:01 +09:00

71 lines
1.6 KiB
Go

package main
import (
"context"
"fmt"
"log"
"os"
"time"
"geoip-rest/internal/userprogram"
)
const defaultTimeout = 30 * time.Minute
func main() {
logger := log.New(os.Stdout, "[sync] ", log.LstdFlags)
dbURL, err := databaseURL()
if err != nil {
logger.Fatalf("database config: %v", err)
}
mysqlCfg, err := userprogram.NewMySQLConfigFromEnv()
if err != nil {
logger.Fatalf("mysql config: %v", err)
}
paths, err := userprogram.NewPathsFromEnv()
if err != nil {
logger.Fatalf("paths config: %v", err)
}
ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout)
defer cancel()
if err := userprogram.Sync(ctx, userprogram.SyncConfig{
MySQL: mysqlCfg,
DatabaseURL: dbURL,
Backend: userprogram.BackendFromEnv(),
LookupQuery: os.Getenv("GEOIP_LOOKUP_QUERY"),
MMDBPath: os.Getenv("GEOIP_DB_PATH"),
InitialCSV: paths.InitialCSV,
UpdateDir: paths.UpdateDir,
LogDir: paths.LogDir,
Schema: paths.Schema,
Logger: logger,
}); err != nil {
logger.Fatalf("sync failed: %v", err)
}
}
func databaseURL() (string, error) {
if url := os.Getenv("DATABASE_URL"); url != "" {
return url, nil
}
user := os.Getenv("POSTGRES_USER")
pass := os.Getenv("POSTGRES_PASSWORD")
host := os.Getenv("POSTGRES_HOST")
if host == "" {
host = "localhost"
}
port := os.Getenv("POSTGRES_PORT")
if port == "" {
port = "5432"
}
db := os.Getenv("POSTGRES_DB")
if user == "" || pass == "" || db == "" {
return "", fmt.Errorf("DATABASE_URL or POSTGRES_{USER,PASSWORD,DB} is required")
}
return fmt.Sprintf("postgres://%s:%s@%s:%s/%s?sslmode=disable", user, pass, host, port, db), nil
}