Hot reload

This commit is contained in:
LittleSheep 2024-01-31 13:46:12 +08:00
parent 7b544f370d
commit d2710d1718
4 changed files with 28 additions and 2 deletions

View File

@ -49,6 +49,7 @@ func ReadInConfig(root string) error {
return err return err
} }
// Hot swap
R = instance R = instance
return nil return nil

View File

@ -3,14 +3,19 @@ package navi
import "code.smartsheep.studio/goatworks/roadsign/pkg/warden" import "code.smartsheep.studio/goatworks/roadsign/pkg/warden"
func InitializeWarden(regions []*Region) { func InitializeWarden(regions []*Region) {
pool := make([]*warden.AppInstance, 0)
for _, region := range regions { for _, region := range regions {
for _, application := range region.Applications { for _, application := range region.Applications {
warden.InstancePool = append(warden.InstancePool, &warden.AppInstance{ pool = append(pool, &warden.AppInstance{
Manifest: application, Manifest: application,
}) })
} }
} }
// Hot swap
warden.InstancePool = pool
for _, instance := range warden.InstancePool { for _, instance := range warden.InstancePool {
instance.Wake() instance.Wake()
} }

18
pkg/sideload/reload.go Normal file
View File

@ -0,0 +1,18 @@
package sideload
import (
"code.smartsheep.studio/goatworks/roadsign/pkg/navi"
"github.com/gofiber/fiber/v2"
"github.com/spf13/viper"
)
func doReload(c *fiber.Ctx) error {
if err := navi.ReadInConfig(viper.GetString("paths.configs")); err != nil {
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
}
if c.QueryBool("warden", false) {
navi.InitializeWarden(navi.R.Regions)
}
return c.SendStatus(fiber.StatusOK)
}

View File

@ -52,6 +52,8 @@ func InitSideload() *fiber.App {
cgi.Get("/regions/cfg/:id", getRegionConfig) cgi.Get("/regions/cfg/:id", getRegionConfig)
cgi.Get("/applications", getApplications) cgi.Get("/applications", getApplications)
cgi.Get("/applications/logs/:id", getApplicationLogs) cgi.Get("/applications/logs/:id", getApplicationLogs)
cgi.Post("/reload", doReload)
} }
webhooks := app.Group("/webhooks").Name("WebHooks") webhooks := app.Group("/webhooks").Name("WebHooks")