summaryrefslogtreecommitdiff
path: root/src/views/_sila/Fans/Dynamic/FanSpeedSystem.vue
diff options
context:
space:
mode:
Diffstat (limited to 'src/views/_sila/Fans/Dynamic/FanSpeedSystem.vue')
-rw-r--r--src/views/_sila/Fans/Dynamic/FanSpeedSystem.vue248
1 files changed, 248 insertions, 0 deletions
diff --git a/src/views/_sila/Fans/Dynamic/FanSpeedSystem.vue b/src/views/_sila/Fans/Dynamic/FanSpeedSystem.vue
new file mode 100644
index 00000000..06f4dd14
--- /dev/null
+++ b/src/views/_sila/Fans/Dynamic/FanSpeedSystem.vue
@@ -0,0 +1,248 @@
+<template>
+ <collapse
+ id="collapse_FansSystem"
+ :title="$t('pageFans.speedSystem')"
+ @opened="onOpened"
+ >
+ <template #image>
+ <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-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> -->
+ <chart
+ type="fans"
+ :colors="colors"
+ :time-scale="timeScale"
+ :data="filteredForChart"
+ :warning="warning"
+ :shutdown="shutdown"
+ ></chart>
+
+ <b-table
+ responsive="md"
+ show-empty
+ table-variant="accessory"
+ hover
+ :items="items"
+ :fields="fields"
+ :empty-text="$t('global.table.emptyMessage')"
+ :bisy="isBusy"
+ >
+ <template #cell(name)="{ value, index }">
+ <div
+ class="item-color"
+ :style="`background-color: ${colors[index]}`"
+ ></div>
+ {{ value }}
+ </template>
+ <template #cell(minDate)="{ value }">
+ <span style="color: rgb(12, 28, 41)">
+ {{ value.time }}
+ </span>
+ <span>
+ {{ value.date }}
+ </span>
+ </template>
+ <template #cell(maxDate)="{ value }">
+ <span style="color: rgb(12, 28, 41)">
+ {{ value.time }}
+ </span>
+ <span>
+ {{ value.date }}
+ </span>
+ </template>
+ <template #cell(pwm)="{ value }">
+ <span>
+ {{ `${value}%` }}
+ </span>
+ </template>
+ </b-table>
+ </page-section>
+ </collapse>
+</template>
+<script>
+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 TableFilterMixin from '@/components/_sila/Mixins/TableFilterMixin';
+import Collapse from '@/components/_sila/Global/Collapse';
+
+import { getItems } from '@/utilities/_sila/metricProperties';
+import { fanFilter } from '@/utilities/_sila/psuFilter';
+
+export default {
+ components: { PageSection, Chart, Collapse },
+ mixins: [DataFormatterMixin, LoadingBarMixin, TableFilterMixin],
+ props: {
+ timeScale: {
+ type: String,
+ default: 'hour',
+ },
+ },
+ data() {
+ return {
+ warning: 8900,
+ shutdown: 9500,
+ isBusy: true,
+ fields: [
+ {
+ key: 'name',
+ label: this.$t('pageFans.table.name'),
+ },
+ {
+ key: 'current',
+ label: this.$t('pageFans.table.current'),
+ },
+ {
+ key: 'middle',
+ label: this.$t('pageFans.table.middle'),
+ },
+ {
+ key: 'pwm',
+ label: this.$t('pageFans.table.pwm'),
+ },
+ {
+ key: 'min',
+ label: this.$t('pageFans.table.min'),
+ },
+ {
+ key: 'minDate',
+ label: this.$t('pageFans.table.minDate'),
+ },
+ {
+ key: 'max',
+ label: this.$t('pageFans.table.max'),
+ },
+ {
+ key: 'maxDate',
+ label: this.$t('pageFans.table.maxDate'),
+ },
+ ],
+ };
+ },
+
+ computed: {
+ items() {
+ const allArr = getItems(this.filteredSensors);
+
+ let pwmArr = allArr.filter((item) => {
+ return item.name.toLowerCase().includes('pwm');
+ });
+
+ let cpuArr = allArr.filter((item) => {
+ return !item.name.toLowerCase().includes('pwm');
+ });
+
+ return cpuArr.map((cpu) => {
+ let pwm = pwmArr.find((pwm) => pwm.name === this.getPwmByCpu(cpu.name))
+ .middle;
+ return {
+ pwm,
+ ...cpu,
+ };
+ });
+ },
+
+ allSensors() {
+ return this.timeScale === 'hour'
+ ? this.$store.getters['fan/fansLastHour']
+ : this.$store.getters['fan/fans'];
+ },
+
+ preFiltered() {
+ return fanFilter(this.allSensors, 'System').concat(
+ fanFilter(this.allSensors, 'pwm')
+ );
+ },
+
+ filteredForChart() {
+ return fanFilter(this.allSensors, 'System');
+ },
+
+ filteredSensors() {
+ return this.getFilteredTableData(this.preFiltered, this.activeFilters);
+ },
+
+ colors() {
+ return this.$randomColor({
+ count: this.items?.length,
+ hue: 'random',
+ luminosity: 'random',
+ });
+ },
+ },
+
+ watch: {
+ timeScale() {
+ this.loadData();
+ },
+ },
+
+ created() {
+ this.loadData();
+ },
+
+ methods: {
+ getPwmByCpu(cpu) {
+ switch (cpu) {
+ case 'System_Fan_1':
+ return 'Pwm_1';
+ case 'System_Fan_2':
+ return 'Pwm_5';
+ case 'System_Fan_3':
+ return 'Pwm_6';
+ default:
+ return null;
+ }
+ },
+
+ onOpened(state) {
+ if (state) {
+ this.loadData();
+ }
+ },
+
+ loadData() {
+ let payload = { lastHour: false };
+ if (this.timeScale === 'hour') {
+ payload = { lastHour: true };
+ }
+
+ this.startLoader();
+ this.$store.dispatch('fan/getFansDynamic', payload).finally(() => {
+ this.endLoader();
+ this.isBusy = false;
+ });
+ },
+ },
+};
+</script>