/* * SPDX-FileCopyrightText: 2023 jordi fita mas * SPDX-License-Identifier: AGPL-3.0-only */ package main import ( "context" "log" "net/http" "os" "os/signal" "syscall" "time" "dev.tandem.ws/tandem/camper/pkg/app" "dev.tandem.ws/tandem/camper/pkg/database" ) var avatarsDir = "/var/lib/camper/avatars" func main() { db, err := database.New(context.Background(), os.Getenv("CAMPER_DATABASE_URL")) if err != nil { log.Fatal(err) } defer db.Close() handler, err := app.New(db, avatarsDir) if err != nil { log.Fatal(err) } srv := http.Server{ Addr: ":8080", Handler: handler, ReadTimeout: 5 * time.Second, WriteTimeout: 10 * time.Second, IdleTimeout: 2 * time.Minute, } go func() { log.Printf("INFO - listening on %s\n", srv.Addr) if err := srv.ListenAndServe(); err != http.ErrServerClosed { log.Fatalf("http server: %v", err) } }() sigCh := make(chan os.Signal, 1) signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM) <-sigCh ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() log.Print("INFO - stopping server") if err := srv.Shutdown(ctx); err != nil { log.Fatal(err) } }