mirror of
https://github.com/m1k1o/neko-rooms.git
synced 2026-11-02 22:51:34 -06:00
add wait enabled.
This commit is contained in:
@@ -31,6 +31,7 @@ type Room struct {
|
|||||||
NekoPrivilegedImages []string
|
NekoPrivilegedImages []string
|
||||||
PathPrefix string
|
PathPrefix string
|
||||||
Labels []string
|
Labels []string
|
||||||
|
WaitEnabled bool
|
||||||
|
|
||||||
StorageEnabled bool
|
StorageEnabled bool
|
||||||
StorageInternal string
|
StorageInternal string
|
||||||
@@ -93,6 +94,11 @@ func (Room) Init(cmd *cobra.Command) error {
|
|||||||
return err
|
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
|
// Data
|
||||||
|
|
||||||
cmd.PersistentFlags().Bool("storage.enabled", true, "whether storage is enabled, where peristent containers data will be stored")
|
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.NekoPrivilegedImages = viper.GetStringSlice("neko_privileged_images")
|
||||||
s.PathPrefix = path.Join("/", path.Clean(viper.GetString("path_prefix")))
|
s.PathPrefix = path.Join("/", path.Clean(viper.GetString("path_prefix")))
|
||||||
s.Labels = viper.GetStringSlice("labels")
|
s.Labels = viper.GetStringSlice("labels")
|
||||||
|
s.WaitEnabled = viper.GetBool("wait_enabled")
|
||||||
|
|
||||||
s.StorageEnabled = viper.GetBool("storage.enabled")
|
s.StorageEnabled = viper.GetBool("storage.enabled")
|
||||||
s.StorageInternal = viper.GetString("storage.internal")
|
s.StorageInternal = viper.GetString("storage.internal")
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ func roomWait(w http.ResponseWriter, r *http.Request) {
|
|||||||
</script>`))
|
</script>`))
|
||||||
}
|
}
|
||||||
|
|
||||||
func RoomNotFound(w http.ResponseWriter, r *http.Request) {
|
func RoomNotFound(w http.ResponseWriter, r *http.Request, waitEnabled bool) {
|
||||||
utils.Swal2Response(w, `
|
utils.Swal2Response(w, `
|
||||||
<div class="swal2-header">
|
<div class="swal2-header">
|
||||||
<div class="swal2-icon swal2-error">
|
<div class="swal2-icon swal2-error">
|
||||||
@@ -57,10 +57,12 @@ func RoomNotFound(w http.ResponseWriter, r *http.Request) {
|
|||||||
</div>
|
</div>
|
||||||
`)
|
`)
|
||||||
|
|
||||||
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, `
|
utils.Swal2Response(w, `
|
||||||
<div class="swal2-header">
|
<div class="swal2-header">
|
||||||
<div class="swal2-icon swal2-warning">
|
<div class="swal2-icon swal2-warning">
|
||||||
@@ -77,7 +79,9 @@ func RoomNotRunning(w http.ResponseWriter, r *http.Request) {
|
|||||||
</div>
|
</div>
|
||||||
`)
|
`)
|
||||||
|
|
||||||
roomWait(w, r)
|
if waitEnabled {
|
||||||
|
roomWait(w, r)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func RoomNotReady(w http.ResponseWriter, r *http.Request) {
|
func RoomNotReady(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|||||||
+17
-13
@@ -35,21 +35,23 @@ type ProxyManagerCtx struct {
|
|||||||
ctx context.Context
|
ctx context.Context
|
||||||
cancel func()
|
cancel func()
|
||||||
|
|
||||||
waitMu sync.RWMutex
|
waitMu sync.RWMutex
|
||||||
waitChans map[string]*wait
|
waitChans map[string]*wait
|
||||||
|
waitEnabled bool
|
||||||
|
|
||||||
client *dockerClient.Client
|
client *dockerClient.Client
|
||||||
instanceName string
|
instanceName string
|
||||||
handlers *prefixHandler[*entry]
|
handlers *prefixHandler[*entry]
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(client *dockerClient.Client, instanceName string) *ProxyManagerCtx {
|
func New(client *dockerClient.Client, instanceName string, waitEnabled bool) *ProxyManagerCtx {
|
||||||
return &ProxyManagerCtx{
|
return &ProxyManagerCtx{
|
||||||
logger: log.With().Str("module", "proxy").Logger(),
|
logger: log.With().Str("module", "proxy").Logger(),
|
||||||
waitChans: map[string]*wait{},
|
waitChans: map[string]*wait{},
|
||||||
|
|
||||||
client: client,
|
client: client,
|
||||||
instanceName: instanceName,
|
instanceName: instanceName,
|
||||||
|
waitEnabled: waitEnabled,
|
||||||
handlers: &prefixHandler[*entry]{},
|
handlers: &prefixHandler[*entry]{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -94,13 +96,15 @@ func (p *ProxyManagerCtx) Start() {
|
|||||||
Msg("got docker event")
|
Msg("got docker event")
|
||||||
|
|
||||||
// terminate waiting for any events
|
// terminate waiting for any events
|
||||||
p.waitMu.Lock()
|
if p.waitEnabled {
|
||||||
ch, ok := p.waitChans[path]
|
p.waitMu.Lock()
|
||||||
if ok {
|
ch, ok := p.waitChans[path]
|
||||||
close(ch.signal)
|
if ok {
|
||||||
delete(p.waitChans, path)
|
close(ch.signal)
|
||||||
|
delete(p.waitChans, path)
|
||||||
|
}
|
||||||
|
p.waitMu.Unlock()
|
||||||
}
|
}
|
||||||
p.waitMu.Unlock()
|
|
||||||
|
|
||||||
p.mu.Lock()
|
p.mu.Lock()
|
||||||
switch msg.Action {
|
switch msg.Action {
|
||||||
@@ -286,12 +290,12 @@ func (p *ProxyManagerCtx) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
// if room not found
|
// if room not found
|
||||||
if !ok {
|
if !ok {
|
||||||
// blocking until room is created
|
// blocking until room is created
|
||||||
if r.URL.Query().Has("wait") {
|
if r.URL.Query().Has("wait") && p.waitEnabled {
|
||||||
p.waitForPath(w, r, cleanPath)
|
p.waitForPath(w, r, cleanPath)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
RoomNotFound(w, r)
|
RoomNotFound(w, r, p.waitEnabled)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -305,12 +309,12 @@ func (p *ProxyManagerCtx) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
// if room not running
|
// if room not running
|
||||||
if !proxy.running {
|
if !proxy.running {
|
||||||
// blocking until room is 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)
|
p.waitForPath(w, r, cleanPath)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
RoomNotRunning(w, r)
|
RoomNotRunning(w, r, p.waitEnabled)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -145,6 +145,7 @@ func (main *MainCtx) Start() {
|
|||||||
main.proxyManager = proxy.New(
|
main.proxyManager = proxy.New(
|
||||||
client,
|
client,
|
||||||
main.Configs.Room.InstanceName,
|
main.Configs.Room.InstanceName,
|
||||||
|
main.Configs.Room.WaitEnabled,
|
||||||
)
|
)
|
||||||
main.proxyManager.Start()
|
main.proxyManager.Start()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user