mediocre-blog/srv/src/cmd/mediocre-blog/main.go

134 lines
3.2 KiB
Go
Raw Normal View History

package main
import (
"context"
2021-08-03 22:40:33 +00:00
"os"
"os/signal"
"syscall"
"time"
2021-08-01 23:54:53 +00:00
2022-05-07 19:17:18 +00:00
cfgpkg "github.com/mediocregopher/blog.mediocregopher.com/srv/cfg"
2022-05-20 17:17:31 +00:00
"github.com/mediocregopher/blog.mediocregopher.com/srv/http"
"github.com/mediocregopher/blog.mediocregopher.com/srv/mailinglist"
2022-05-13 19:35:54 +00:00
"github.com/mediocregopher/blog.mediocregopher.com/srv/post"
2021-08-01 23:54:53 +00:00
"github.com/mediocregopher/blog.mediocregopher.com/srv/pow"
"github.com/mediocregopher/mediocre-go-lib/v2/mctx"
"github.com/mediocregopher/mediocre-go-lib/v2/mlog"
2021-08-01 23:54:53 +00:00
"github.com/tilinna/clock"
)
func main() {
2021-08-03 22:40:33 +00:00
ctx := context.Background()
2022-05-06 02:17:59 +00:00
cfg := cfgpkg.NewBlogCfg(cfgpkg.Params{})
2021-08-03 22:40:33 +00:00
2022-05-07 19:17:18 +00:00
var dataDir cfgpkg.DataDir
dataDir.SetupCfg(cfg)
defer dataDir.Close()
ctx = mctx.WithAnnotator(ctx, &dataDir)
var powMgrParams pow.ManagerParams
powMgrParams.SetupCfg(cfg)
ctx = mctx.WithAnnotator(ctx, &powMgrParams)
var mailerParams mailinglist.MailerParams
mailerParams.SetupCfg(cfg)
ctx = mctx.WithAnnotator(ctx, &mailerParams)
2021-08-01 23:54:53 +00:00
var mlParams mailinglist.Params
mlParams.SetupCfg(cfg)
ctx = mctx.WithAnnotator(ctx, &mlParams)
2022-05-20 17:17:31 +00:00
var httpParams http.Params
httpParams.SetupCfg(cfg)
ctx = mctx.WithAnnotator(ctx, &httpParams)
2021-08-01 23:54:53 +00:00
var radixClient cfgpkg.RadixClient
radixClient.SetupCfg(cfg)
defer radixClient.Close()
ctx = mctx.WithAnnotator(ctx, &radixClient)
// initialization
err := cfg.Init(ctx)
2021-08-01 23:54:53 +00:00
logger := mlog.NewLogger(nil)
defer logger.Close()
logger.Info(ctx, "process started")
defer logger.Info(ctx, "process exiting")
2021-08-01 23:54:53 +00:00
if err != nil {
2022-05-06 01:33:40 +00:00
logger.Fatal(ctx, "initializing", err)
}
2021-08-01 23:54:53 +00:00
clock := clock.Realtime()
powStore := pow.NewMemoryStore(clock)
defer powStore.Close()
powMgrParams.Store = powStore
powMgrParams.Clock = clock
powMgr := pow.NewManager(powMgrParams)
var mailer mailinglist.Mailer
if mailerParams.SMTPAddr == "" {
logger.Info(ctx, "-smtp-addr not given, using a fake Mailer")
mailer = mailinglist.NewLogMailer(logger.WithNamespace("fake-mailer"))
} else {
mailer = mailinglist.NewMailer(mailerParams)
}
2022-05-07 19:17:18 +00:00
mlStore, err := mailinglist.NewStore(dataDir)
if err != nil {
2022-05-06 01:33:40 +00:00
logger.Fatal(ctx, "initializing mailing list storage", err)
}
defer mlStore.Close()
mlParams.Store = mlStore
mlParams.Mailer = mailer
mlParams.Clock = clock
ml := mailinglist.New(mlParams)
2022-05-13 19:35:54 +00:00
postSQLDB, err := post.NewSQLDB(dataDir)
if err != nil {
logger.Fatal(ctx, "initializing sql db for post data", err)
}
defer postSQLDB.Close()
postStore := post.NewStore(postSQLDB)
2022-05-17 19:29:12 +00:00
postAssetStore := post.NewAssetStore(postSQLDB)
postDraftStore := post.NewDraftStore(postSQLDB)
2022-05-13 19:35:54 +00:00
2022-05-20 17:17:31 +00:00
httpParams.Logger = logger.WithNamespace("http")
httpParams.PowManager = powMgr
httpParams.PostStore = postStore
httpParams.PostAssetStore = postAssetStore
httpParams.PostDraftStore = postDraftStore
2022-05-20 17:17:31 +00:00
httpParams.MailingList = ml
logger.Info(ctx, "listening")
2022-05-20 17:17:31 +00:00
httpAPI, err := http.New(httpParams)
2021-08-03 22:40:33 +00:00
if err != nil {
2022-05-20 17:17:31 +00:00
logger.Fatal(ctx, "initializing http api", err)
2021-08-03 23:47:01 +00:00
}
2021-08-03 22:40:33 +00:00
defer func() {
shutdownCtx, cancel := context.WithTimeout(ctx, 5*time.Second)
2021-08-03 22:40:33 +00:00
defer cancel()
2022-05-20 17:17:31 +00:00
if err := httpAPI.Shutdown(shutdownCtx); err != nil {
logger.Fatal(ctx, "shutting down http api", err)
2021-08-03 22:40:33 +00:00
}
}()
// wait
2022-05-06 01:33:40 +00:00
sigCh := make(chan os.Signal, 1)
2021-08-03 22:40:33 +00:00
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
<-sigCh
// let the defers begin
}