nazhua/src/views/composable/server-real-time.js

301 lines
8.2 KiB
JavaScript

import {
computed,
} from 'vue';
import dayjs from 'dayjs';
import i18n from '@/i18n';
import validate from '@/utils/validate';
import * as dateUtils from '@/utils/date';
import * as hostUtils from '@/utils/host';
export default (params) => {
const {
props,
currentTime,
serverRealTimeListTpls = 'duration,transfer,inSpeed,outSpeed',
} = params || {};
if (!props?.info) {
return {};
}
/**
* 计算在线时长
*/
const duration = computed(() => {
if (props.info?.Host?.BootTime) {
const lastActive = dayjs(props.info.LastActive)?.valueOf?.();
const data = dateUtils.duration2(props.info.Host.BootTime * 1000, lastActive || currentTime.value);
if (data.days > 0) {
return {
value: data.days,
unit: data.$unit.day,
};
}
if (data.hours > 0) {
return {
value: data.hours,
unit: data.$unit.hour,
};
}
if (data.minutes > 0) {
return {
value: data.minutes,
unit: data.$unit.minute,
};
}
return {
value: data.seconds,
unit: data.$unit.second,
};
}
return null;
});
/**
* 计算流量
*/
const transfer = computed(() => {
const stats = {
in: null,
out: null,
total: null,
};
let total = 0;
if (props.info?.State?.NetInTransfer) {
total += props.info.State.NetInTransfer;
stats.in = hostUtils.calcBinary(props.info.State.NetInTransfer);
}
if (props.info?.State?.NetOutTransfer) {
total += props.info.State.NetOutTransfer;
stats.out = hostUtils.calcBinary(props.info.State.NetOutTransfer);
}
stats.total = hostUtils.calcBinary(total);
const result = {
value: 0,
unit: '',
statType: '',
statTypeLabel: '',
stats,
};
let ruleStat;
ruleStat = total;
result.statType = 'Total';
result.statTypeLabel = i18n.global.t('trafficDouble');
if (props.info?.PublicNote && validate.isSet(props.info.PublicNote?.planDataMod?.trafficType)) {
const {
trafficType = 2,
} = props.info.PublicNote.planDataMod;
switch (+trafficType) {
case 1:
ruleStat = props.info.State.NetOutTransfer;
result.statType = 'Out';
result.statTypeLabel = i18n.global.t('trafficSingleOut');
break;
case 3:
if (props.info?.State?.NetOutTransfer >= props.info?.State?.NetInTransfer) {
ruleStat = props.info.State.NetOutTransfer;
result.statType = 'MaxOut';
result.statTypeLabel = i18n.global.t('trafficSingleMax');
} else if (props.info?.State?.NetOutTransfer < props.info?.State?.NetInTransfer) {
ruleStat = props.info.State.NetInTransfer;
result.statType = 'MaxIn';
result.statTypeLabel = i18n.global.t('trafficSingleMax');
}
break;
default:
}
}
const ruleStats = hostUtils.calcBinary(ruleStat);
if (ruleStats.t > 1) {
result.value = (ruleStats.t).toFixed(2) * 1;
result.unit = 'T';
} else if (ruleStats.g > 1) {
result.value = (ruleStats.g).toFixed(2) * 1;
result.unit = 'G';
} else if (ruleStats.m > 1) {
result.value = (ruleStats.m).toFixed(1) * 1;
result.unit = 'M';
} else {
result.value = (ruleStats.k).toFixed(1) * 1;
result.unit = 'K';
}
return result;
});
const inTransfer = computed(() => {
const inStats = hostUtils.calcBinary(props.info?.State?.NetInTransfer || 0);
const result = {
value: 0,
unit: '',
};
if (inStats.g > 1) {
result.value = (inStats.g).toFixed(1) * 1;
result.unit = 'G';
} else if (inStats.m > 1) {
result.value = (inStats.m).toFixed(1) * 1;
result.unit = 'M';
} else {
result.value = (inStats.k).toFixed(1) * 1;
result.unit = 'K';
}
return result;
});
const outTransfer = computed(() => {
const outStats = hostUtils.calcBinary(props.info?.State?.NetOutTransfer || 0);
const result = {
value: 0,
unit: '',
};
if (outStats.g > 1) {
result.value = (outStats.g).toFixed(1) * 1;
result.unit = 'G';
} else if (outStats.m > 1) {
result.value = (outStats.m).toFixed(1) * 1;
result.unit = 'M';
} else {
result.value = (outStats.k).toFixed(1) * 1;
result.unit = 'K';
}
return result;
});
/**
* 计算入向网速
*/
const netInSpeed = computed(() => {
const inSpeed = hostUtils.calcBinary(props.info?.State?.NetInSpeed || 0);
const result = {
value: 0,
unit: '',
};
if (inSpeed.g > 1) {
result.value = (inSpeed.g).toFixed(1) * 1;
result.unit = 'G';
} else if (inSpeed.m > 1) {
result.value = (inSpeed.m).toFixed(1) * 1;
result.unit = 'M';
} else {
result.value = (inSpeed.k).toFixed(1) * 1;
result.unit = 'K';
}
return result;
});
/**
* 计算出向网速
*/
const netOutSpeed = computed(() => {
const outSpeed = hostUtils.calcBinary(props.info?.State?.NetOutSpeed || 0);
const result = {
value: 0,
unit: '',
};
if (outSpeed.g > 1) {
result.value = (outSpeed.g).toFixed(1) * 1;
result.unit = 'G';
} else if (outSpeed.m > 1) {
result.value = (outSpeed.m).toFixed(1) * 1;
result.unit = 'M';
} else {
result.value = (outSpeed.k).toFixed(1) * 1;
result.unit = 'K';
}
return result;
});
const serverRealTimeList = computed(() => serverRealTimeListTpls.split(',').map((key) => {
switch (key) {
case 'duration':
return {
key,
label: i18n.global.t('online'),
value: duration.value?.value,
unit: duration.value?.unit,
show: validate.isSet(duration.value?.value),
};
case 'traffic':
return {
key,
label: `${transfer.value.statTypeLabel}流量`,
value: transfer.value?.value,
unit: transfer.value?.unit,
show: validate.isSet(transfer.value?.value),
};
case 'inTransfer':
return {
key,
label: i18n.global.t('inTransfer'),
value: inTransfer.value?.value,
unit: inTransfer.value?.unit,
show: validate.isSet(inTransfer.value?.value),
};
case 'outTransfer':
return {
key,
label: i18n.global.t('outTransfer'),
value: outTransfer.value?.value,
unit: outTransfer.value?.unit,
show: validate.isSet(outTransfer.value?.value),
};
case 'inSpeed':
return {
key,
label: i18n.global.t('inSpeed'),
value: netInSpeed.value?.value,
unit: netInSpeed.value?.unit,
show: validate.isSet(netInSpeed.value?.value),
};
case 'outSpeed':
return {
key,
label: i18n.global.t('outSpeed'),
value: netOutSpeed.value?.value,
unit: netOutSpeed.value?.unit,
show: validate.isSet(netOutSpeed.value?.value),
};
case 'speeds':
return {
key,
label: i18n.global.t('speeds'),
values: [
{
key: 'in',
label: i18n.global.t('inSpeed'),
value: netInSpeed.value?.value,
unit: netInSpeed.value?.unit,
show: validate.isSet(netInSpeed.value?.value),
},
{
key: 'out',
label: i18n.global.t('outSpeed'),
value: netOutSpeed.value?.value,
unit: netOutSpeed.value?.unit,
show: validate.isSet(netOutSpeed.value?.value),
},
],
show: validate.isSet(netInSpeed.value?.value) && validate.isSet(netOutSpeed.value?.value),
};
case 'load':
return {
key,
label: i18n.global.t('load'),
value: (props.info.State?.Load1 || 0).toFixed(2),
unit: '',
show: validate.isSet(props.info.State?.Load1),
};
default:
}
return null;
}).filter((item) => item));
return {
duration,
transfer,
netInSpeed,
netOutSpeed,
serverRealTimeList,
};
};