diff options
Diffstat (limited to 'src/cmd/mediocre-blog/main.go')
-rw-r--r-- | src/cmd/mediocre-blog/main.go | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/src/cmd/mediocre-blog/main.go b/src/cmd/mediocre-blog/main.go new file mode 100644 index 0000000..6b41e04 --- /dev/null +++ b/src/cmd/mediocre-blog/main.go @@ -0,0 +1,128 @@ +package main + +import ( + "context" + "os" + "os/signal" + "syscall" + "time" + + cfgpkg "github.com/mediocregopher/blog.mediocregopher.com/srv/cfg" + "github.com/mediocregopher/blog.mediocregopher.com/srv/http" + "github.com/mediocregopher/blog.mediocregopher.com/srv/mailinglist" + "github.com/mediocregopher/blog.mediocregopher.com/srv/post" + "github.com/mediocregopher/blog.mediocregopher.com/srv/pow" + "github.com/mediocregopher/mediocre-go-lib/v2/mctx" + "github.com/mediocregopher/mediocre-go-lib/v2/mlog" + "github.com/tilinna/clock" +) + +func main() { + + ctx := context.Background() + + cfg := cfgpkg.NewBlogCfg(cfgpkg.Params{}) + + 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) + + var mlParams mailinglist.Params + mlParams.SetupCfg(cfg) + ctx = mctx.WithAnnotator(ctx, &mlParams) + + var httpParams http.Params + httpParams.SetupCfg(cfg) + ctx = mctx.WithAnnotator(ctx, &httpParams) + + // initialization + err := cfg.Init(ctx) + + logger := mlog.NewLogger(nil) + defer logger.Close() + + logger.Info(ctx, "process started") + defer logger.Info(ctx, "process exiting") + + if err != nil { + logger.Fatal(ctx, "initializing", err) + } + + 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) + } + + mlStore, err := mailinglist.NewStore(dataDir) + if err != nil { + logger.Fatal(ctx, "initializing mailing list storage", err) + } + defer mlStore.Close() + + mlParams.Store = mlStore + mlParams.Mailer = mailer + mlParams.Clock = clock + + ml := mailinglist.New(mlParams) + + 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) + postAssetStore := post.NewAssetStore(postSQLDB) + postDraftStore := post.NewDraftStore(postSQLDB) + + httpParams.Logger = logger.WithNamespace("http") + httpParams.PowManager = powMgr + httpParams.PostStore = postStore + httpParams.PostAssetStore = postAssetStore + httpParams.PostDraftStore = postDraftStore + httpParams.MailingList = ml + + logger.Info(ctx, "listening") + httpAPI, err := http.New(httpParams) + if err != nil { + logger.Fatal(ctx, "initializing http api", err) + } + defer func() { + shutdownCtx, cancel := context.WithTimeout(ctx, 5*time.Second) + defer cancel() + + if err := httpAPI.Shutdown(shutdownCtx); err != nil { + logger.Fatal(ctx, "shutting down http api", err) + } + }() + + // wait + + sigCh := make(chan os.Signal, 1) + signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM) + <-sigCh + + // let the defers begin +} |