2021-07-31 22:45:49 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2021-08-02 21:21:12 +00:00
|
|
|
"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"
|
2021-08-02 21:21:12 +00:00
|
|
|
"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"
|
2021-08-02 21:21:12 +00:00
|
|
|
"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"
|
2021-07-31 22:45:49 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
2021-08-02 21:21:12 +00:00
|
|
|
|
2021-08-03 22:40:33 +00:00
|
|
|
ctx := context.Background()
|
2022-05-06 02:17:59 +00:00
|
|
|
|
2022-05-08 22:36:08 +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)
|
2021-08-02 21:21:12 +00:00
|
|
|
|
2021-08-08 02:38:37 +00:00
|
|
|
var powMgrParams pow.ManagerParams
|
|
|
|
powMgrParams.SetupCfg(cfg)
|
|
|
|
ctx = mctx.WithAnnotator(ctx, &powMgrParams)
|
2021-08-03 21:20:32 +00:00
|
|
|
|
2021-08-08 02:38:37 +00:00
|
|
|
var mailerParams mailinglist.MailerParams
|
|
|
|
mailerParams.SetupCfg(cfg)
|
|
|
|
ctx = mctx.WithAnnotator(ctx, &mailerParams)
|
2021-08-01 23:54:53 +00:00
|
|
|
|
2021-08-08 02:38:37 +00:00
|
|
|
var mlParams mailinglist.Params
|
|
|
|
mlParams.SetupCfg(cfg)
|
|
|
|
ctx = mctx.WithAnnotator(ctx, &mlParams)
|
2021-08-02 21:21:12 +00:00
|
|
|
|
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
|
|
|
|
2022-05-08 22:36:08 +00:00
|
|
|
var radixClient cfgpkg.RadixClient
|
|
|
|
radixClient.SetupCfg(cfg)
|
|
|
|
defer radixClient.Close()
|
|
|
|
ctx = mctx.WithAnnotator(ctx, &radixClient)
|
2021-08-31 02:08:51 +00:00
|
|
|
|
2021-08-08 02:38:37 +00:00
|
|
|
// initialization
|
|
|
|
err := cfg.Init(ctx)
|
2021-08-01 23:54:53 +00:00
|
|
|
|
2021-08-08 02:38:37 +00:00
|
|
|
logger := mlog.NewLogger(nil)
|
|
|
|
defer logger.Close()
|
2021-08-03 22:28:22 +00:00
|
|
|
|
2021-08-08 02:38:37 +00:00
|
|
|
logger.Info(ctx, "process started")
|
|
|
|
defer logger.Info(ctx, "process exiting")
|
2021-08-03 21:20:32 +00:00
|
|
|
|
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-07 02:34:18 +00:00
|
|
|
}
|
2021-08-01 23:54:53 +00:00
|
|
|
|
|
|
|
clock := clock.Realtime()
|
|
|
|
|
|
|
|
powStore := pow.NewMemoryStore(clock)
|
|
|
|
defer powStore.Close()
|
|
|
|
|
2021-08-08 02:38:37 +00:00
|
|
|
powMgrParams.Store = powStore
|
|
|
|
powMgrParams.Clock = clock
|
2021-07-31 22:45:49 +00:00
|
|
|
|
2021-08-08 02:38:37 +00:00
|
|
|
powMgr := pow.NewManager(powMgrParams)
|
2021-08-02 21:21:12 +00:00
|
|
|
|
2021-08-07 02:34:18 +00:00
|
|
|
var mailer mailinglist.Mailer
|
2021-08-08 02:38:37 +00:00
|
|
|
if mailerParams.SMTPAddr == "" {
|
2021-08-30 03:34:02 +00:00
|
|
|
logger.Info(ctx, "-smtp-addr not given, using a fake Mailer")
|
|
|
|
mailer = mailinglist.NewLogMailer(logger.WithNamespace("fake-mailer"))
|
2021-08-07 02:34:18 +00:00
|
|
|
} else {
|
2021-08-08 02:38:37 +00:00
|
|
|
mailer = mailinglist.NewMailer(mailerParams)
|
2021-08-07 02:34:18 +00:00
|
|
|
}
|
2021-08-02 21:21:12 +00:00
|
|
|
|
2022-05-07 19:17:18 +00:00
|
|
|
mlStore, err := mailinglist.NewStore(dataDir)
|
2021-08-02 21:21:12 +00:00
|
|
|
if err != nil {
|
2022-05-06 01:33:40 +00:00
|
|
|
logger.Fatal(ctx, "initializing mailing list storage", err)
|
2021-08-02 21:21:12 +00:00
|
|
|
}
|
|
|
|
defer mlStore.Close()
|
|
|
|
|
2021-08-08 02:38:37 +00:00
|
|
|
mlParams.Store = mlStore
|
|
|
|
mlParams.Mailer = mailer
|
|
|
|
mlParams.Clock = clock
|
2021-08-02 21:21:12 +00:00
|
|
|
|
2021-08-08 02:38:37 +00:00
|
|
|
ml := mailinglist.New(mlParams)
|
2021-08-04 23:12:16 +00:00
|
|
|
|
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)
|
2022-08-19 05:07:09 +00:00
|
|
|
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
|
2022-08-19 05:07:09 +00:00
|
|
|
httpParams.PostDraftStore = postDraftStore
|
2022-05-20 17:17:31 +00:00
|
|
|
httpParams.MailingList = ml
|
2021-07-31 22:45:49 +00:00
|
|
|
|
2021-08-02 21:21:12 +00:00
|
|
|
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() {
|
2021-08-08 02:38:37 +00:00
|
|
|
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
|
|
|
}
|
|
|
|
}()
|
|
|
|
|
2021-08-08 02:38:37 +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
|
2021-07-31 22:45:49 +00:00
|
|
|
}
|