mirror of
https://github.com/m1k1o/neko-rooms.git
synced 2026-11-02 22:51:34 -06:00
max connections 0 when using mux.
This commit is contained in:
@@ -307,6 +307,7 @@ components:
|
||||
max_connections:
|
||||
type: number
|
||||
example: 10
|
||||
description: 0 when using mux
|
||||
running:
|
||||
type: boolean
|
||||
example: true
|
||||
@@ -361,6 +362,7 @@ components:
|
||||
max_connections:
|
||||
type: number
|
||||
default: 10
|
||||
description: 0 when using mux
|
||||
user_pass:
|
||||
type: string
|
||||
example: neko
|
||||
|
||||
@@ -25,10 +25,10 @@
|
||||
:rotate="270"
|
||||
:size="100"
|
||||
:width="15"
|
||||
:value="usesMux ? 100 : ((stats.connections / settings.max_connections) * 100)"
|
||||
:value="settings.max_connections == 0 ? 100 : ((stats.connections / settings.max_connections) * 100)"
|
||||
color="blue"
|
||||
>
|
||||
{{ stats.connections }} <template v-if="!usesMux">/ {{ settings.max_connections }}</template>
|
||||
{{ stats.connections }} <template v-if="settings.max_connections > 0">/ {{ settings.max_connections }}</template>
|
||||
</v-progress-circular>
|
||||
</div>
|
||||
</v-col>
|
||||
@@ -99,7 +99,10 @@
|
||||
<span>Invite link for admins</span>
|
||||
</v-tooltip>
|
||||
</td></tr>
|
||||
<tr v-if="!usesMux"><th> Max connections </th><td>{{ settings.max_connections }}</td></tr>
|
||||
<tr v-if="!usesMux"><th> Max connections </th><td>
|
||||
<template v-if="settings.max_connections > 0">{{ settings.max_connections }}</template>
|
||||
<i v-else>not limited because uses mux</i>
|
||||
</td></tr>
|
||||
<tr><th> Control protection </th><td>{{ settings.control_protection }}</td></tr>
|
||||
<tr><th> Implicit Control </th><td>{{ settings.implicit_control }}</td></tr>
|
||||
</tbody>
|
||||
@@ -275,8 +278,7 @@ export default class RoomInfo extends Vue {
|
||||
}
|
||||
|
||||
get usesMux() {
|
||||
// old rooms might not use mux despite enabled server wide, simple check for that
|
||||
return this.$store.state.roomsConfig.uses_mux && this.settings?.max_connections == 1
|
||||
return this.$store.state.roomsConfig.uses_mux
|
||||
}
|
||||
|
||||
get allBrowserExtensions() {
|
||||
|
||||
@@ -604,7 +604,7 @@ export default class RoomsCreate extends Vue {
|
||||
// eslint-disable-next-line
|
||||
admin_pass: this.data.admin_pass || randomPassword(),
|
||||
// eslint-disable-next-line
|
||||
max_connections: Number(this.data.max_connections), // not needed when uses mux
|
||||
max_connections: Number(this.data.max_connections), // ignored when uses mux
|
||||
// eslint-disable-next-line
|
||||
control_protection: Boolean(this.data.control_protection),
|
||||
// eslint-disable-next-line
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
</v-tooltip>
|
||||
</template>
|
||||
<template v-slot:[`item.max_connections`]="{ item }">
|
||||
<span v-if="item.max_connections">{{ item.max_connections }}</span>
|
||||
<i v-else>--not-specified--</i>
|
||||
<span v-if="item.max_connections > 0">{{ item.max_connections }}</span>
|
||||
<i v-else>uses mux</i>
|
||||
</template>
|
||||
<template v-slot:[`item.status`]="{ item }">
|
||||
<v-chip :color="item.running ? 'green' : 'red'" dark small> {{ item.status }} </v-chip>
|
||||
|
||||
@@ -101,7 +101,7 @@ export default class Home extends Vue {
|
||||
|
||||
get usedConnections() {
|
||||
// eslint-disable-next-line
|
||||
return this.$store.state.rooms.reduce((sum: number, { max_connections }: RoomEntry) => sum + (max_connections || 0), 0)
|
||||
return this.$store.state.rooms.reduce((sum: number, { max_connections }: RoomEntry) => sum + (max_connections || 1/* 0 when using mux */), 0)
|
||||
}
|
||||
|
||||
async LoadRooms() {
|
||||
|
||||
@@ -18,7 +18,7 @@ func (manager *RoomManagerCtx) containerToEntry(container dockerTypes.Container)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &types.RoomEntry{
|
||||
entry := &types.RoomEntry{
|
||||
ID: container.ID,
|
||||
URL: labels.URL,
|
||||
Name: labels.Name,
|
||||
@@ -28,7 +28,13 @@ func (manager *RoomManagerCtx) containerToEntry(container dockerTypes.Container)
|
||||
Running: container.State == "running",
|
||||
Status: container.Status,
|
||||
Created: time.Unix(container.Created, 0),
|
||||
}, nil
|
||||
}
|
||||
|
||||
if labels.Mux {
|
||||
entry.MaxConnections = 0
|
||||
}
|
||||
|
||||
return entry, nil
|
||||
}
|
||||
|
||||
func (manager *RoomManagerCtx) listContainers() ([]dockerTypes.Container, error) {
|
||||
|
||||
+49
-21
@@ -10,6 +10,7 @@ import (
|
||||
type RoomLabels struct {
|
||||
Name string
|
||||
URL string
|
||||
Mux bool
|
||||
Epr EprPorts
|
||||
NekoImage string
|
||||
|
||||
@@ -37,24 +38,47 @@ func (manager *RoomManagerCtx) extractLabels(labels map[string]string) (*RoomLab
|
||||
return nil, fmt.Errorf("damaged container labels: neko_image not found")
|
||||
}
|
||||
|
||||
eprMinStr, ok := labels["m1k1o.neko_rooms.epr.min"]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("damaged container labels: epr.min not found")
|
||||
}
|
||||
var mux bool
|
||||
var epr EprPorts
|
||||
|
||||
eprMin, err := strconv.ParseUint(eprMinStr, 10, 16)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
muxStr, ok := labels["m1k1o.neko_rooms.mux"]
|
||||
if ok {
|
||||
muxPort, err := strconv.ParseUint(muxStr, 10, 16)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
eprMaxStr, ok := labels["m1k1o.neko_rooms.epr.max"]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("damaged container labels: epr.max not found")
|
||||
}
|
||||
mux = true
|
||||
epr = EprPorts{
|
||||
Min: uint16(muxPort),
|
||||
Max: uint16(muxPort),
|
||||
}
|
||||
} else {
|
||||
eprMinStr, ok := labels["m1k1o.neko_rooms.epr.min"]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("damaged container labels: epr.min not found")
|
||||
}
|
||||
|
||||
eprMax, err := strconv.ParseUint(eprMaxStr, 10, 16)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
eprMin, err := strconv.ParseUint(eprMinStr, 10, 16)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
eprMaxStr, ok := labels["m1k1o.neko_rooms.epr.max"]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("damaged container labels: epr.max not found")
|
||||
}
|
||||
|
||||
eprMax, err := strconv.ParseUint(eprMaxStr, 10, 16)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
mux = false
|
||||
epr = EprPorts{
|
||||
Min: uint16(eprMin),
|
||||
Max: uint16(eprMax),
|
||||
}
|
||||
}
|
||||
|
||||
var browserPolicy *BrowserPolicyLabels
|
||||
@@ -79,10 +103,9 @@ func (manager *RoomManagerCtx) extractLabels(labels map[string]string) (*RoomLab
|
||||
Name: name,
|
||||
URL: url,
|
||||
NekoImage: nekoImage,
|
||||
Epr: EprPorts{
|
||||
Min: uint16(eprMin),
|
||||
Max: uint16(eprMax),
|
||||
},
|
||||
Mux: mux,
|
||||
Epr: epr,
|
||||
|
||||
BrowserPolicy: browserPolicy,
|
||||
}, nil
|
||||
}
|
||||
@@ -91,8 +114,6 @@ func (manager *RoomManagerCtx) serializeLabels(labels RoomLabels) map[string]str
|
||||
labelsMap := map[string]string{
|
||||
"m1k1o.neko_rooms.name": labels.Name,
|
||||
"m1k1o.neko_rooms.instance": manager.config.InstanceName,
|
||||
"m1k1o.neko_rooms.epr.min": fmt.Sprintf("%d", labels.Epr.Min),
|
||||
"m1k1o.neko_rooms.epr.max": fmt.Sprintf("%d", labels.Epr.Max),
|
||||
"m1k1o.neko_rooms.neko_image": labels.NekoImage,
|
||||
}
|
||||
|
||||
@@ -101,6 +122,13 @@ func (manager *RoomManagerCtx) serializeLabels(labels RoomLabels) map[string]str
|
||||
labelsMap["m1k1o.neko_rooms.url"] = manager.config.GetRoomUrl(labels.Name)
|
||||
}
|
||||
|
||||
if labels.Mux && labels.Epr.Min == labels.Epr.Max {
|
||||
labelsMap["m1k1o.neko_rooms.mux"] = fmt.Sprintf("%d", labels.Epr.Min)
|
||||
} else {
|
||||
labelsMap["m1k1o.neko_rooms.epr.min"] = fmt.Sprintf("%d", labels.Epr.Min)
|
||||
labelsMap["m1k1o.neko_rooms.epr.max"] = fmt.Sprintf("%d", labels.Epr.Max)
|
||||
}
|
||||
|
||||
if labels.BrowserPolicy != nil {
|
||||
labelsMap["m1k1o.neko_rooms.browser_policy"] = "true"
|
||||
labelsMap["m1k1o.neko_rooms.browser_policy.type"] = string(labels.BrowserPolicy.Type)
|
||||
|
||||
@@ -170,6 +170,7 @@ func (manager *RoomManagerCtx) Create(settings types.RoomSettings) (string, erro
|
||||
|
||||
labels := manager.serializeLabels(RoomLabels{
|
||||
Name: roomName,
|
||||
Mux: manager.config.Mux,
|
||||
Epr: epr,
|
||||
NekoImage: settings.NekoImage,
|
||||
|
||||
@@ -570,6 +571,10 @@ func (manager *RoomManagerCtx) GetSettings(id string) (*types.RoomSettings, erro
|
||||
Resources: roomResources,
|
||||
}
|
||||
|
||||
if labels.Mux {
|
||||
settings.MaxConnections = 0
|
||||
}
|
||||
|
||||
err = settings.FromEnv(container.Config.Env)
|
||||
return &settings, err
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ type RoomEntry struct {
|
||||
Name string `json:"name"`
|
||||
NekoImage string `json:"neko_image"`
|
||||
IsOutdated bool `json:"is_outdated"`
|
||||
MaxConnections uint16 `json:"max_connections"` // ignored when using mux
|
||||
MaxConnections uint16 `json:"max_connections"` // 0 when using mux
|
||||
Running bool `json:"running"`
|
||||
Status string `json:"status"`
|
||||
Created time.Time `json:"created"`
|
||||
@@ -69,7 +69,7 @@ type RoomResources struct {
|
||||
type RoomSettings struct {
|
||||
Name string `json:"name"`
|
||||
NekoImage string `json:"neko_image"`
|
||||
MaxConnections uint16 `json:"max_connections"` // ignored when using mux
|
||||
MaxConnections uint16 `json:"max_connections"` // 0 when using mux
|
||||
|
||||
ControlProtection bool `json:"control_protection"`
|
||||
ImplicitControl bool `json:"implicit_control"`
|
||||
|
||||
Reference in New Issue
Block a user