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) {