package main import ( "log" "net/http" "os" "os/signal" "syscall" "git.tavo.one/tavo/axiom/database" "git.tavo.one/tavo/axiom/handlers" "git.tavo.one/tavo/axiom/storage" ) func init() { needed := []string{ "PRODUCTION", "PORT", "APP_DATA_DIR", "DB_CONNDVR", "DB_CONNSTR", } for _, v := range needed { if os.Getenv(v) == "" { log.Fatalf("missing environment varialbe: %s", v) } } } func main() { db, err := database.Init(os.Getenv("DB_CONNDVR"), os.Getenv("DB_CONNSTR")) if err != nil { log.Fatalf("failed to initialize database: %v", err) } defer db.Close() s3, err := storage.New(os.Getenv("APP_DATA_DIR"), 4<<20) if err != nil { log.Fatalf("failed to initialize storage: %v", err) } handlerConfig := handlers.Config{ Production: os.Getenv("PRODUCTION") == "1", Views: nil, DB: db, S3: s3, } handler := handlers.New(handlerConfig) router := http.NewServeMux() router.HandleFunc("GET /", handler.SampleIndex) stop := make(chan os.Signal, 1) signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM) port := os.Getenv("PORT") go func() { log.Printf("starting on :%s...", port) if err := http.ListenAndServe(":"+port, router); err != nil { log.Fatalf("fatal: failed to start on port %s: %v", port, err) } }() <-stop log.Printf("shutting down...") }