diff --git a/main.go b/main.go index 1df23f8..c175638 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,7 @@ package main import ( "fmt" "strings" + "time" "github.com/aws/aws-sdk-go-v2/aws/external" "github.com/aws/aws-sdk-go-v2/service/dynamodb" @@ -52,6 +53,20 @@ func main() { defer redditIndexer.Close() if viper.GetString("forumsession") != "" { + for _, locale := range server.Locales { + for { + logger := log.WithField("host", locale.ForumHost()) + if err := locale.RefreshForumIds(); err != nil { + logger.WithError(err).Error("error refreshing forum ids") + time.Sleep(5 * time.Second) + } else { + logger.Info("refreshed forum ids") + break + } + } + time.Sleep(time.Second) + } + forumIndexer, err := server.NewForumIndexer(server.ForumIndexerConfiguration{ Database: db, Session: viper.GetString("forumsession"), @@ -62,6 +77,7 @@ func main() { defer forumIndexer.Close() } - e := server.New(db, viper.GetString("ga")) - log.Fatal(e.Start(fmt.Sprintf(":%v", viper.GetInt("port")))) + s := server.New(db, viper.GetString("ga")) + defer s.Close() + log.Fatal(s.Start(fmt.Sprintf(":%v", viper.GetInt("port")))) } diff --git a/server/dynamodb_database.go b/server/dynamodb_database.go index 1411b32..3b7618b 100644 --- a/server/dynamodb_database.go +++ b/server/dynamodb_database.go @@ -119,7 +119,7 @@ func (db *DynamoDBDatabase) Activity(locale *Locale, start string, count int) ([ for _, item := range result.Items { if a, err := unmarshalActivity(item["rk"].B, item["v"].B); err != nil { return nil, "", err - } else if a != nil { + } else if a != nil && locale.ActivityFilter(a) { activity = append(activity, a) } } diff --git a/server/forum_indexer.go b/server/forum_indexer.go index aa4969b..d112930 100644 --- a/server/forum_indexer.go +++ b/server/forum_indexer.go @@ -73,20 +73,6 @@ func (indexer *ForumIndexer) run() { } for { - for _, locale := range Locales { - select { - case <-indexer.closeSignal: - return - default: - logger := log.WithField("host", locale.ForumHost()) - if err := locale.RefreshForumIds(); err != nil { - logger.WithError(err).Error("error refreshing forum ids") - } else { - logger.Info("refreshed forum ids") - } - time.Sleep(time.Second) - } - } for _, account := range accounts { select { case <-indexer.closeSignal: diff --git a/server/server.go b/server/server.go index d2ae0d3..d78bb02 100644 --- a/server/server.go +++ b/server/server.go @@ -11,6 +11,7 @@ import ( "github.com/labstack/echo" "github.com/labstack/echo/middleware" + log "github.com/sirupsen/logrus" ) func serveAsset(c echo.Context, path string) error { @@ -23,7 +24,14 @@ func serveAsset(c echo.Context, path string) error { return nil } -func New(db Database, ga string) *echo.Echo { +type Server struct { + *echo.Echo + + close chan struct{} + closed chan struct{} +} + +func New(db Database, ga string) *Server { e := echo.New() e.Use(middleware.Recover()) @@ -46,5 +54,43 @@ func New(db Database, ga string) *echo.Echo { return serveAsset(c, filepath.Join("static", path.Clean("/"+p))) }) - return e + ret := &Server{ + Echo: e, + close: make(chan struct{}), + closed: make(chan struct{}), + } + go ret.run() + return ret +} + +func (s *Server) Close() error { + close(s.close) + <-s.closed + return s.Echo.Close() +} + +func (s *Server) run() { + defer close(s.closed) + + for { + for _, locale := range Locales { + select { + case <-s.close: + return + default: + logger := log.WithField("host", locale.ForumHost()) + if err := locale.RefreshForumIds(); err != nil { + logger.WithError(err).Error("error refreshing forum ids") + } else { + logger.Info("refreshed forum ids") + } + time.Sleep(time.Second) + } + } + select { + case <-s.close: + return + case <-time.After(time.Minute): + } + } }