import { ref } from 'vue'; /**ueEventAMFParse UE会话事件AMF 数据解析 */ function ueEventAMFParse( 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: 'amf_ue', eId: `amf_ue_${item.id}_${Date.now()}`, eTime: +item.timestamp, id: item.id, type: item.eventType, data: evData, }; } /**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 { evData = JSON.parse(evData); } catch (error) { console.error(error); return false; } } // 指定显示CDR类型MOC/MTSM if (!['MOC', 'MTSM'].includes(evData.recordType)) { return false; } return { 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事件总量 */ export const eventTotal = ref(0); /**CDR/UE事件推送id */ export const eventId = ref(''); /**属性复位 */ export function userActivityReset() { eventData.value = []; eventTotal.value = 0; eventId.value = ''; }