Restructure and refactor codebase

This commit is contained in:
2025-02-28 18:29:27 +00:00
parent 624cfb2c40
commit 2c9ad491ff
10 changed files with 690 additions and 378 deletions
+40 -4
View File
@@ -1,8 +1,44 @@
package main
import (
"context"
"log"
"os"
"os/signal"
"syscall"
"time"
db "skidoodle/ipinfo/internal/db"
server "skidoodle/ipinfo/internal/server"
)
func main() {
initDatabases()
go startUpdater()
healthCheck()
startServer()
// Create context with cancellation for graceful shutdown
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// Set up signal handling for graceful shutdown
go handleSignals(cancel)
// Initialize GeoIP manager from internal/db package
geoIP, err := db.NewGeoIPManager()
if err != nil {
log.Fatalf("Failed to initialize GeoIP databases: %v", err)
}
defer geoIP.Close()
// Start database updater in background (update every 24 hours)
geoIP.StartUpdater(ctx, 24*time.Hour)
// Start health check and server
server.StartServer(ctx, geoIP)
}
// handleSignals gracefully handles termination signals
func handleSignals(cancel context.CancelFunc) {
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
sig := <-sigCh
log.Printf("Received signal %v, shutting down gracefully", sig)
cancel()
}