diff --git a/main.go b/main.go index a6737c0..daaae6c 100644 --- a/main.go +++ b/main.go @@ -7,6 +7,7 @@ import ( "html/template" "net/http" "os" + "os/signal" "strings" eventstore_badger "github.com/fiatjaf/eventstore/badger" @@ -73,10 +74,12 @@ func main() { tailwindDebugStuff = template.HTML(fmt.Sprintf("", config, style)) } - initCache() + deinitCache := initCache() + defer deinitCache() // initialize routines - ctx := context.Background() + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() go updateArchives(ctx) go deleteOldCachedEvents(ctx) @@ -110,11 +113,18 @@ func main() { mux.HandleFunc("/", renderEvent) log.Print("listening at http://0.0.0.0:" + s.Port) - if err := http.ListenAndServe("0.0.0.0:"+s.Port, cors.Default().Handler(relay)); err != nil { - log.Fatal().Err(err).Msg("") - } + server := &http.Server{Addr: "0.0.0.0:" + s.Port, Handler: cors.Default().Handler(relay)} + go func() { + server.ListenAndServe() + if err := server.ListenAndServe(); err != nil { + log.Error().Err(err).Msg("") + } + }() - select {} + sc := make(chan os.Signal, 1) + signal.Notify(sc, os.Interrupt) + <-sc + server.Close() } func initCache() func() { diff --git a/routines.go b/routines.go index ab2eacd..e6b3f2b 100644 --- a/routines.go +++ b/routines.go @@ -17,11 +17,10 @@ func updateArchives(ctx context.Context) { select { case <-ctx.Done(): return - default: + case <-time.After(24 * time.Hour): loadNpubsArchive(ctx) loadRelaysArchive(ctx) } - time.Sleep(24 * time.Hour) } } @@ -29,7 +28,11 @@ func deleteOldCachedEvents(ctx context.Context) { wdb := eventstore.RelayWrapper{Store: db} for { - time.Sleep(time.Hour) + select { + case <-ctx.Done(): + return + case <-time.After(time.Hour): + } log.Debug().Msg("deleting old cached events") now := time.Now().Unix() for _, key := range cache.GetPaginatedKeys("ttl:", 1, 500) {