summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVitalii Lysak <v.lysak@dunice.net>2022-08-24 16:31:27 +0300
committerVitalii Lysak <v.lysak@dunice.net>2022-08-24 16:31:27 +0300
commitabd7265f76c5d8f9f8e9512a5e17ed8b58e288a2 (patch)
tree4eee5a1ddbfa68b28926cf154e7dcdc702d991c1
parent25ae6bf858099a438387a1688b4e32c2e129e988 (diff)
downloadwebui-vue-abd7265f76c5d8f9f8e9512a5e17ed8b58e288a2.tar.xz
SILABMC-256: add limits for Fans
-rw-r--r--src/components/_sila/Global/Chart.vue2
-rw-r--r--src/locales/en-US.json4
-rw-r--r--src/locales/ru-RU.json2
-rw-r--r--src/store/modules/HardwareStatus/FanStore.js36
-rw-r--r--src/views/_sila/Fans/Dynamic/FanSpeedCpu.vue117
-rw-r--r--src/views/_sila/Fans/Dynamic/FanSpeedSystem.vue131
6 files changed, 212 insertions, 80 deletions
diff --git a/src/components/_sila/Global/Chart.vue b/src/components/_sila/Global/Chart.vue
index 25fa1221..6a3775bb 100644
--- a/src/components/_sila/Global/Chart.vue
+++ b/src/components/_sila/Global/Chart.vue
@@ -315,6 +315,7 @@ export default {
case 'memory':
case 'processors':
case 'power':
+ case 'fans':
plotBands = [
{
color: '#F0AC0C1A',
@@ -341,6 +342,7 @@ export default {
case 'motherboard':
case 'memory':
case 'processors':
+ case 'fans':
yMax = this.max;
break;
case 'power':
diff --git a/src/locales/en-US.json b/src/locales/en-US.json
index 93dd2188..84fa2168 100644
--- a/src/locales/en-US.json
+++ b/src/locales/en-US.json
@@ -875,8 +875,8 @@
"motherboard": "Motherboard"
},
"labels": {
- "warning": "Warning value, rpm",
- "shutdown": "Failure value, rpm"
+ "warning": "Warning, rpm",
+ "critical": "Critical, rpm"
}
},
"pageMotherboard": {
diff --git a/src/locales/ru-RU.json b/src/locales/ru-RU.json
index 148223f3..0b4edc14 100644
--- a/src/locales/ru-RU.json
+++ b/src/locales/ru-RU.json
@@ -876,7 +876,7 @@
},
"labels": {
"warning": "Значение предупреждения, об/мин",
- "shutdown": "Значение отказа, об/мин"
+ "critical": "Критический режим, об/мин"
}
},
"pageMotherboard": {
diff --git a/src/store/modules/HardwareStatus/FanStore.js b/src/store/modules/HardwareStatus/FanStore.js
index 9bc84280..8cae4d77 100644
--- a/src/store/modules/HardwareStatus/FanStore.js
+++ b/src/store/modules/HardwareStatus/FanStore.js
@@ -54,23 +54,29 @@ const FanStore = {
},
},
actions: {
- async patchLimits({ dispatch }, { warning, groups }) {
- return Promise.all(
- groups.map(
- async (group) =>
- await api.patch('/redfish/v1/Chassis/SILA_Baseboard/Thermal', {
- Speed: [
- {
- MemberId: group,
- UpperThresholdNonCritical: warning,
- },
- ],
- })
- )
- )
+ async patchLimits({ dispatch }, { warning, critical, groups }) {
+ return await api
+ .patch('/redfish/v1/Chassis/SILA_Baseboard/Thermal', {
+ Fans: groups.map((group) => {
+ return {
+ MemberId: group,
+ UpperThresholdNonCritical: warning,
+ };
+ }),
+ })
+ .then(async () => {
+ return await api.patch('/redfish/v1/Chassis/SILA_Baseboard/Thermal', {
+ Fans: groups.map((group) => {
+ return {
+ MemberId: group,
+ UpperThresholdCritical: critical,
+ };
+ }),
+ });
+ })
.catch((error) => {
console.log(error);
- throw new Error(i18n.t('pageMotherboard.toast.errorLimitUpdate'));
+ throw new Error(i18n.t('pageMemory.toast.errorLimitUpdate'));
})
.finally(() => dispatch('getLimits'));
},
diff --git a/src/views/_sila/Fans/Dynamic/FanSpeedCpu.vue b/src/views/_sila/Fans/Dynamic/FanSpeedCpu.vue
index 07c6618c..c24bc8d7 100644
--- a/src/views/_sila/Fans/Dynamic/FanSpeedCpu.vue
+++ b/src/views/_sila/Fans/Dynamic/FanSpeedCpu.vue
@@ -8,34 +8,61 @@
<img src="@/assets/images/_sila/collapsed/fan.svg" />
</template>
<page-section>
- <!-- <b-row class="align-items-end limit-container">
- <b-col xs="12" md="6" xl="3" class="pt-4">
- <b-form-group :label="$t('pageFans.labels.warning')">
- <b-form-input
- v-model.number="warning"
- type="number"
- :min="0"
- :max="shutdown"
+ <b-form novalidate>
+ <b-row class="align-items-end limit-container">
+ <b-col xs="12" md="6" xl="3" class="pt-4">
+ <b-form-group :label="$t('pageFans.labels.warning')">
+ <b-form-input
+ v-model.number="warning"
+ :disabled="$store.getters['authentication/role'] === 'ReadOnly'"
+ type="number"
+ :state="getValidationState($v.warning)"
+ @blur="$v.warning.$touch()"
+ >
+ </b-form-input>
+ <b-form-invalid-feedback class="absolute" role="alert">
+ <div v-if="!$v.warning.between">
+ {{ $t('global.form.invalidValue') }}
+ </div>
+ <div v-if="!$v.warning.required">
+ {{ $t('global.form.fieldRequired') }}
+ </div>
+ </b-form-invalid-feedback>
+ </b-form-group>
+ </b-col>
+ <b-col xs="12" md="6" xl="3" class="pt-4">
+ <b-form-group :label="$t('pageFans.labels.critical')">
+ <b-form-input
+ v-model.number="critical"
+ :disabled="$store.getters['authentication/role'] === 'ReadOnly'"
+ type="number"
+ :state="getValidationState($v.critical)"
+ @blur="$v.critical.$touch()"
+ ></b-form-input>
+ <b-form-invalid-feedback class="absolute" role="alert">
+ <div v-if="!$v.critical.between">
+ {{ $t('global.form.invalidValue') }}
+ </div>
+ <div v-if="!$v.critical.required">
+ {{ $t('global.form.fieldRequired') }}
+ </div>
+ </b-form-invalid-feedback>
+ </b-form-group>
+ </b-col>
+ <b-col xs="12" md="6" xl="3" class="pt-4">
+ <b-button
+ variant="primary"
+ style="height: 35px"
+ :disabled="
+ loading || $store.getters['authentication/role'] === 'ReadOnly'
+ "
+ @click="saveLimit"
>
- </b-form-input>
- </b-form-group>
- </b-col>
- <b-col xs="12" md="6" xl="3" class="pt-4">
- <b-form-group :label="$t('pageFans.labels.shutdown')">
- <b-form-input
- v-model.number="shutdown"
- :min="warning"
- :max="10000"
- type="number"
- ></b-form-input>
- </b-form-group>
- </b-col>
- <b-col xs="12" md="6" xl="3" class="pt-4">
- <b-button variant="primary" style="height: 35px" @click="saveLimit">
- {{ $t('global.action.save') }}
- </b-button>
- </b-col>
- </b-row>-->
+ {{ $t('global.action.save') }}
+ </b-button>
+ </b-col>
+ </b-row>
+ </b-form>
<chart
type="fans"
:colors="colors"
@@ -93,17 +120,27 @@ import Chart from '@/components/_sila/Global/Chart';
import PageSection from '@/components/Global/PageSection';
import DataFormatterMixin from '@/components/_sila/Mixins/DataFormatterMixin';
-import LoadingBarMixin from '@/components/_sila/Mixins/LoadingBarMixin';
+import LoadingBarMixin, {
+ loading,
+} from '@/components/_sila/Mixins/LoadingBarMixin';
import TableFilterMixin from '@/components/_sila/Mixins/TableFilterMixin';
import BVToastMixin from '@/components/_sila/Mixins/BVToastMixin';
+import VuelidateMixin from '@/components/_sila/Mixins/VuelidateMixin.js';
import Collapse from '@/components/_sila/Global/Collapse';
import { getGroups, getItems } from '@/utilities/_sila/metricProperties';
+import { between, required } from 'vuelidate/lib/validators';
import { fanFilter } from '@/utilities/_sila/psuFilter';
export default {
components: { PageSection, Chart, Collapse },
- mixins: [DataFormatterMixin, LoadingBarMixin, TableFilterMixin, BVToastMixin],
+ mixins: [
+ DataFormatterMixin,
+ LoadingBarMixin,
+ TableFilterMixin,
+ BVToastMixin,
+ VuelidateMixin,
+ ],
props: {
timeScale: {
type: String,
@@ -112,6 +149,7 @@ export default {
},
data() {
return {
+ loading,
warning: null,
critical: null,
isBusy: true,
@@ -152,10 +190,24 @@ export default {
};
},
+ validations() {
+ return {
+ warning: {
+ required,
+ between: between(1, this.critical),
+ },
+ critical: {
+ required,
+ between: between(this.warning, this.maxLimit),
+ },
+ };
+ },
+
computed: {
groups() {
- return getGroups(this.filteredSensors);
+ return getGroups(this.filteredForChart);
},
+
items() {
const allArr = getItems(this.filteredSensors);
@@ -245,15 +297,20 @@ export default {
methods: {
saveLimit() {
+ this.$v.$touch();
+ if (this.$v.$invalid) return;
+
this.startLoader();
this.$store
.dispatch('fan/patchLimits', {
warning: this.warning,
+ critical: this.critical,
groups: this.groups,
})
.catch(({ message }) => this.errorToast(message))
.finally(() => this.endLoader());
},
+
getPwmByCpu(cpu) {
switch (cpu) {
case 'CPU1_Fan':
diff --git a/src/views/_sila/Fans/Dynamic/FanSpeedSystem.vue b/src/views/_sila/Fans/Dynamic/FanSpeedSystem.vue
index bcf0b375..2271ef5c 100644
--- a/src/views/_sila/Fans/Dynamic/FanSpeedSystem.vue
+++ b/src/views/_sila/Fans/Dynamic/FanSpeedSystem.vue
@@ -8,41 +8,68 @@
<img src="@/assets/images/_sila/collapsed/fan.svg" />
</template>
<page-section>
- <!-- <b-row class="align-items-end limit-container">
- <b-col xs="12" md="6" xl="3" class="pt-4">
- <b-form-group :label="$t('pageFans.labels.warning')">
- <b-form-input
- v-model="warning"
- type="number"
- :min="0"
- :max="shutdown"
+ <b-form novalidate>
+ <b-row class="align-items-end limit-container">
+ <b-col xs="12" md="6" xl="3" class="pt-4">
+ <b-form-group :label="$t('pageFans.labels.warning')">
+ <b-form-input
+ v-model.number="warning"
+ :disabled="$store.getters['authentication/role'] === 'ReadOnly'"
+ type="number"
+ :state="getValidationState($v.warning)"
+ @blur="$v.warning.$touch()"
+ >
+ </b-form-input>
+ <b-form-invalid-feedback class="absolute" role="alert">
+ <div v-if="!$v.warning.between">
+ {{ $t('global.form.invalidValue') }}
+ </div>
+ <div v-if="!$v.warning.required">
+ {{ $t('global.form.fieldRequired') }}
+ </div>
+ </b-form-invalid-feedback>
+ </b-form-group>
+ </b-col>
+ <b-col xs="12" md="6" xl="3" class="pt-4">
+ <b-form-group :label="$t('pageFans.labels.critical')">
+ <b-form-input
+ v-model.number="critical"
+ :disabled="$store.getters['authentication/role'] === 'ReadOnly'"
+ type="number"
+ :state="getValidationState($v.critical)"
+ @blur="$v.critical.$touch()"
+ ></b-form-input>
+ <b-form-invalid-feedback class="absolute" role="alert">
+ <div v-if="!$v.critical.between">
+ {{ $t('global.form.invalidValue') }}
+ </div>
+ <div v-if="!$v.critical.required">
+ {{ $t('global.form.fieldRequired') }}
+ </div>
+ </b-form-invalid-feedback>
+ </b-form-group>
+ </b-col>
+ <b-col xs="12" md="6" xl="3" class="pt-4">
+ <b-button
+ variant="primary"
+ style="height: 35px"
+ :disabled="
+ loading || $store.getters['authentication/role'] === 'ReadOnly'
+ "
+ @click="saveLimit"
>
- </b-form-input>
- </b-form-group>
- </b-col>
- <b-col xs="12" md="6" xl="3" class="pt-4">
- <b-form-group :label="$t('pageFans.labels.shutdown')">
- <b-form-input
- v-model="shutdown"
- :min="warning"
- :max="10000"
- type="number"
- ></b-form-input>
- </b-form-group>
- </b-col>
- <b-col xs="12" md="6" xl="3" class="pt-4">
- <b-button variant="primary" style="height: 35px">
- {{ $t('global.action.save') }}
- </b-button>
- </b-col>
- </b-row> -->
+ {{ $t('global.action.save') }}
+ </b-button>
+ </b-col>
+ </b-row>
+ </b-form>
<chart
type="fans"
:colors="colors"
:time-scale="timeScale"
:data="filteredForChart"
- :warning="warning"
- :critical="critical"
+ :warning="warningLimit"
+ :critical="criticalLimit"
:max="maxLimit"
></chart>
@@ -93,16 +120,27 @@ import Chart from '@/components/_sila/Global/Chart';
import PageSection from '@/components/Global/PageSection';
import DataFormatterMixin from '@/components/_sila/Mixins/DataFormatterMixin';
-import LoadingBarMixin from '@/components/_sila/Mixins/LoadingBarMixin';
+import LoadingBarMixin, {
+ loading,
+} from '@/components/_sila/Mixins/LoadingBarMixin';
import TableFilterMixin from '@/components/_sila/Mixins/TableFilterMixin';
+import BVToastMixin from '@/components/_sila/Mixins/BVToastMixin';
+import VuelidateMixin from '@/components/_sila/Mixins/VuelidateMixin.js';
import Collapse from '@/components/_sila/Global/Collapse';
import { getGroups, getItems } from '@/utilities/_sila/metricProperties';
+import { between, required } from 'vuelidate/lib/validators';
import { fanFilter } from '@/utilities/_sila/psuFilter';
export default {
components: { PageSection, Chart, Collapse },
- mixins: [DataFormatterMixin, LoadingBarMixin, TableFilterMixin],
+ mixins: [
+ DataFormatterMixin,
+ LoadingBarMixin,
+ TableFilterMixin,
+ BVToastMixin,
+ VuelidateMixin,
+ ],
props: {
timeScale: {
type: String,
@@ -111,6 +149,7 @@ export default {
},
data() {
return {
+ loading,
warning: null,
critical: null,
isBusy: true,
@@ -151,9 +190,22 @@ export default {
};
},
+ validations() {
+ return {
+ warning: {
+ required,
+ between: between(1, this.critical),
+ },
+ critical: {
+ required,
+ between: between(this.warning, this.maxLimit),
+ },
+ };
+ },
+
computed: {
groups() {
- return getGroups(this.filteredSensors);
+ return getGroups(this.filteredForChart);
},
items() {
@@ -244,6 +296,21 @@ export default {
},
methods: {
+ saveLimit() {
+ this.$v.$touch();
+ if (this.$v.$invalid) return;
+
+ this.startLoader();
+ this.$store
+ .dispatch('fan/patchLimits', {
+ warning: this.warning,
+ critical: this.critical,
+ groups: this.groups,
+ })
+ .catch(({ message }) => this.errorToast(message))
+ .finally(() => this.endLoader());
+ },
+
getPwmByCpu(cpu) {
switch (cpu) {
case 'System_Fan_1':