service/reload.go

40 lines
929 B
Go
Raw Permalink Normal View History

package service
import (
"apigo.cc/go/log"
"sync"
)
2026-06-04 18:16:46 +08:00
type reloadHook struct {
hooks []func() error
lock sync.RWMutex
}
var globalReloadHook = &reloadHook{}
// OnReload 注册一个在接收到 SIGHUP 信号时触发的重新加载钩子
func OnReload(handler func() error) {
2026-06-04 18:16:46 +08:00
DefaultServer.OnReload(handler)
}
func (ws *webServer) OnReload(handler func() error) {
globalReloadHook.lock.Lock()
defer globalReloadHook.lock.Unlock()
globalReloadHook.hooks = append(globalReloadHook.hooks, handler)
}
// triggerReload 触发所有注册的重新加载钩子
2026-06-04 18:16:46 +08:00
func (ws *webServer) triggerReload() error {
globalReloadHook.lock.RLock()
hooks := make([]func() error, len(globalReloadHook.hooks))
copy(hooks, globalReloadHook.hooks)
globalReloadHook.lock.RUnlock()
for _, hook := range hooks {
if err := hook(); err != nil {
log.DefaultLogger.Error("reload hook failed", "error", err.Error())
}
}
return nil
}