diff --git a/web/html/xui/xray.html b/web/html/xui/xray.html index 86f46d49..cce193c2 100644 --- a/web/html/xui/xray.html +++ b/web/html/xui/xray.html @@ -1054,12 +1054,13 @@ }); }, changeObsCode() { - if (this.obsSettings == ''){ - return - } if(this.cm != null) { this.cm.toTextArea(); } + if (this.obsSettings == ''){ + this.cm = null; + return + } textAreaObj = document.getElementById('obsSetting'); textAreaObj.value = this[this.obsSettings]; this.cm = CodeMirror.fromTextArea(textAreaObj, this.cmOptions); @@ -1283,21 +1284,11 @@ tmpBalancer.strategy = { 'type': balancer.strategy }; - if (balancer.strategy == 'leastPing'){ - if (!newTemplateSettings.observatory) - newTemplateSettings.observatory = this.defaultObservatory; - if (!newTemplateSettings.observatory.subjectSelector.includes(balancer.tag)) - newTemplateSettings.observatory.subjectSelector.push(balancer.tag); - } - if (balancer.strategy == 'leastLoad'){ - if (!newTemplateSettings.burstObservatory) - newTemplateSettings.burstObservatory = this.defaultBurstObservatory; - if (!newTemplateSettings.burstObservatory.subjectSelector.includes(balancer.tag)) - newTemplateSettings.burstObservatory.subjectSelector.push(balancer.tag); - } } newTemplateSettings.routing.balancers.push(tmpBalancer); this.templateSettings = newTemplateSettings; + if (balancer.strategy == 'leastPing' || balancer.strategy == 'leastLoad') + this.updateObservatorySelectors(); balancerModal.close(); this.changeObsCode(); }, @@ -1332,18 +1323,6 @@ tmpBalancer.strategy = { 'type': balancer.strategy }; - if (balancer.strategy == 'leastPing'){ - if (!newTemplateSettings.observatory) - newTemplateSettings.observatory = this.defaultObservatory; - if (!newTemplateSettings.observatory.subjectSelector.includes(balancer.tag)) - newTemplateSettings.observatory.subjectSelector.push(balancer.tag); - } - if (balancer.strategy == 'leastLoad'){ - if (!newTemplateSettings.burstObservatory) - newTemplateSettings.burstObservatory = this.defaultBurstObservatory; - if (!newTemplateSettings.burstObservatory.subjectSelector.includes(balancer.tag)) - newTemplateSettings.burstObservatory.subjectSelector.push(balancer.tag); - } } newTemplateSettings.routing.balancers[index] = tmpBalancer; @@ -1356,12 +1335,47 @@ }); } this.templateSettings = newTemplateSettings; + if (balancer.strategy == 'leastPing' || balancer.strategy == 'leastLoad') + this.updateObservatorySelectors(); balancerModal.close(); this.changeObsCode(); }, isEdit: true }); }, + updateObservatorySelectors(){ + newTemplateSettings = this.templateSettings; + const leastPings = this.balancersData.filter((b) => b.strategy == 'leastPing'); + const leastLoads = this.balancersData.filter((b) => b.strategy == 'leastLoad'); + if (leastPings.length>0){ + if (!newTemplateSettings.observatory) + newTemplateSettings.observatory = this.defaultObservatory; + newTemplateSettings.observatory.subjectSelector = []; + leastPings.forEach((b) => { + b.selector.forEach((s) => { + if (!newTemplateSettings.observatory.subjectSelector.includes(s)) + newTemplateSettings.observatory.subjectSelector.push(s); + }); + }); + } else { + delete newTemplateSettings.observatory + } + if (leastLoads.length>0){ + if (!newTemplateSettings.burstObservatory) + newTemplateSettings.burstObservatory = this.defaultBurstObservatory; + newTemplateSettings.burstObservatory.subjectSelector = []; + leastLoads.forEach((b) => { + b.selector.forEach((s) => { + if (!newTemplateSettings.burstObservatory.subjectSelector.includes(s)) + newTemplateSettings.burstObservatory.subjectSelector.push(s); + }); + }); + } else { + delete newTemplateSettings.burstObservatory + } + this.templateSettings = newTemplateSettings; + this.changeObsCode(); + }, deleteBalancer(index) { let newTemplateSettings = { ...this.templateSettings }; @@ -1371,27 +1385,14 @@ // Remove from settings let realIndex = newTemplateSettings.routing.balancers.findIndex((b) => b.tag === removedBalancer.tag); newTemplateSettings.routing.balancers.splice(realIndex, 1); - - // Remove tag from observatory - if (newTemplateSettings.observatory){ - newTemplateSettings.observatory.subjectSelector = newTemplateSettings.observatory.subjectSelector.filter(s => s != removedBalancer.tag); - } - if (newTemplateSettings.burstObservatory){ - newTemplateSettings.burstObservatory.subjectSelector = newTemplateSettings.burstObservatory.subjectSelector.filter(s => s != removedBalancer.tag); - } - - // Remove related routing rules - newTemplateSettings.routing.rules.forEach((rule) => { - if (rule.balancerTag === removedBalancer.tag) { - delete rule.balancerTag; - } - }); // Update balancers property to an empty array if there are no more balancers if (newTemplateSettings.routing.balancers.length === 0) { delete newTemplateSettings.routing.balancers; } this.templateSettings = newTemplateSettings; + this.updateObservatorySelectors(); + this.obsSettings = ''; this.changeObsCode() }, addDNSServer(){ @@ -1649,22 +1650,8 @@ this.templateSettings = newTemplateSettings; }, }, - observatoryEnable: { - get: function () { return this.templateSettings != null && this.templateSettings.observatory }, - set: function (v) { - newTemplateSettings = this.templateSettings; - newTemplateSettings.observatory = v ? this.defaultObservatory : undefined; - this.templateSettings = newTemplateSettings; - } - }, - burstObservatoryEnable: { - get: function () { return this.templateSettings != null && this.templateSettings.burstObservatory }, - set: function (v) { - newTemplateSettings = this.templateSettings; - newTemplateSettings.burstObservatory = v ? this.defaultBurstObservatory : undefined; - this.templateSettings = newTemplateSettings; - } - }, + observatoryEnable: function () { return this.templateSettings != null && this.templateSettings.observatory != undefined }, + burstObservatoryEnable: function () { return this.templateSettings != null && this.templateSettings.burstObservatory != undefined }, freedomStrategy: { get: function () { if (!this.templateSettings) return "AsIs";