68 lines
1.5 KiB
Go
68 lines
1.5 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,
|
|
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
|
|
}
|