diff --git a/internal/config/room.go b/internal/config/room.go index b65dbfc..9e302db 100644 --- a/internal/config/room.go +++ b/internal/config/room.go @@ -31,6 +31,7 @@ type Room struct { NekoPrivilegedImages []string PathPrefix string Labels []string + WaitEnabled bool StorageEnabled bool StorageInternal string @@ -93,6 +94,11 @@ func (Room) Init(cmd *cobra.Command) error { return err } + cmd.PersistentFlags().Bool("wait_enabled", true, "enable active waiting for the room") + if err := viper.BindPFlag("wait_enabled", cmd.PersistentFlags().Lookup("wait_enabled")); err != nil { + return err + } + // Data cmd.PersistentFlags().Bool("storage.enabled", true, "whether storage is enabled, where peristent containers data will be stored") @@ -199,6 +205,7 @@ func (s *Room) Set() { s.NekoPrivilegedImages = viper.GetStringSlice("neko_privileged_images") s.PathPrefix = path.Join("/", path.Clean(viper.GetString("path_prefix"))) s.Labels = viper.GetStringSlice("labels") + s.WaitEnabled = viper.GetBool("wait_enabled") s.StorageEnabled = viper.GetBool("storage.enabled") s.StorageInternal = viper.GetString("storage.internal") diff --git a/internal/proxy/lobby.go b/internal/proxy/lobby.go index f966b58..23c294f 100644 --- a/internal/proxy/lobby.go +++ b/internal/proxy/lobby.go @@ -40,7 +40,7 @@ func roomWait(w http.ResponseWriter, r *http.Request) { `)) } -func RoomNotFound(w http.ResponseWriter, r *http.Request) { +func RoomNotFound(w http.ResponseWriter, r *http.Request, waitEnabled bool) { utils.Swal2Response(w, `
@@ -57,10 +57,12 @@ func RoomNotFound(w http.ResponseWriter, r *http.Request) {
`) - roomWait(w, r) + if waitEnabled { + roomWait(w, r) + } } -func RoomNotRunning(w http.ResponseWriter, r *http.Request) { +func RoomNotRunning(w http.ResponseWriter, r *http.Request, waitEnabled bool) { utils.Swal2Response(w, `
@@ -77,7 +79,9 @@ func RoomNotRunning(w http.ResponseWriter, r *http.Request) {
`) - roomWait(w, r) + if waitEnabled { + roomWait(w, r) + } } func RoomNotReady(w http.ResponseWriter, r *http.Request) { diff --git a/internal/proxy/manager.go b/internal/proxy/manager.go index 91bddfa..3890b02 100644 --- a/internal/proxy/manager.go +++ b/internal/proxy/manager.go @@ -35,21 +35,23 @@ type ProxyManagerCtx struct { ctx context.Context cancel func() - waitMu sync.RWMutex - waitChans map[string]*wait + waitMu sync.RWMutex + waitChans map[string]*wait + waitEnabled bool client *dockerClient.Client instanceName string handlers *prefixHandler[*entry] } -func New(client *dockerClient.Client, instanceName string) *ProxyManagerCtx { +func New(client *dockerClient.Client, instanceName string, waitEnabled bool) *ProxyManagerCtx { return &ProxyManagerCtx{ logger: log.With().Str("module", "proxy").Logger(), waitChans: map[string]*wait{}, client: client, instanceName: instanceName, + waitEnabled: waitEnabled, handlers: &prefixHandler[*entry]{}, } } @@ -94,13 +96,15 @@ func (p *ProxyManagerCtx) Start() { Msg("got docker event") // terminate waiting for any events - p.waitMu.Lock() - ch, ok := p.waitChans[path] - if ok { - close(ch.signal) - delete(p.waitChans, path) + if p.waitEnabled { + p.waitMu.Lock() + ch, ok := p.waitChans[path] + if ok { + close(ch.signal) + delete(p.waitChans, path) + } + p.waitMu.Unlock() } - p.waitMu.Unlock() p.mu.Lock() switch msg.Action { @@ -286,12 +290,12 @@ func (p *ProxyManagerCtx) ServeHTTP(w http.ResponseWriter, r *http.Request) { // if room not found if !ok { // blocking until room is created - if r.URL.Query().Has("wait") { + if r.URL.Query().Has("wait") && p.waitEnabled { p.waitForPath(w, r, cleanPath) return } - RoomNotFound(w, r) + RoomNotFound(w, r, p.waitEnabled) return } @@ -305,12 +309,12 @@ func (p *ProxyManagerCtx) ServeHTTP(w http.ResponseWriter, r *http.Request) { // if room not running if !proxy.running { // blocking until room is running - if r.URL.Query().Has("wait") { + if r.URL.Query().Has("wait") && p.waitEnabled { p.waitForPath(w, r, cleanPath) return } - RoomNotRunning(w, r) + RoomNotRunning(w, r, p.waitEnabled) return } diff --git a/neko.go b/neko.go index da8c7d6..9fb3822 100644 --- a/neko.go +++ b/neko.go @@ -145,6 +145,7 @@ func (main *MainCtx) Start() { main.proxyManager = proxy.New( client, main.Configs.Room.InstanceName, + main.Configs.Room.WaitEnabled, ) main.proxyManager.Start()