| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- package main
- import (
- "context"
- "log"
- "net/http"
- "os"
- "os/signal"
- "syscall"
- "time"
- "github.com/celestia-trace/backend/config"
- "github.com/celestia-trace/backend/database"
- "github.com/celestia-trace/backend/router"
- "github.com/joho/godotenv"
- )
- func main() {
- // Try loading .env if it exists
- _ = godotenv.Load()
- // Load configuration
- cfg := config.Load()
-
- // Initialize database
- database.Init(cfg)
- // Setup router
- r := router.Setup(database.DB, cfg)
- srv := &http.Server{
- Addr: ":" + cfg.ServerPort,
- Handler: r,
- }
- go func() {
- log.Printf("Server listening on port %s", cfg.ServerPort)
- if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
- log.Fatalf("listen: %s\n", err)
- }
- }()
- // Graceful shutdown with signal handling
- quit := make(chan os.Signal, 1)
- signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
- <-quit
- log.Println("Shutting down server...")
- ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
- defer cancel()
- if err := srv.Shutdown(ctx); err != nil {
- log.Fatal("Server forced to shutdown:", err)
- }
- log.Println("Server exiting")
- }
|