You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
3.0 KiB
120 lines
3.0 KiB
package main
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
"time"
|
|
|
|
"github.com/mediocregopher/blog.mediocregopher.com/srv/cache"
|
|
cfgpkg "github.com/mediocregopher/blog.mediocregopher.com/srv/cfg"
|
|
"github.com/mediocregopher/blog.mediocregopher.com/srv/gmi"
|
|
"github.com/mediocregopher/blog.mediocregopher.com/srv/http"
|
|
"github.com/mediocregopher/blog.mediocregopher.com/srv/post"
|
|
"github.com/mediocregopher/blog.mediocregopher.com/srv/post/asset"
|
|
"github.com/mediocregopher/mediocre-go-lib/v2/mctx"
|
|
"github.com/mediocregopher/mediocre-go-lib/v2/mlog"
|
|
)
|
|
|
|
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 httpParams http.Params
|
|
httpParams.SetupCfg(cfg)
|
|
ctx = mctx.WithAnnotator(ctx, &httpParams)
|
|
|
|
var gmiParams gmi.Params
|
|
gmiParams.SetupCfg(cfg)
|
|
ctx = mctx.WithAnnotator(ctx, &gmiParams)
|
|
|
|
// 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)
|
|
}
|
|
|
|
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 := asset.NewStore(postSQLDB)
|
|
|
|
postAssetLoader := asset.NewStoreLoader(postAssetStore)
|
|
postAssetLoader = asset.NewArchiveLoader(postAssetLoader)
|
|
postAssetLoader = asset.NewImageLoader(postAssetLoader)
|
|
|
|
postDraftStore := post.NewDraftStore(postSQLDB)
|
|
|
|
cache := cache.New(5000)
|
|
|
|
httpParams.Logger = logger.WithNamespace("http")
|
|
httpParams.Cache = cache
|
|
httpParams.PostStore = postStore
|
|
httpParams.PostAssetStore = postAssetStore
|
|
httpParams.PostAssetLoader = postAssetLoader
|
|
httpParams.PostDraftStore = postDraftStore
|
|
httpParams.GeminiPublicURL = gmiParams.PublicURL
|
|
|
|
logger.Info(ctx, "starting http api")
|
|
httpAPI, err := http.New(httpParams)
|
|
if err != nil {
|
|
logger.Fatal(ctx, "starting 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)
|
|
}
|
|
}()
|
|
|
|
gmiParams.Logger = logger.WithNamespace("gmi")
|
|
gmiParams.Cache = cache
|
|
gmiParams.PostStore = postStore
|
|
gmiParams.PostAssetLoader = postAssetLoader
|
|
gmiParams.HTTPPublicURL = httpParams.PublicURL
|
|
|
|
logger.Info(ctx, "starting gmi api")
|
|
gmiAPI, err := gmi.New(gmiParams)
|
|
if err != nil {
|
|
logger.Fatal(ctx, "starting gmi api", err)
|
|
}
|
|
|
|
defer func() {
|
|
shutdownCtx, cancel := context.WithTimeout(ctx, 5*time.Second)
|
|
defer cancel()
|
|
|
|
if err := gmiAPI.Shutdown(shutdownCtx); err != nil {
|
|
logger.Fatal(ctx, "shutting down gmi api", err)
|
|
}
|
|
}()
|
|
|
|
// wait
|
|
|
|
sigCh := make(chan os.Signal, 1)
|
|
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
|
|
<-sigCh
|
|
|
|
// let the defers begin
|
|
}
|
|
|