Clean up unused code and better shutdown in main
All checks were successful
/ docker (push) Successful in 4m4s

This commit is contained in:
Melody Becker 2025-05-22 16:56:56 +02:00
parent b01f60d273
commit 6cc699cbbd
Signed by: mstar
SSH key fingerprint: SHA256:9VAo09aaVNTWKzPW7Hq2LW+ox9OdwmTSHRoD4mlz1yI
61 changed files with 36 additions and 5559 deletions

103
main.go
View file

@ -5,24 +5,22 @@ import (
"embed"
"flag"
"fmt"
"net/http"
"os"
"os/signal"
"path"
"time"
"sync"
"git.mstar.dev/mstar/goutils/other"
"github.com/go-webauthn/webauthn/webauthn"
"github.com/mstarongithub/passkey"
"github.com/rs/zerolog/log"
"gopkg.in/natefinch/lumberjack.v2"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"git.mstar.dev/mstar/linstrom/config"
"git.mstar.dev/mstar/linstrom/server"
"git.mstar.dev/mstar/linstrom/shared"
"git.mstar.dev/mstar/linstrom/storage"
storagenew "git.mstar.dev/mstar/linstrom/storage-new"
"git.mstar.dev/mstar/linstrom/storage-new/dbgen"
"git.mstar.dev/mstar/linstrom/storage/cache"
webdebug "git.mstar.dev/mstar/linstrom/web/debug"
webpublic "git.mstar.dev/mstar/linstrom/web/public"
)
@ -43,6 +41,8 @@ var defaultDuck string
var duckFS embed.FS
func main() {
_ = reactiveFS
_ = nojsFS
other.SetupFlags()
flag.Parse()
logfile := getLogFilePathOrNil()
@ -71,13 +71,7 @@ func main() {
if *shared.FlagConfigOnly {
return
}
if *shared.FlagStartNew {
log.Info().Msg("Starting new system")
newServer()
} else {
log.Info().Msg("Starting old system")
oldServer()
}
newServer()
}
func getLogFilePathOrNil() *string {
@ -90,57 +84,8 @@ func getLogFilePathOrNil() *string {
}
}
func oldServer() {
storageCache, err := cache.NewCache(
config.GlobalConfig.Storage.MaxInMemoryCacheSize,
config.GlobalConfig.Storage.RedisUrl,
)
if err != nil {
log.Fatal().Err(err).Msg("Failed to start cache")
}
// var store *storage.Storage
// if config.GlobalConfig.Storage.DbIsPostgres != nil && *config.GlobalConfig.Storage.DbIsPostgres {
// store, err = storage.NewStoragePostgres(config.GlobalConfig.Storage.DatabaseUrl, storageCache)
// } else {
// store, err = storage.NewStorageSqlite(config.GlobalConfig.Storage.DatabaseUrl, storageCache)
// }
//
store, err := storage.NewStorage(config.GlobalConfig.Storage.BuildPostgresDSN(), storageCache)
if err != nil {
log.Fatal().Err(err).Msg("Failed to setup storage")
}
pkey, err := passkey.New(passkey.Config{
WebauthnConfig: &webauthn.Config{
RPDisplayName: "Linstrom",
RPID: "localhost",
RPOrigins: []string{"http://localhost:8000"},
},
UserStore: store,
SessionStore: store,
SessionMaxAge: time.Hour * 24,
}, passkey.WithLogger(&shared.ZerologWrapper{}))
if err != nil {
log.Fatal().Err(err).Msg("Failed to setup passkey support")
}
server := server.NewServer(
store,
pkey,
shared.NewFSWrapper(reactiveFS, "frontend-reactive/dist/", false),
shared.NewFSWrapper(nojsFS, "frontend-noscript/", false),
&defaultDuck,
)
server.Start(":8000")
// TODO: Set up media server
// TODO: Set up queues
// TODO: Set up plugins
}
func newServer() {
log.Info().Msg("Connectin to db")
log.Info().Msg("Connecting to db")
db, err := gorm.Open(
postgres.Open(config.GlobalConfig.Storage.BuildPostgresDSN()),
&gorm.Config{
@ -163,21 +108,45 @@ func newServer() {
if err = storagenew.InsertUnknownActorPlaceholder(); err != nil {
log.Fatal().Err(err).Msg("Failed to insert self properly")
}
debugShutdownChan := make(chan *sync.WaitGroup, 1)
interuptChan := make(chan os.Signal, 1)
signal.Notify(interuptChan, os.Interrupt)
if *shared.FlagStartDebugServer {
go func() {
log.Info().Msg("Starting debug server")
if err = webdebug.New(*shared.FlagDebugPort).Start(); err != nil {
s := webdebug.New(*shared.FlagDebugPort)
go func() {
wg := <-debugShutdownChan
if err := s.Stop(); err != nil {
log.Fatal().Err(err).Msg("Failed to cleanly stop debug server")
}
log.Info().Msg("Debug server stopped")
wg.Done()
}()
if err = s.Start(); err != nil && err != http.ErrServerClosed {
log.Fatal().Err(err).Msg("Debug server failed")
}
}()
}
log.Info().Msg("Starting public server")
public := webpublic.New(
fmt.Sprintf(":%v", config.GlobalConfig.General.PrivatePort),
&defaultDuck,
duckFS,
)
if err = public.Start(); err != nil {
log.Fatal().Err(err).Msg("Failed to start public server")
go func() {
log.Info().Msg("Starting public server")
if err = public.Start(); err != nil && err != http.ErrServerClosed {
log.Fatal().Err(err).Msg("Failed to start public server")
}
}()
<-interuptChan
log.Info().Msg("Received interrupt, shutting down")
wg := sync.WaitGroup{}
wg.Add(1)
debugShutdownChan <- &wg
if err = public.Stop(); err != nil {
log.Fatal().Err(err).Msg("Failed to stop public server")
}
log.Info().Msg("Public server stopped")
wg.Wait()
}