feat: 看板统计UPF总量10s/避免重复请求

This commit is contained in:
TsMask
2024-01-31 14:20:54 +08:00
parent f8e6d6060c
commit 7dc5848281
3 changed files with 45 additions and 22 deletions

View File

@@ -6,6 +6,8 @@ type TFType = {
up: string; up: string;
/**下行 N6 */ /**下行 N6 */
down: string; down: string;
/**请求标记 */
requestFlag: boolean;
}; };
/**UPF-总流量数 */ /**UPF-总流量数 */
@@ -14,14 +16,17 @@ export const upfTotalFlow = ref<TFType[]>([
{ {
up: '0 B', up: '0 B',
down: '0 B', down: '0 B',
requestFlag: false,
}, },
{ {
up: '0 B', up: '0 B',
down: '0 B', down: '0 B',
requestFlag: false,
}, },
{ {
up: '0 B', up: '0 B',
down: '0 B', down: '0 B',
requestFlag: false,
}, },
]); ]);

View File

@@ -75,16 +75,19 @@ export default function useWS() {
const v0 = upfTFParse(data); const v0 = upfTFParse(data);
upfTotalFlow.value[0].up = v0.up; upfTotalFlow.value[0].up = v0.up;
upfTotalFlow.value[0].down = v0.down; upfTotalFlow.value[0].down = v0.down;
upfTotalFlow.value[0].requestFlag = false;
break; break;
case '1030_7': case '1030_7':
const v7 = upfTFParse(data); const v7 = upfTFParse(data);
upfTotalFlow.value[1].up = v7.up; upfTotalFlow.value[1].up = v7.up;
upfTotalFlow.value[1].down = v7.down; upfTotalFlow.value[1].down = v7.down;
upfTotalFlow.value[1].requestFlag = false;
break; break;
case '1030_30': case '1030_30':
const v30 = upfTFParse(data); const v30 = upfTFParse(data);
upfTotalFlow.value[2].up = v30.up; upfTotalFlow.value[2].up = v30.up;
upfTotalFlow.value[2].down = v30.down; upfTotalFlow.value[2].down = v30.down;
upfTotalFlow.value[2].requestFlag = false;
break; break;
} }
@@ -126,6 +129,20 @@ export default function useWS() {
/**UPF-总流量数 发消息*/ /**UPF-总流量数 发消息*/
function upfTFSend(day: 0 | 7 | 30) { function upfTFSend(day: 0 | 7 | 30) {
// 请求标记检查避免重复发送
let index = 0;
if (day === 0) {
index = 0;
} else if (day === 7) {
index = 1;
} else if (day === 30) {
index = 2;
}
if (upfTotalFlow.value[index].requestFlag) {
return;
}
upfTotalFlow.value[index].requestFlag = true;
ws.send({ ws.send({
requestId: `1030_${day}`, requestId: `1030_${day}`,
type: 'upf_tf', type: 'upf_tf',

View File

@@ -28,24 +28,24 @@ const appStore = useAppStore();
const { t } = useI18n(); const { t } = useI18n();
const { wsSend, cdrEventSend, ueEventSend, upfTFSend } = useWS(); const { wsSend, cdrEventSend, ueEventSend, upfTFSend } = useWS();
/**用户在线信息 */ /**概览状态类型 */
let onlineInfo: { type SkimStateType = {
/**签约用户数量 */ /**UDM签约用户数量 */
subNum: number; udmSubNum: number;
/**SMF在线用户数 */ /**SMF在线用户数 */
smfUeNum: number; smfUeNum: number;
/**IMS在线用户数 */ /**IMS在线用户数 */
imsUeNum: number; imsUeNum: number;
/**基站数量 */ /**基站数量 */
nbNum: number; nbNum: number;
/**原始严重程度 */ };
activeAlarmSeverity: DictType[];
} = reactive({ /**概览状态信息 */
subNum: 0, let skimState: SkimStateType = reactive({
udmSubNum: 0,
smfUeNum: 0, smfUeNum: 0,
imsUeNum: 0, imsUeNum: 0,
nbNum: 0, nbNum: 0,
activeAlarmSeverity: [],
}); });
/**总览节点 */ /**总览节点 */
@@ -107,11 +107,9 @@ function InitData() {
onMounted(() => { onMounted(() => {
Promise.allSettled([ Promise.allSettled([
listSub({ listSub({
neid: '003', neid: '001',
sortField: 'imsi', pageNum: 1,
sortOrder: 'asc', pageSize: 1,
pageNum: '1',
pageSize: '20',
}), }),
listBase5G({ listBase5G({
neType: ['AMF', '001'], neType: ['AMF', '001'],
@@ -125,7 +123,10 @@ onMounted(() => {
]) ])
.then(resArr => { .then(resArr => {
if (resArr[0].status === 'fulfilled') { if (resArr[0].status === 'fulfilled') {
onlineInfo.subNum = resArr[0].value.total; const res = resArr[0].value;
if (res.code === RESULT_CODE_SUCCESS) {
skimState.udmSubNum = res.total;
}
} }
if ( if (
@@ -133,20 +134,20 @@ onMounted(() => {
resArr[1].value.code === RESULT_CODE_SUCCESS && resArr[1].value.code === RESULT_CODE_SUCCESS &&
Array.isArray(resArr[1].value.rows) Array.isArray(resArr[1].value.rows)
) { ) {
onlineInfo.nbNum = resArr[1].value.rows.length; skimState.nbNum = resArr[1].value.rows.length;
} }
if (resArr[2].status === 'fulfilled') { if (resArr[2].status === 'fulfilled') {
const res = resArr[2].value; const res = resArr[2].value;
if (res.code === RESULT_CODE_SUCCESS) { if (res.code === RESULT_CODE_SUCCESS) {
onlineInfo.smfUeNum = res.data; skimState.smfUeNum = res.data;
} }
} }
if (resArr[3].status === 'fulfilled') { if (resArr[3].status === 'fulfilled') {
const res = resArr[3].value; const res = resArr[3].value;
if (res.code === RESULT_CODE_SUCCESS) { if (res.code === RESULT_CODE_SUCCESS) {
onlineInfo.imsUeNum = res.data; skimState.imsUeNum = res.data;
} }
} }
}) })
@@ -181,28 +182,28 @@ onBeforeUnmount(() => {
<div class="skim panel"> <div class="skim panel">
<div class="inner"> <div class="inner">
<div class="item"> <div class="item">
<h4>{{ onlineInfo.subNum }}</h4> <h4>{{ skimState.udmSubNum }}</h4>
<span> <span>
<UserOutlined style="color: #006cff" /> <UserOutlined style="color: #006cff" />
{{ t('views.dashboard.overview.skim.users') }} {{ t('views.dashboard.overview.skim.users') }}
</span> </span>
</div> </div>
<div class="item"> <div class="item">
<h4>{{ onlineInfo.nbNum }}</h4> <h4>{{ skimState.nbNum }}</h4>
<span> <span>
<GlobalOutlined style="color: #edcb35" /> <GlobalOutlined style="color: #edcb35" />
{{ t('views.dashboard.overview.skim.base') }} {{ t('views.dashboard.overview.skim.base') }}
</span> </span>
</div> </div>
<div class="item"> <div class="item">
<h4>{{ onlineInfo.imsUeNum }}</h4> <h4>{{ skimState.imsUeNum }}</h4>
<span> <span>
<UserSwitchOutlined style="color: #6acca3" /> <UserSwitchOutlined style="color: #6acca3" />
IMS {{ t('views.dashboard.overview.skim.session') }} IMS {{ t('views.dashboard.overview.skim.session') }}
</span> </span>
</div> </div>
<div class="item"> <div class="item">
<h4>{{ onlineInfo.smfUeNum }}</h4> <h4>{{ skimState.smfUeNum }}</h4>
<span> <span>
<UserSwitchOutlined style="color: #6acca3" /> <UserSwitchOutlined style="color: #6acca3" />
Data {{ t('views.dashboard.overview.skim.session') }} Data {{ t('views.dashboard.overview.skim.session') }}