diff --git a/src/views/dashboard/overview/components/UserActivity/index.vue b/src/views/dashboard/overview/components/UserActivity/index.vue index f86e2f45..30c1871a 100644 --- a/src/views/dashboard/overview/components/UserActivity/index.vue +++ b/src/views/dashboard/overview/components/UserActivity/index.vue @@ -19,12 +19,18 @@ let dict: { ueEventType: DictType[]; /**UE 事件CM状态 */ ueEventCmState: DictType[]; + /**UE 事件类型MME */ + ueEventTypeMME: DictType[]; + /**UE 事件结果MME */ + ueEventResultMME: DictType[]; } = reactive({ cdrSipCode: [], cdrCallType: [], ueAauthCode: [], ueEventType: [], ueEventCmState: [], + ueEventTypeMME: [], + ueEventResultMME: [], }); onMounted(() => { @@ -35,6 +41,8 @@ onMounted(() => { getDict('ue_auth_code'), getDict('ue_event_type'), getDict('ue_event_cm_state'), + getDict('ue_event_mme_type'), + getDict('ue_event_mme_result'), ]).then(resArr => { if (resArr[0].status === 'fulfilled') { dict.cdrSipCode = resArr[0].value; @@ -51,6 +59,12 @@ onMounted(() => { if (resArr[4].status === 'fulfilled') { dict.ueEventCmState = resArr[4].value; } + if (resArr[5].status === 'fulfilled') { + dict.ueEventTypeMME = resArr[5].value; + } + if (resArr[6].status === 'fulfilled') { + dict.ueEventResultMME = resArr[6].value; + } }); }); @@ -58,11 +72,11 @@ onMounted(() => { diff --git a/src/views/dashboard/overview/hooks/useUserActivity.ts b/src/views/dashboard/overview/hooks/useUserActivity.ts index 6f573517..5e307552 100644 --- a/src/views/dashboard/overview/hooks/useUserActivity.ts +++ b/src/views/dashboard/overview/hooks/useUserActivity.ts @@ -1,7 +1,9 @@ import { ref } from 'vue'; -/**ueEvent UE会话事件 数据解析 */ -export function ueEventParse(item: Record) { +/**ueEventAMFParse UE会话事件AMF 数据解析 */ +function ueEventAMFParse( + item: Record +): false | Record { let evData: Record = item.eventJSON; if (typeof evData === 'string') { try { @@ -12,8 +14,8 @@ export function ueEventParse(item: Record) { } return { - eType: 'ue', - eId: `ue_${item.id}_${Date.now()}`, + eType: 'amf_ue', + eId: `amf_ue_${item.id}_${Date.now()}`, eTime: +item.timestamp, id: item.id, type: item.eventType, @@ -21,8 +23,33 @@ export function ueEventParse(item: Record) { }; } -/**cdrEvent CDR会话事件 数据解析 */ -export function cdrEventParse(item: Record) { +/**ueEventMMEParse UE会话事件MME 数据解析 */ +function ueEventMMEParse( + item: Record +): false | Record { + let evData: Record = item.eventJSON; + if (typeof evData === 'string') { + try { + evData = JSON.parse(evData); + } catch (error) { + console.error(error); + } + } + + return { + eType: 'mme_ue', + eId: `mme_ue_${item.id}_${Date.now()}`, + eTime: +item.timestamp, + id: item.id, + type: item.eventType, + data: evData, + }; +} + +/**cdrEventIMSParse CDR会话事件IMS 数据解析 */ +function cdrEventIMSParse( + item: Record +): false | Record { let evData: Record = item.cdrJSON || item.CDR; if (typeof evData === 'string') { try { @@ -39,14 +66,73 @@ export function cdrEventParse(item: Record) { } return { - eType: 'cdr', - eId: `cdr_${item.id}_${Date.now()}`, + eType: 'ims_cdr', + eId: `ims_cdr_${item.id}_${Date.now()}`, eTime: +item.timestamp, id: item.id, data: evData, }; } +/**eventListParse 事件列表解析 */ +export function eventListParse( + type: 'ims_cdr' | 'amf_ue' | 'mme_ue', + data: any +) { + eventTotal.value += data.total; + for (const item of data.rows) { + let v: false | Record = false; + if (type === 'ims_cdr') { + v = cdrEventIMSParse(item); + } + if (type === 'amf_ue') { + v = ueEventAMFParse(item); + } + if (type === 'mme_ue') { + v = ueEventMMEParse(item); + } + + if (v) { + eventData.value.push(v); + } + } + + // 有数据进行排序 + if (eventData.value.length > 5) { + eventData.value.sort((a, b) => b.eTime - a.eTime); + } + if (eventData.value.length > 0) { + eventId.value = eventData.value[0].eId; + } +} + +/**eventItemParseAndPush 事件项解析并添加 */ +export async function eventItemParseAndPush( + type: 'ims_cdr' | 'amf_ue' | 'mme_ue', + item: any +) { + let v: false | Record = false; + if (type === 'ims_cdr') { + v = cdrEventIMSParse(item); + } + if (type === 'amf_ue') { + v = ueEventAMFParse(item); + } + if (type === 'mme_ue') { + v = ueEventMMEParse(item); + } + + if (v) { + eventData.value.unshift(v); + eventTotal.value += 1; + eventId.value = v.eId; + await new Promise(resolve => setTimeout(resolve, 800)); + if (eventData.value.length > 20) { + eventData.value.pop(); + } + } +} + /**CDR+UE事件数据 */ export const eventData = ref[]>([]); /**CDR+UE事件总量 */ diff --git a/src/views/dashboard/overview/hooks/useWS.ts b/src/views/dashboard/overview/hooks/useWS.ts index d1026cdc..4008e423 100644 --- a/src/views/dashboard/overview/hooks/useWS.ts +++ b/src/views/dashboard/overview/hooks/useWS.ts @@ -2,11 +2,8 @@ import { RESULT_CODE_ERROR } from '@/constants/result-constants'; import { OptionsType, WS } from '@/plugins/ws-websocket'; import { onBeforeUnmount, onMounted } from 'vue'; import { - ueEventParse, - cdrEventParse, - eventData, - eventTotal, - eventId, + eventListParse, + eventItemParseAndPush, userActivityReset, } from './useUserActivity'; import { @@ -55,41 +52,19 @@ export default function useWS() { // AMF_UE会话事件 case '1010': if (Array.isArray(data.rows)) { - eventTotal.value += data.total; - for (const item of data.rows) { - const v = ueEventParse(item); - if (v) { - eventData.value.push(v); - } - } - - // 有数据进行排序 - if (eventData.value.length > 10) { - eventData.value.sort((a, b) => b.eTime - a.eTime); - } - if (eventData.value.length > 0) { - eventId.value = eventData.value[0].eId; - } + eventListParse('amf_ue', data); + } + break; + // MME_UE会话事件 + case '1011': + if (Array.isArray(data.rows)) { + eventListParse('mme_ue', data); } break; // IMS_CDR会话事件 case '1005': if (Array.isArray(data.rows)) { - eventTotal.value += data.total; - for (const item of data.rows) { - const v = cdrEventParse(item); - if (v) { - eventData.value.push(v); - } - } - - // 有数据进行排序 - if (eventData.value.length > 10) { - eventData.value.sort((a, b) => b.eTime - a.eTime); - } - if (eventData.value.length > 0) { - eventId.value = eventData.value[0].eId; - } + eventListParse('ims_cdr', data); } break; //UPF-总流量数 @@ -127,35 +102,19 @@ export default function useWS() { // AMF_UE会话事件 case '1010': if (data.data) { - queue.add(async () => { - const v = ueEventParse(data.data); - if (v) { - eventData.value.unshift(v); - eventTotal.value += 1; - eventId.value = v.eId; - await new Promise(resolve => setTimeout(resolve, 800)); - if (eventData.value.length > 20) { - eventData.value.pop(); - } - } - }); + queue.add(() => eventItemParseAndPush('amf_ue', data.data)); + } + break; + // MME_UE会话事件 + case '1011': + if (data.data) { + queue.add(() => eventItemParseAndPush('mme_ue', data.data)); } break; // IMS_CDR会话事件 case '1005': if (data.data) { - queue.add(async () => { - const v = cdrEventParse(data.data); - if (v) { - eventData.value.unshift(v); - eventTotal.value += 1; - eventId.value = v.eId; - await new Promise(resolve => setTimeout(resolve, 800)); - if (eventData.value.length > 20) { - eventData.value.pop(); - } - } - }); + queue.add(() => eventItemParseAndPush('ims_cdr', data.data)); } break; } @@ -188,8 +147,9 @@ export default function useWS() { }); } - /**ueEvent UE会话事件 发消息*/ - function ueEventSend() { + /**userActivitySend 用户行为事件基础列表数据 发消息*/ + function userActivitySend() { + // AMF_UE会话事件 ws.send({ requestId: '1010', type: 'amf_ue', @@ -199,13 +159,23 @@ export default function useWS() { sortField: 'timestamp', sortOrder: 'desc', pageNum: 1, - pageSize: 10, + pageSize: 5, }, }); - } - - /**cdrEvent CDR会话事件 发消息*/ - function cdrEventSend() { + // MME_UE会话事件 + ws.send({ + requestId: '1011', + type: 'mme_ue', + data: { + neType: 'MME', + neId: '001', + sortField: 'timestamp', + sortOrder: 'desc', + pageNum: 1, + pageSize: 5, + }, + }); + // IMS_CDR会话事件 ws.send({ requestId: '1005', type: 'ims_cdr', @@ -216,7 +186,7 @@ export default function useWS() { sortField: 'timestamp', sortOrder: 'desc', pageNum: 1, - pageSize: 10, + pageSize: 5, }, }); } @@ -248,8 +218,7 @@ export default function useWS() { return { wsSend, - cdrEventSend, - ueEventSend, + userActivitySend, upfTFSend, }; } diff --git a/src/views/dashboard/overview/index.vue b/src/views/dashboard/overview/index.vue index 05dbb342..bc9aa8a0 100644 --- a/src/views/dashboard/overview/index.vue +++ b/src/views/dashboard/overview/index.vue @@ -29,7 +29,7 @@ import { useRouter } from 'vue-router'; const router = useRouter(); const appStore = useAppStore(); const { t } = useI18n(); -const { wsSend, cdrEventSend, ueEventSend, upfTFSend } = useWS(); +const { wsSend, userActivitySend, upfTFSend } = useWS(); /**概览状态类型 */ type SkimStateType = { @@ -155,8 +155,7 @@ async function fnGetSkim() { /**初始数据函数 */ function loadData() { fnGetNeState(); // 获取网元状态 - cdrEventSend(); - ueEventSend(); + userActivitySend(); upfTFSend(0); upfTFSend(7); upfTFSend(30);