max connections 0 when using mux.

This commit is contained in:
Miroslav Šedivý
2022-08-01 20:17:56 +02:00
parent 15b30babce
commit 6f35d8f2a3
9 changed files with 77 additions and 34 deletions
+2
View File
@@ -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
+7 -5
View File
@@ -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() {
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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>
+1 -1
View File
@@ -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() {
+8 -2
View File
@@ -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
View File
@@ -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)
+5
View File
@@ -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
}
+2 -2
View File
@@ -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"`