Streams Basic Load Balancing (Allows multiple Forwarding Hosts)

This commit is contained in:
Guillaume Liautard
2022-04-14 01:10:28 +02:00
parent 4db34f5894
commit ec60004c96
9 changed files with 137 additions and 32 deletions

View File

@ -14,8 +14,8 @@
</div>
<div class="col-sm-8 col-md-8">
<div class="form-group">
<label class="form-label"><%- i18n('streams', 'forwarding-host') %><span class="form-required">*</span></label>
<input type="text" name="forwarding_host" class="form-control text-monospace" placeholder="example.com or 10.0.0.1 or 2001:db8:3333:4444:5555:6666:7777:8888" value="<%- forwarding_host %>" autocomplete="off" maxlength="255" required>
<label class="form-label"><%- i18n('streams', 'forwarding-hosts') %><span class="form-required">*</span></label>
<input type="text" name="forwarding_hosts" class="form-control" placeholder="example.com or 10.0.0.1 or 2001:db8:3333:4444:5555:6666:7777:8888" id="input-forwarding-hosts" value="<%- forwarding_hosts.join(',') %>" required>
</div>
</div>
<div class="col-sm-4 col-md-4">

View File

@ -6,6 +6,8 @@ const template = require('./form.ejs');
require('jquery-serializejson');
require('jquery-mask-plugin');
require('selectize');
const Helpers = require("../../../lib/helpers");
const certListItemTemplate = require("../certificates-list-item.ejs");
module.exports = Mn.View.extend({
template: template,
@ -13,7 +15,7 @@ module.exports = Mn.View.extend({
ui: {
form: 'form',
forwarding_host: 'input[name="forwarding_host"]',
forwarding_hosts: 'input[name="forwarding_hosts"]',
type_error: '.forward-type-error',
buttons: '.modal-footer button',
switches: '.custom-switch-input',
@ -48,6 +50,10 @@ module.exports = Mn.View.extend({
data.tcp_forwarding = !!data.tcp_forwarding;
data.udp_forwarding = !!data.udp_forwarding;
if (typeof data.forwarding_hosts === 'string' && data.forwarding_hosts) {
data.forwarding_hosts = data.forwarding_hosts.split(',');
}
let method = App.Api.Nginx.Streams.create;
let is_new = true;
@ -76,6 +82,24 @@ module.exports = Mn.View.extend({
}
},
onRender: function () {
let view = this;
// Domain names
this.ui.forwarding_hosts.selectize({
delimiter: ',',
persist: false,
maxOptions: 15,
create: function (input) {
return {
value: input,
text: input
};
},
createFilter: /^(?:\*\.)?(?:[^.*]+\.?)+[^.]$/
});
},
initialize: function (options) {
if (typeof options.model === 'undefined' || !options.model) {
this.model = new StreamModel.Model();

View File

@ -12,7 +12,11 @@
</div>
</td>
<td>
<div class="text-monospace"><%- forwarding_host %>:<%- forwarding_port %></div>
<div class="wrap">
<% forwarding_hosts.map(function(forwarding_host) { %>
<span class="tag hover-green"><%- forwarding_host %></span>
<% }); %>
</div>
</td>
<td>
<div>
@ -24,6 +28,11 @@
<% } %>
</div>
</td>
<td>
<div class="text-monospace">
<%- forwarding_port %>
</div>
</td>
<td>
<%
var o = isOnline();
@ -50,4 +59,4 @@
</div>
</div>
</td>
<% } %>
<% } %>

View File

@ -3,6 +3,7 @@
<th><%- i18n('streams', 'incoming-port') %></th>
<th><%- i18n('str', 'destination') %></th>
<th><%- i18n('streams', 'protocol') %></th>
<th><%- i18n('streams', 'forwarding-port') %></th>
<th><%- i18n('str', 'status') %></th>
<% if (canManage) { %>
<th>&nbsp;</th>