Files
geoip-rest/cmd/user_program_dump/main.go
Lectom C Han 199bc29115 경로 통일
2025-12-10 10:46:21 +09:00

64 lines
1.5 KiB
Go

package main
import (
"context"
"log"
"os"
"strconv"
"time"
"geoip-rest/internal/userprogram"
)
const defaultDumpTimeout = 5 * time.Minute
func main() {
logger := log.New(os.Stdout, "[dump] ", log.LstdFlags)
mysqlCfg, err := userprogram.NewMySQLConfigFromEnv()
if err != nil {
log.Fatalf("config error: %v", err)
}
updateDir := userprogram.DefaultUpdateDir
if val := os.Getenv("USER_PROGRAM_UPDATE_DIR"); val != "" {
updateDir = val
}
target, err := userprogram.ParseTargetDate(os.Getenv("USER_PROGRAM_TARGET_DATE"))
if err != nil {
log.Fatalf("target date error: %v", err)
}
startID := int64(0)
if val := os.Getenv("USER_PROGRAM_START_ID"); val != "" {
parsed, parseErr := strconv.ParseInt(val, 10, 64)
if parseErr != nil {
log.Fatalf("invalid USER_PROGRAM_START_ID: %v", parseErr)
}
startID = parsed
}
ctx, cancel := context.WithTimeout(context.Background(), defaultDumpTimeout)
defer cancel()
dumper, err := userprogram.NewDumper(mysqlCfg, updateDir)
if err != nil {
log.Fatalf("init dumper failed: %v", err)
}
defer dumper.Close()
endID, err := dumper.MaxIDUntil(ctx, target)
if err != nil {
log.Fatalf("determine end id failed: %v", err)
}
if endID <= startID {
logger.Printf("no rows to dump (start_id=%d end_id=%d)", startID, endID)
return
}
outPath, err := dumper.DumpRange(ctx, startID, endID, target)
if err != nil {
log.Fatalf("dump failed: %v", err)
}
logger.Printf("dumped ids (%d, %d] to %s", startID, endID, outPath)
}