куча изменений, но зато теперь сохраняются настройки QoS и есть алгоритм сохранения параметров в API
This commit is contained in:
@@ -106,7 +106,7 @@ label * {
|
||||
|
||||
label {
|
||||
margin: 1em 0.5em;
|
||||
/*display: block;*/
|
||||
display: block;
|
||||
/*background: var(--bg-selected);*/
|
||||
color: var(--text-color2);
|
||||
}
|
||||
|
174
static/main.html
174
static/main.html
@@ -349,7 +349,7 @@
|
||||
<input v-model="param.cinc.position.station.longitude" type="number"/>
|
||||
</label>
|
||||
<label v-show="param.cinc.mode === 'positional'">
|
||||
<span>Долгота спутника</span>
|
||||
<span>Подспутниковая точка</span>
|
||||
<input v-model="param.cinc.position.satelliteLongitude" type="number"/>
|
||||
</label>
|
||||
|
||||
@@ -443,7 +443,7 @@
|
||||
<span class="summary-actions">
|
||||
<label>
|
||||
<span class="toggle-input">
|
||||
<input type="checkbox" v-model="qosClass.isDisabled" />
|
||||
<input type="checkbox" v-model="qosClass.isEnabled" />
|
||||
<span class="slider"></span>
|
||||
</span>
|
||||
</label>
|
||||
@@ -472,7 +472,7 @@
|
||||
<span class="summary-actions">
|
||||
<label>
|
||||
<span class="toggle-input">
|
||||
<input type="checkbox" v-model="filter.isDisabled" />
|
||||
<input type="checkbox" v-model="filter.isEnabled" />
|
||||
<span class="slider"></span>
|
||||
</span>
|
||||
</label>
|
||||
@@ -517,19 +517,15 @@
|
||||
</template>
|
||||
|
||||
<button class="action-button" @click="settingsSubmitQoS()">Применить <span class="submit-spinner" v-show="submitStatus.qos"></span></button>
|
||||
|
||||
<p>
|
||||
Эти настройки пока недоступны, но скоро разработчик это поправит. А пока купи разработчику банку <strike>пива</strike> колы)
|
||||
</p>
|
||||
<video preload="auto" controls style="max-width: 100%">
|
||||
<source src="/vid/video_2024-11-06_15-49-35.mp4" type="video/mp4" />
|
||||
</video>
|
||||
</div>
|
||||
<div class="tabs-body-item" v-if="activeTab === 'admin'">
|
||||
<p>
|
||||
Эти настройки пока недоступны, но скоро разработчик это поправит. А пока смотри на крокодила
|
||||
Эти настройки пока недоступны, но скоро разработчик это поправит. А пока смотри на крокодила, или купи разработчику банку <strike>пива</strike> колы для ускорения процесса)
|
||||
</p>
|
||||
<img loading="lazy" src="/images/krokodil_vzryvaetsya_hd.gif" alt="krokodil">
|
||||
<video preload="auto" controls style="max-width: 100%">
|
||||
<source src="/vid/video_2024-11-06_15-49-35.mp4" type="video/mp4" />
|
||||
</video>
|
||||
</div>
|
||||
<p>Последнее обновление статистики: {{ lastUpdateTime }}</p>
|
||||
</div>
|
||||
@@ -636,10 +632,6 @@
|
||||
return { modulation: 'qpsk', speed: '1/4' }
|
||||
}
|
||||
|
||||
Vue.component('qos-component-root', {
|
||||
template: ""
|
||||
})
|
||||
|
||||
const app = new Vue({
|
||||
el: '#app',
|
||||
data: {
|
||||
@@ -857,10 +849,12 @@
|
||||
},
|
||||
|
||||
settingsSubmitRxTx() {
|
||||
if (this.submitStatus.rxTx) { return }
|
||||
this.submitStatus.rxTx = true
|
||||
},
|
||||
|
||||
settingsSubmitCinC() {
|
||||
if (this.submitStatus.cinc) { return }
|
||||
this.submitStatus.cinc = true
|
||||
},
|
||||
|
||||
@@ -875,7 +869,7 @@
|
||||
"serviceSettings.refClk10M": this.param.serviceSettings.refClk10M,
|
||||
"serviceSettings.autoStart": this.param.serviceSettings.autoStart
|
||||
}
|
||||
fetch('/api/applyBucLnbSettings', {
|
||||
fetch('/api/set/bucLnb', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify(query)
|
||||
}).then(() => {
|
||||
@@ -885,21 +879,79 @@
|
||||
},
|
||||
|
||||
settingsSubmitQoS() {
|
||||
if (this.submitStatus.qos) { return }
|
||||
this.submitStatus.qos = true
|
||||
function _translateQosClass(trafficClass, qc) {
|
||||
let res = {
|
||||
cir: qc['cir'],
|
||||
description: qc['description'],
|
||||
filters: []
|
||||
}
|
||||
if (trafficClass === 'cd') {
|
||||
res.pir = qc.pir
|
||||
}
|
||||
if (!qc.isEnabled) {
|
||||
res.disabled = true
|
||||
}
|
||||
for (const fi in qc.filters) {
|
||||
let filter = {}
|
||||
if (qc['filters'][fi].vlan !== "") { filter['vlan'] = qc['filters'][fi].vlan }
|
||||
if (qc['filters'][fi].proto !== "") { filter['proto'] = qc['filters'][fi].proto }
|
||||
if (qc['filters'][fi].sport !== "") { filter['sport'] = qc['filters'][fi].sport }
|
||||
if (qc['filters'][fi].dport !== "") { filter['dport'] = qc['filters'][fi].dport }
|
||||
if (qc['filters'][fi].ip_src !== "") { filter['ip.src'] = qc['filters'][fi].ip_src }
|
||||
if (qc['filters'][fi].ip_dest !== "") { filter['ip.dest'] = qc['filters'][fi].ip_dest }
|
||||
if (qc['filters'][fi].dscp !== "") { filter['dscp'] = qc['filters'][fi].dscp }
|
||||
|
||||
if (Object.keys(filter).length === 0) { continue }
|
||||
if (!qc.filters[fi].isEnabled) { filter['disabled'] = true }
|
||||
|
||||
res.filters.push(filter)
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
let query = {
|
||||
"en": this.qos.en,
|
||||
"rt1": [],
|
||||
"rt2": [],
|
||||
"rt3": [],
|
||||
"cd": []
|
||||
}
|
||||
for (let i = 0; i < this.qos.rt1.length; i++) { query.rt1.push(_translateQosClass('rt', this.qos.rt1[i])) }
|
||||
for (let i = 0; i < this.qos.rt2.length; i++) { query.rt2.push(_translateQosClass('rt', this.qos.rt2[i])) }
|
||||
for (let i = 0; i < this.qos.rt3.length; i++) { query.rt3.push(_translateQosClass('rt', this.qos.rt3[i])) }
|
||||
for (let i = 0; i < this.qos.cd.length; i++) { query.cd.push(_translateQosClass('rt', this.qos.cd[i])) }
|
||||
|
||||
console.log(query)
|
||||
fetch('/api/set/qos', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify(query)
|
||||
}).then(async (response) => {
|
||||
this.submitStatus.qos = false
|
||||
this.updateQosSettings(await response.json())
|
||||
})
|
||||
},
|
||||
|
||||
performUpdateSettings() {
|
||||
performUpdateSettings(reloadParts) {
|
||||
const doFetchSettings = async () => {
|
||||
let d = await fetch("/api/get/settings")
|
||||
this.updateSettings(await d.json())
|
||||
let vals = await d.json()
|
||||
if (reloadParts !== undefined) {
|
||||
if (reloadParts.indexOf('rxtx')) { this.updateRxTxSettings(vals) }
|
||||
if (reloadParts.indexOf('cinc')) { this.updateCincSettings(vals) }
|
||||
if (reloadParts.indexOf('buclnb')) { this.updateBucLnbSettings(vals) }
|
||||
if (reloadParts.indexOf('qos')) { this.updateQosSettings(vals) }
|
||||
} else {
|
||||
this.updateSettings(vals)
|
||||
}
|
||||
}
|
||||
|
||||
doFetchSettings().then(() => {})
|
||||
},
|
||||
|
||||
updateSettings(vals) {
|
||||
this.settingFetchComplete = true
|
||||
|
||||
updateRxTxSettings(vals) {
|
||||
this.submitStatus.rxTx = false
|
||||
this.param.general.isCinC = vals["settings"]["general.isCinC"]
|
||||
this.param.general.txEn = vals["settings"]["general.txEn"]
|
||||
this.param.general.modulatorMode = vals["settings"]["general.modulatorMode"]
|
||||
@@ -939,7 +991,10 @@
|
||||
this.param.rx.rolloff = vals["settings"]["rx.rolloff"]
|
||||
this.param.rx.cymRate = vals["settings"]["rx.cymRate"]
|
||||
this.param.rx.centerFreq = vals["settings"]["rx.centerFreq"]
|
||||
},
|
||||
|
||||
updateCincSettings(vals) {
|
||||
this.submitStatus.cinc = false
|
||||
this.param.cinc.mode = vals["settings"]["cinc.mode"]
|
||||
this.param.cinc.searchBandwidth = vals["settings"]["cinc.searchBandwidth"]
|
||||
this.param.cinc.position.station.latitude = vals["settings"]["cinc.position.station.latitude"]
|
||||
@@ -947,7 +1002,10 @@
|
||||
this.param.cinc.position.satelliteLongitude = vals["settings"]["cinc.position.satelliteLongitude"]
|
||||
this.param.cinc.delayMin = vals["settings"]["cinc.delayMin"]
|
||||
this.param.cinc.delayMax = vals["settings"]["cinc.delayMax"]
|
||||
},
|
||||
|
||||
updateBucLnbSettings(vals) {
|
||||
this.submitStatus.bucLnb = false
|
||||
this.param.buc.refClk10M = vals["settings"]["buc.refClk10M"]
|
||||
this.param.buc.powering = vals["settings"]["buc.powering"]
|
||||
this.param.lnb.refClk10M = vals["settings"]["lnb.refClk10M"]
|
||||
@@ -956,12 +1014,76 @@
|
||||
this.param.serviceSettings.autoStart = vals["settings"]["serviceSettings.autoStart"]
|
||||
},
|
||||
|
||||
updateQosSettings(vals) {
|
||||
this.submitStatus.qos = false
|
||||
this.qos.en = vals["settings"]["qos.enabled"]
|
||||
|
||||
const qosProfile = vals["settings"]["qos.profile"]
|
||||
if (qosProfile !== null && qosProfile !== undefined) {
|
||||
this.qos.rt1 = [] // .splice(0, this.qos.rt1.length)
|
||||
this.qos.rt2 = [] // .splice(0, this.qos.rt2.length)
|
||||
this.qos.rt3 = [] // .splice(0, this.qos.rt3.length)
|
||||
this.qos.cd = [] // .splice(0, this.qos.cd.length)
|
||||
|
||||
for (let trafficClass in qosProfile) {
|
||||
if (['rt1', 'rt2', 'rt3', 'cd'].indexOf(trafficClass) < 0) {
|
||||
continue
|
||||
}
|
||||
|
||||
if (Array.isArray(qosProfile[trafficClass])) {
|
||||
for (let i = 0; i < qosProfile[trafficClass].length; i++) {
|
||||
const qc = qosProfile[trafficClass][i]
|
||||
let result = {
|
||||
isEnabled: !qc.hasOwnProperty('disabled'),
|
||||
cir: qc['cir'],
|
||||
pir: 0,
|
||||
description: qc['description'],
|
||||
filters: []
|
||||
}
|
||||
if (trafficClass === 'cd') {
|
||||
if (qc['pir']) {
|
||||
result.pir = qc['pir']
|
||||
}
|
||||
}
|
||||
for (let fi = 0; fi < qc['filters'].length; fi++) {
|
||||
result.filters.push({
|
||||
isEnabled: !qc['filters'][fi].hasOwnProperty('disabled'),
|
||||
vlan: qc['filters'][fi].hasOwnProperty('vlan') ? qc['filters'][fi]['vlan'] : '',
|
||||
proto: qc['filters'][fi].hasOwnProperty('proto') ? qc['filters'][fi]['proto'] : '',
|
||||
sport: qc['filters'][fi].hasOwnProperty('sport') ? qc['filters'][fi]['sport'] : '',
|
||||
dport: qc['filters'][fi].hasOwnProperty('dport') ? qc['filters'][fi]['dport'] : '',
|
||||
ip_src: qc['filters'][fi].hasOwnProperty('ip.src') ? qc['filters'][fi]['ip.src'] : '',
|
||||
ip_dest: qc['filters'][fi].hasOwnProperty('ip.dest') ? qc['filters'][fi]['ip.dest'] : '',
|
||||
dscp: qc['filters'][fi].hasOwnProperty('dscp') ? qc['filters'][fi]['dscp'] : ''
|
||||
})
|
||||
}
|
||||
switch (trafficClass) {
|
||||
case 'rt1': this.qos.rt1.push(result); break
|
||||
case 'rt2': this.qos.rt2.push(result); break
|
||||
case 'rt3': this.qos.rt3.push(result); break
|
||||
case 'cd': this.qos.cd.push(result); break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
updateSettings(vals) {
|
||||
this.settingFetchComplete = true
|
||||
this.updateRxTxSettings(vals)
|
||||
this.updateCincSettings(vals)
|
||||
this.updateBucLnbSettings(vals)
|
||||
this.updateQosSettings(vals)
|
||||
},
|
||||
|
||||
// addQosClass()
|
||||
qosAddClass(name) {
|
||||
let res = {
|
||||
isDisabled: false,
|
||||
isEnabled: true,
|
||||
cir: 0,
|
||||
pir: 0,
|
||||
description: "",
|
||||
filters: []
|
||||
}
|
||||
switch (name) {
|
||||
@@ -974,7 +1096,7 @@
|
||||
|
||||
qosClassAddRule(name, index) {
|
||||
let rule = {
|
||||
isDisabled: false,
|
||||
isEnabled: true,
|
||||
vlan: "",
|
||||
proto: "",
|
||||
sport: "",
|
||||
@@ -1014,6 +1136,9 @@
|
||||
let result = ""
|
||||
let isFirst = true;
|
||||
for (const key in filter) {
|
||||
if (key === "isEnabled") {
|
||||
continue
|
||||
}
|
||||
if (!filter[key]) {
|
||||
continue
|
||||
}
|
||||
@@ -1035,6 +1160,9 @@
|
||||
result = ""
|
||||
isFirst = true;
|
||||
for (const key in filter) {
|
||||
if (key === "isEnabled") {
|
||||
continue
|
||||
}
|
||||
if (!filter[key]) {
|
||||
continue
|
||||
}
|
||||
|
Reference in New Issue
Block a user