백업 테이블 운영

This commit is contained in:
Lectom C Han
2025-12-09 19:29:34 +09:00
parent c4bb3525d3
commit 8762db2c0e
17 changed files with 88913 additions and 13 deletions

View File

@@ -1,19 +1,24 @@
package main
import (
"context"
"errors"
"log"
"net/url"
"os"
"time"
"github.com/gofiber/fiber/v2"
"geoip-rest/internal/geo"
"geoip-rest/internal/schedule"
)
const (
defaultPort = "8080"
defaultDBPath = "/data/GeoLite2-City.mmdb"
defaultDBPath = "/initial_data/GeoLite2-City.mmdb"
defaultCron = ""
defaultScript = "./scripts/dump_and_import.sh"
)
func main() {
@@ -87,6 +92,14 @@ func main() {
log.Printf("using mmdb path %s", dbPath)
}
stopScheduler := maybeStartScheduler()
defer func() {
if stopScheduler != nil {
ctx := stopScheduler()
<-ctx.Done()
}
}()
if err := app.Listen(":" + port); err != nil {
log.Fatalf("server stopped: %v", err)
}
@@ -106,3 +119,33 @@ func sanitizeDBURL(raw string) string {
}
return u.Redacted()
}
func maybeStartScheduler() func() context.Context {
cronExpr := env("USER_PROGRAM_CRON", defaultCron)
if cronExpr == "" {
return nil
}
script := env("USER_PROGRAM_SCRIPT", defaultScript)
sched, err := schedule.Start(schedule.Config{
CronExpr: cronExpr,
ScriptPath: script,
Logger: log.Default(),
})
if err != nil {
log.Printf("scheduler not started (error=%v)", err)
return nil
}
return func() context.Context {
ctx := sched.Stop()
timer := time.NewTimer(2 * time.Second)
select {
case <-ctx.Done():
timer.Stop()
return ctx
case <-timer.C:
return ctx
}
}
}