diff --git a/public/neDataImput/pcf_template.txt b/public/neDataImput/pcf_template.txt index c978dd8a..78749efa 100644 --- a/public/neDataImput/pcf_template.txt +++ b/public/neDataImput/pcf_template.txt @@ -1,2 +1,3 @@ -#imsi,msisdn,sess_rules,pcc_rules,hdr_enrich,rfsp,sar,qos_audio,qos_video,online,offline +# !!! Remove lines containing the # symbol when importing files. +#imsi,msisdn,sess_rules,pcc_rules,hdr_enrich,rfsp,sar,qos_audio,qos_video 460996650000580,62357000580,internet|ims_sig,internet|ims_sig,dnn,1,def_sar,qos_audio,qos_video,0,0 diff --git a/public/neDataImput/udm_auth_template.txt b/public/neDataImput/udm_auth_template.txt index 1a2ba5d3..2ffeb373 100644 --- a/public/neDataImput/udm_auth_template.txt +++ b/public/neDataImput/udm_auth_template.txt @@ -1,2 +1,4 @@ +# !!! Remove lines containing the # symbol when importing files. +#imsi,ki,aigoIndex,amf,opc 460996650000580,1234567890ABCDEF1234567890ABCDEF,0,8000 460996650000581,1234567890ABCDEF1234567890ABCDEF,0,8000 diff --git a/public/neDataImput/udm_sub_template.txt b/public/neDataImput/udm_sub_template.txt index cad7c37b..857cf7e8 100644 --- a/public/neDataImput/udm_sub_template.txt +++ b/public/neDataImput/udm_sub_template.txt @@ -1,2 +1,4 @@ +# !!! Remove lines containing the # symbol when importing files. +#IMSI,MSISDN,UeAmbrTpl,NssaiTpl,AreaForbiddenTpl,ServiceAreaRestrictionTpl,RatRestrictions,CnTypeRestrictions,SmfSel,SmData,EPSDat 460996650000580,62357000580,def_ambr,def_nssai,def_arfb,def_sar,0,3,def_snssai,1-000001&content&ims,1,64,24,65,def_eps,1,010200000000,- 460996650000581,62357000581,def_ambr,def_nssai,def_arfb,def_sar,0,3,def_snssai,1-000001&content&ims,1,64,24,65,def_eps,1,010200000000,- diff --git a/public/neDataImput/udm_voip_template.txt b/public/neDataImput/udm_voip_template.txt index 21657b00..4b37d8e6 100644 --- a/public/neDataImput/udm_voip_template.txt +++ b/public/neDataImput/udm_voip_template.txt @@ -1,3 +1,4 @@ +# !!! Remove lines containing the # symbol when importing files. #username,password 62357000580,123456 62357000581,123456 diff --git a/public/neDataImput/udm_volte_template.txt b/public/neDataImput/udm_volte_template.txt index c23508f7..0d749abb 100644 --- a/public/neDataImput/udm_volte_template.txt +++ b/public/neDataImput/udm_volte_template.txt @@ -1,3 +1,4 @@ +# !!! Remove lines containing the # symbol when importing files. #vlote=0 MSISDN and IMSI need to be filled in the same way. #imsi,msisdn,vlote,vni 460996650000580,62357000580,1,ims.mnc000.mcc460.3gppnetwork.org diff --git a/src/api/faultManage/actAlarm.ts b/src/api/faultManage/actAlarm.ts index 05de7c39..38ef69e0 100644 --- a/src/api/faultManage/actAlarm.ts +++ b/src/api/faultManage/actAlarm.ts @@ -209,7 +209,7 @@ export async function origGet(coreUid: string) { */ export async function top3Sel(coreUid: string) { return await request({ - url: `/neData/alarm/count/ne`, + url: `/neData/alarm/count/top`, method: 'GET', params: { coreUid: coreUid, diff --git a/src/api/mmlManage/neOperate.ts b/src/api/mmlManage/neOperate.ts index a4744380..51a87532 100644 --- a/src/api/mmlManage/neOperate.ts +++ b/src/api/mmlManage/neOperate.ts @@ -19,27 +19,61 @@ export async function getMMLByNE(neType: string) { }); } +/** + * 查询UDM可用cmd命令 + * @returns object + */ +export async function getMMLByUDM() { + return request({ + url: '/tool/mml/subscriber/list', + method: 'GET', + params: { + neType: 'UDM', + status: 'Active', + pageNum: 1, + pageSize: 1000, + }, + timeout: 60_000, + }); +} + /** * 发送网元的mml命令 * @param neType 网元类型 + * @param coreUid 网元类型 * @param neId 网元ID * @param objectType 接口类型 * @param cmdStr 命令串 * @returns */ -export async function sendMMlByNE( - neType: string, - neId: string, - objectType: string, +export async function sendMML(data: Record) { + return request({ + url: '/tool/mml/command', + method: 'POST', + data: data, + timeout: 180_000, + }); +} + +/** + * 发送网元的mml命令 + * @param coreUid 网元类型 + * @param neUid 网元ID + * @param cmdArr 命令数组 + * @returns + */ +export async function sendMMlByGeneral( + coreUid: string, + neUid: string, cmdArr: string[] ) { return request({ url: '/tool/mml/command', method: 'POST', data: { - neType: neType, - neId: neId, - type: objectType, + coreUid: coreUid, + neUid: neUid, + type: 'General', command: cmdArr, }, timeout: 180_000, diff --git a/src/api/mmlManage/udmOperate.ts b/src/api/mmlManage/udmOperate.ts deleted file mode 100644 index 5fa50452..00000000 --- a/src/api/mmlManage/udmOperate.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { request } from '@/plugins/http-fetch'; - -/** - * 查询UDM可用cmd命令 - * @returns object - */ -export async function getMMLByUDM() { - return request({ - url: '/tool/mml/subscriber/list', - method: 'GET', - params: { - neType: 'UDM', - status: 'Active', - pageNum: 1, - pageSize: 1000, - }, - timeout: 60_000, - }); -} - -/** - * 发送UDM的mml命令 - * @param neId 网元ID - * @param cmdStr 命令串 - * @returns - */ -export async function sendMMlByUDM(neId: string, cmdArr: string[]) { - return request({ - url: '/tool/mml/command', - method: 'POST', - data: { - neType: 'UDM', - neId: neId, - type: 'General', - command: cmdArr, - }, - timeout: 180_000, - }); -} diff --git a/src/api/ne/neConfig.ts b/src/api/ne/neConfig.ts index 6631562f..93e0bf4d 100644 --- a/src/api/ne/neConfig.ts +++ b/src/api/ne/neConfig.ts @@ -68,10 +68,11 @@ export function delNeConfigData(params: Record) { /** * 从参数配置PCF中获取对应信息提供给PCF用户策略输入框 - * @param neId + * @param coreUid 核心网标识 + * @param neUid 网元标识 * @returns object {pccRules,sessionRules,qosTemplate,headerEnrichTemplate,serviceAreaRestriction} */ -export async function getPCFRule(neId: any) { +export async function getPCFRule(coreUid: string, neUid: string) { const paramNameArr = [ 'pccRules', 'sessionRules', @@ -84,7 +85,7 @@ export async function getPCFRule(neId: any) { reqArr.push( request({ url: `/ne/config/data`, - params: { neType: 'PCF', neId, paramName }, + params: { neType: 'PCF', coreUid, neUid, paramName }, method: 'GET', }) ); diff --git a/src/api/ne/neLicense.ts b/src/api/ne/neLicense.ts index 4c58d846..a83154e5 100644 --- a/src/api/ne/neLicense.ts +++ b/src/api/ne/neLicense.ts @@ -47,11 +47,11 @@ export function getNeLicenseByNF(coreUid: string, neUid: string) { * @param neId 网元id * @returns object */ -export function codeNeLicense(neType: string, neId: string) { +export function codeNeLicense(coreUid: string, neUid: string) { return request({ url: `/ne/license/code`, method: 'GET', - params: { neType, neId }, + params: { coreUid, neUid }, }); } diff --git a/src/api/neData/amf.ts b/src/api/neData/amf.ts index d9ff9fcd..25826aba 100644 --- a/src/api/neData/amf.ts +++ b/src/api/neData/amf.ts @@ -44,7 +44,7 @@ export function exportAMFDataUE(query: Record) { /** * AMF-接入基站信息列表 - * @param query 查询参数 neId=001&id=1 + * @param query 查询参数 coreUid=001&neUid=001&id=1 * @returns object */ export function listAMFNblist(query: Record) { @@ -58,12 +58,12 @@ export function listAMFNblist(query: Record) { /** * AMF-接入基站状态信息列表 - * @param query 查询参数 neId=001&state=1 + * @param query 查询参数 coreUid=001&neUid=001&state=1 * @returns object */ export function listAMFNbStatelist(query: Record) { return request({ - url: '/neData/amf/nb/list-cfg', + url: '/neData/amf/nb/addrs', method: 'GET', params: query, timeout: 60_000, @@ -76,13 +76,18 @@ export function listAMFNbStatelist(query: Record) { * @param data 数据 { "index": 1, "name": "Gnb", "address": "192.168.8.1", "position": "Area-B" } * @returns object */ -export function addAMFNbState(neId: string, data: Record) { +export function addAMFNbState( + coreUid: string, + neUid: string, + data: Record +) { return request({ url: `/ne/config/data`, method: 'POST', data: { neType: 'AMF', - neId: neId, + neUid: neUid, + coreUid: coreUid, paramName: 'gnbList', paramData: data, loc: `${data.index}`, @@ -92,17 +97,23 @@ export function addAMFNbState(neId: string, data: Record) { /** * AMF-接入基站状态信息修改 - * @param neId 网元ID + * @param coreUid 核心网标识 + * @param neUid 网元标识 * @param data 数据 { "index": 1, "name": "Gnb", "address": "192.168.8.1", "position": "Area-B" } * @returns object */ -export function editAMFNbState(neId: string, data: Record) { +export function editAMFNbState( + coreUid: string, + neUid: string, + data: Record +) { return request({ url: `/ne/config/data`, method: 'PUT', data: { neType: 'AMF', - neId: neId, + neUid: neUid, + coreUid: coreUid, paramName: 'gnbList', paramData: data, loc: `${data.index}`, @@ -112,17 +123,23 @@ export function editAMFNbState(neId: string, data: Record) { /** * AMF-接入基站状态信息删除 - * @param neId 网元ID + * @param coreUid 核心网标识 + * @param neUid 网元标识 * @param index 数据index * @returns object */ -export function delAMFNbState(neId: string, index: string | number) { +export function delAMFNbState( + coreUid: string, + neUid: string, + index: string | number +) { return request({ url: `/ne/config/data`, method: 'DELETE', params: { neType: 'AMF', - neId: neId, + neUid: neUid, + coreUid: coreUid, paramName: 'gnbList', loc: `${index}`, }, diff --git a/src/api/neData/ims.ts b/src/api/neData/ims.ts index 42a97ec7..fba5db5b 100644 --- a/src/api/neData/ims.ts +++ b/src/api/neData/ims.ts @@ -47,17 +47,17 @@ export function exportIMSDataCDR(query: Record) { * @param query 查询参数 * @returns object */ -export function listIMSSessionNum(neId: string) { +export function listIMSSessionNum(coreUid: string, neUid: string) { return request({ url: '/neData/ims/session/num', method: 'GET', - params: { neId }, + params: { coreUid, neUid }, }); } /** * IMS-在线会话用户列表信息 - * @param query 查询参数 {neId, imsi, msisdn} + * @param query 查询参数 {coreUid, neUid, imsi, msisdn} * @returns objectv */ export function listIMSSessionList(query: Record) { diff --git a/src/api/neData/mme.ts b/src/api/neData/mme.ts index 6e13735c..56877baa 100644 --- a/src/api/neData/mme.ts +++ b/src/api/neData/mme.ts @@ -63,7 +63,7 @@ export function listMMENblist(query: Record) { */ export function listMMENbStatelist(query: Record) { return request({ - url: '/neData/mme/nb/list-cfg', + url: '/neData/mme/nb/addrs', method: 'GET', params: query, timeout: 60_000, @@ -72,17 +72,23 @@ export function listMMENbStatelist(query: Record) { /** * MME-接入基站状态信息新增 - * @param neId 网元ID + * @param coreUid 核心网标识 + * @param neUid 网元标识 * @param data 数据 { "index": 1, "name": "Enb", "address": "192.168.8.1", "position": "Area-B" } * @returns object */ -export function addMMENbState(neId: string, data: Record) { +export function addMMENbState( + coreUid: string, + neUid: string, + data: Record +) { return request({ url: `/ne/config/data`, method: 'POST', data: { neType: 'MME', - neId: neId, + neUid: neUid, + coreUid: coreUid, paramName: 'enbList', paramData: data, loc: `${data.index}`, @@ -92,17 +98,23 @@ export function addMMENbState(neId: string, data: Record) { /** * MME-接入基站状态信息修改 - * @param neId 网元ID + * @param coreUid 核心网标识 + * @param neUid 网元标识 * @param data 数据 { "index": 1, "name": "Enb", "address": "192.168.8.1", "position": "Area-B" } * @returns object */ -export function editMMENbState(neId: string, data: Record) { +export function editMMENbState( + coreUid: string, + neUid: string, + data: Record +) { return request({ url: `/ne/config/data`, method: 'PUT', data: { neType: 'MME', - neId: neId, + neUid: neUid, + coreUid: coreUid, paramName: 'enbList', paramData: data, loc: `${data.index}`, @@ -112,17 +124,23 @@ export function editMMENbState(neId: string, data: Record) { /** * MME-接入基站状态信息删除 - * @param neId 网元ID + * @param coreUid 核心网标识 + * @param neUid 网元标识 * @param index 数据index * @returns object */ -export function delMMENbState(neId: string, index: string | number) { +export function delMMENbState( + coreUid: string, + neUid: string, + index: string | number +) { return request({ url: `/ne/config/data`, method: 'DELETE', params: { neType: 'MME', - neId: neId, + neUid: neUid, + coreUid: coreUid, paramName: 'enbList', loc: `${index}`, }, diff --git a/src/api/neUser/n3iwf.ts b/src/api/neData/n3iwf.ts similarity index 100% rename from src/api/neUser/n3iwf.ts rename to src/api/neData/n3iwf.ts diff --git a/src/api/neData/nb-state.ts b/src/api/neData/nb-state.ts index 295d076d..57b6ead6 100644 --- a/src/api/neData/nb-state.ts +++ b/src/api/neData/nb-state.ts @@ -7,7 +7,7 @@ import { request } from '@/plugins/http-fetch'; */ export function listNBState(query: Record) { return request({ - url: '/neData/nb-state/list', + url: '/neData/state/nb/list', method: 'GET', params: query, timeout: 60_000, @@ -21,7 +21,7 @@ export function listNBState(query: Record) { */ export function exportNBState(query: Record) { return request({ - url: '/neData/nb-state/export', + url: '/neData/state/nb/export', method: 'GET', params: query, responseType: 'blob', diff --git a/src/api/neUser/nssf.ts b/src/api/neData/nssf.ts similarity index 75% rename from src/api/neUser/nssf.ts rename to src/api/neData/nssf.ts index 9050bb47..b08fc7a3 100644 --- a/src/api/neUser/nssf.ts +++ b/src/api/neData/nssf.ts @@ -7,10 +7,11 @@ import { parseObjLineToHump } from '@/utils/parse-utils'; * @param query 查询参数 {imsi} * @returns object */ -export function listNSSFSubList() { +export function listNSSFSubList(query: Record) { return request({ url: '/neData/nssf/sub/list', method: 'GET', + params: query, }); } @@ -18,9 +19,10 @@ export function listNSSFSubList() { * NSSF-可用AMF列表信息 * @returns object */ -export function listNSSFAmfList() { +export function listNSSFAmfList(query: Record) { return request({ url: '/neData/nssf/amf/list', method: 'GET', + params: query, }); } diff --git a/src/api/neData/smf.ts b/src/api/neData/smf.ts index 2f899eb0..4d0dfc7a 100644 --- a/src/api/neData/smf.ts +++ b/src/api/neData/smf.ts @@ -47,17 +47,17 @@ export function exportSMFDataCDR(query: Record) { * @param query 查询参数 * @returns object */ -export function listSMFSubNum(neId: string) { +export function listSMFSubNum(coreUid: string, neUid: string) { return request({ url: '/neData/smf/sub/num', method: 'GET', - params: { neId }, + params: { coreUid, neUid }, }); } /** * SMF-在线订阅用户列表信息 - * @param query 查询参数 {neId, pageNum, imsi, msisdn, upstate} + * @param query 查询参数 {coreUid, neUid, pageNum, imsi, msisdn, upstate} * @returns object */ export function listSMFSubList(query: Record) { diff --git a/src/api/neData/udm_auth.ts b/src/api/neData/udm_auth.ts index 1f20dd42..132ceb96 100644 --- a/src/api/neData/udm_auth.ts +++ b/src/api/neData/udm_auth.ts @@ -2,13 +2,15 @@ import { request } from '@/plugins/http-fetch'; /** * UDM鉴权用户重载数据 - * @param neId 网元ID + * @param coreUid 核心网标识 + * @param neUid 网元标识 * @returns object */ -export function resetUDMAuth(neId: string) { +export function resetUDMAuth(coreUid: string, neUid: string) { return request({ - url: `/neData/udm/auth/resetData/${neId}`, + url: `/neData/udm/auth/reset`, method: 'PUT', + params: { coreUid, neUid }, timeout: 180_000, }); } @@ -23,20 +25,21 @@ export function listUDMAuth(query: Record) { url: '/neData/udm/auth/list', method: 'GET', params: query, - timeout: 30_000, + timeout: 60_000, }); } /** * UDM鉴权用户信息 - * @param neId 网元ID + * @param neUid 网元标识 * @param imsi IMSI * @returns object */ -export function getUDMAuth(neId: string, imsi: string) { +export function getUDMAuth(query: Record) { return request({ - url: `/neData/udm/auth/${neId}/${imsi}`, + url: `/neData/udm/auth`, method: 'GET', + params: query, }); } @@ -47,23 +50,9 @@ export function getUDMAuth(neId: string, imsi: string) { */ export function addUDMAuth(data: Record) { return request({ - url: `/neData/udm/auth/${data.neId}`, - method: 'POST', - data: data, - timeout: 180_000, - }); -} - -/** - * UDM鉴权用户批量新增 - * @param data 鉴权对象 - * @param num 数量 - * @returns object - */ -export function batchAddUDMAuth(data: Record, num: number) { - return request({ - url: `/neData/udm/auth/${data.neId}/${num}`, + url: `/neData/udm/auth`, method: 'POST', + params: { num: data.num }, data: data, timeout: 180_000, }); @@ -76,7 +65,7 @@ export function batchAddUDMAuth(data: Record, num: number) { */ export function updateUDMAuth(data: Record) { return request({ - url: `/neData/udm/auth/${data.neId}`, + url: `/neData/udm/auth`, method: 'PUT', data: data, timeout: 180_000, @@ -85,29 +74,17 @@ export function updateUDMAuth(data: Record) { /** * UDM鉴权用户删除 + * @param coreUid 核心网标识 * @param neId 网元ID * @param imsi IMSI + * @param num 数量 大于1为批量 * @returns object */ -export function delUDMAuth(neId: string, imsi: string) { +export function delUDMAuth(query: Record) { return request({ - url: `/neData/udm/auth/${neId}/${imsi}`, - method: 'DELETE', - timeout: 180_000, - }); -} - -/** - * UDM鉴权用户批量删除 - * @param neId 网元ID - * @param imsi IMSI - * @param num 数量 - * @returns object - */ -export function batchDelUDMAuth(neId: string, imsi: string, num: number) { - return request({ - url: `/neData/udm/auth/${neId}/${imsi}/${num}`, + url: `/neData/udm/auth`, method: 'DELETE', + params: query, timeout: 180_000, }); } diff --git a/src/api/neData/udm_sub.ts b/src/api/neData/udm_sub.ts index e3fee046..104b6924 100644 --- a/src/api/neData/udm_sub.ts +++ b/src/api/neData/udm_sub.ts @@ -2,13 +2,15 @@ import { request } from '@/plugins/http-fetch'; /** * UDM签约用户重载数据 - * @param neId 网元ID + * @param coreUid 核心网ID + * @param neUid 网元ID * @returns object */ -export function resetUDMSub(neId: string) { +export function resetUDMSub(coreUid: string, neUid: string) { return request({ - url: `/neData/udm/sub/resetData/${neId}`, + url: `/neData/udm/sub/reset`, method: 'PUT', + params: { coreUid, neUid }, timeout: 180_000, }); } @@ -23,20 +25,21 @@ export function listUDMSub(query: Record) { url: '/neData/udm/sub/list', method: 'GET', params: query, - timeout: 30_000, + timeout: 60_000, }); } /** * UDM签约用户信息 - * @param neId 网元ID + * @param neUid 网元标识 * @param imsi IMSI * @returns object */ -export function getUDMSub(neId: string, imsi: string) { +export function getUDMSub(query: Record) { return request({ - url: `/neData/udm/sub/${neId}/${imsi}`, + url: `/neData/udm/sub`, method: 'GET', + params: query, }); } @@ -47,23 +50,9 @@ export function getUDMSub(neId: string, imsi: string) { */ export function addUDMSub(data: Record) { return request({ - url: `/neData/udm/sub/${data.neId}`, - method: 'POST', - data: data, - timeout: 180_000, - }); -} - -/** - * UDM签约用户批量新增 - * @param data 签约对象 - * @param num 数量 - * @returns object - */ -export function batchAddUDMSub(data: Record, num: number) { - return request({ - url: `/neData/udm/sub/${data.neId}/${num}`, + url: `/neData/udm/sub`, method: 'POST', + params: { num: data.num }, data: data, timeout: 180_000, }); @@ -76,7 +65,7 @@ export function batchAddUDMSub(data: Record, num: number) { */ export function updateUDMSub(data: Record) { return request({ - url: `/neData/udm/sub/${data.neId}`, + url: `/neData/udm/sub`, method: 'PUT', data: data, timeout: 180_000, @@ -88,25 +77,11 @@ export function updateUDMSub(data: Record) { * @param data 签约对象 * @returns object */ -export function delUDMSub(neId: string, imsi: string) { +export function delUDMSub(query: Record) { return request({ - url: `/neData/udm/sub/${neId}/${imsi}`, - method: 'DELETE', - timeout: 180_000, - }); -} - -/** - * UDM签约用户批量删除 - * @param neId 网元ID - * @param imsi IMSI - * @param num 数量 - * @returns object - */ -export function batchDelUDMSub(neId: string, imsi: string, num: number) { - return request({ - url: `/neData/udm/sub/${neId}/${imsi}/${num}`, + url: `/neData/udm/sub`, method: 'DELETE', + params: query, timeout: 180_000, }); } diff --git a/src/api/neData/udm_voip.ts b/src/api/neData/udm_voip.ts index 0046de39..4a2c0ecd 100644 --- a/src/api/neData/udm_voip.ts +++ b/src/api/neData/udm_voip.ts @@ -1,115 +1,83 @@ import { request } from '@/plugins/http-fetch'; /** - * UDMVOIP用户重载数据 - * @param neId 网元ID + * UDMVoIP用户重载数据 + * @param coreUid 核心网ID + * @param neUid 网元ID * @returns object */ -export function resetUDMVOIP(neId: string) { +export function resetUDMVoIP(coreUid: string, neUid: string) { return request({ - url: `/neData/udm/voip/resetData/${neId}`, + url: `/neData/udm/voip/reset`, method: 'PUT', + params: { coreUid, neUid }, timeout: 180_000, }); } /** - * UDMVOIP用户列表 + * UDMVoIP用户列表 * @param query 查询参数 * @returns object */ -export function listUDMVOIP(query: Record) { +export function listUDMVoIP(query: Record) { return request({ url: '/neData/udm/voip/list', method: 'GET', params: query, - timeout: 30_000, + timeout: 60_000, }); } /** - * UDMVOIP用户信息 - * @param neId 网元ID + * UDMVoIP用户信息 + * @param neUid 网元标识 * @param username username * @returns object */ -export function getUDMVOIP(neId: string, username: string) { +export function getUDMVoIP(query: Record) { return request({ - url: `/neData/udm/voip/${neId}/${username}`, + url: `/neData/udm/voip`, method: 'GET', + params: query, }); } /** - * UDMVOIP用户新增 - * @param data VOIP对象 + * UDMVoIP用户新增 + * @param data VoIP对象 username password * @returns object */ -export function addUDMVOIP( - neId: string, - data: { username: string; password: string } -) { +export function addUDMVoIP(data: Record) { return request({ - url: `/neData/udm/voip/${neId}`, + url: `/neData/udm/voip`, method: 'POST', + params: { num: data.num }, data: data, timeout: 180_000, }); } /** - * UDMVOIP用户批量新增 - * @param data VOIP对象 - * @param num 数量 + * UDMVoIP用户删除 + * @param data VoIP对象 * @returns object */ -export function batchAddUDMVOIP( - neId: string, - data: { username: string; password: string }, - num: number -) { +export function delUDMVoIP(query: Record) { return request({ - url: `/neData/udm/voip/${neId}/${num}`, - method: 'POST', - data: data, - timeout: 180_000, - }); -} - -/** - * UDMVOIP用户删除 - * @param data VOIP对象 - * @returns object - */ -export function delUDMVOIP(neId: string, username: string) { - return request({ - url: `/neData/udm/voip/${neId}/${username}`, + url: `/neData/udm/voip`, method: 'DELETE', + params: query, timeout: 180_000, }); } /** - * UDMVOIP用户批量删除 - * @param neId 网元ID - * @param username username - * @param num 数量 - * @returns object - */ -export function batchDelUDMVOIP(neId: string, username: string, num: number) { - return request({ - url: `/neData/udm/voip/${neId}/${username}/${num}`, - method: 'DELETE', - timeout: 180_000, - }); -} - -/** - * UDMVOIP用户导出 + * UDMVoIP用户导出 * @param data 数据参数 * @returns bolb */ -export function exportUDMVOIP(data: Record) { +export function exportUDMVoIP(data: Record) { return request({ url: '/neData/udm/voip/export', method: 'GET', @@ -120,11 +88,11 @@ export function exportUDMVOIP(data: Record) { } /** - * UDMVOIP用户导入 + * UDMVoIP用户导入 * @param data 表单数据对象 * @returns object */ -export function importUDMVOIP(data: Record) { +export function importUDMVoIP(data: Record) { return request({ url: `/neData/udm/voip/import`, method: 'POST', diff --git a/src/api/neData/udm_volte_ims.ts b/src/api/neData/udm_volte_ims.ts index 7b65f0fb..1b0410a4 100644 --- a/src/api/neData/udm_volte_ims.ts +++ b/src/api/neData/udm_volte_ims.ts @@ -2,13 +2,15 @@ import { request } from '@/plugins/http-fetch'; /** * UDMVolteIMS用户重载数据 - * @param neId 网元ID + * @param coreUid 核心网ID + * @param neUid 网元ID * @returns object */ -export function resetUDMVolteIMS(neId: string) { +export function resetUDMVolteIMS(coreUid: string, neUid: string) { return request({ - url: `/neData/udm/volte-ims/resetData/${neId}`, + url: `/neData/udm/volte-ims/reset`, method: 'PUT', + params: { coreUid, neUid }, timeout: 180_000, }); } @@ -23,7 +25,7 @@ export function listUDMVolteIMS(query: Record) { url: '/neData/udm/volte-ims/list', method: 'GET', params: query, - timeout: 30_000, + timeout: 60_000, }); } @@ -33,10 +35,11 @@ export function listUDMVolteIMS(query: Record) { * @param imsi IMSI * @returns object */ -export function getUDMVolteIMS(neId: string, imsi: string) { +export function getUDMVolteIMS(query: Record) { return request({ - url: `/neData/udm/volte-ims/${neId}/${imsi}`, + url: `/neData/udm/volte-ims`, method: 'GET', + params: query, }); } @@ -47,23 +50,9 @@ export function getUDMVolteIMS(neId: string, imsi: string) { */ export function addUDMVolteIMS(data: Record) { return request({ - url: `/neData/udm/volte-ims/${data.neId}`, - method: 'POST', - data: data, - timeout: 180_000, - }); -} - -/** - * UDMVolteIMS用户批量新增 - * @param data 签约对象 - * @param num 数量 - * @returns object - */ -export function batchAddUDMVolteIMS(data: Record, num: number) { - return request({ - url: `/neData/udm/volte-ims/${data.neId}/${num}`, + url: `/neData/udm/volte-ims`, method: 'POST', + params: { num: data.num }, data: data, timeout: 180_000, }); @@ -71,38 +60,19 @@ export function batchAddUDMVolteIMS(data: Record, num: number) { /** * UDMVolteIMS用户删除 - * @param neId 网元ID - * @param imsi_msisdn IMSI/MSISDN - * @param tag 标签 0-voip 1-volte - * @returns object - */ -export function delUDMVolteIMS(neId: string, imsi_msisdn: string, tag: string) { - return request({ - url: `/neData/udm/volte-ims/${neId}/${imsi_msisdn}`, - method: 'DELETE', - params: { volte: tag }, - timeout: 180_000, - }); -} - -/** - * UDMVolteIMS用户批量删除 - * @param neId 网元ID + * @param coreUid 核心网ID + * @param neUid 网元ID * @param imsi IMSI + * @param msisdn MSISDN + * @param volte 标签 0-voip 1-volte * @param num 数量 - * @param tag 标签 0-voip 1-volte * @returns object */ -export function batchDelUDMVolteIMS( - neId: string, - imsi: string, - num: number, - tag: string -) { +export function delUDMVolteIMS(query: Record) { return request({ - url: `/neData/udm/volte-ims/${neId}/${imsi}/${num}`, + url: `/neData/udm/volte-ims`, method: 'DELETE', - params: { volte: tag }, + params: query, timeout: 180_000, }); } diff --git a/src/api/tool/file.ts b/src/api/tool/file.ts index ecbcfd1c..3ca6f4ac 100644 --- a/src/api/tool/file.ts +++ b/src/api/tool/file.ts @@ -277,19 +277,21 @@ export function transferStaticFile(data: Record) { */ export async function uploadFileToNE( neType: string, - neId: string, + neuid: string, + coreUid: string, fileData: File, chunkSize: number = 1 ) { const uploadChunkRes = await uploadFileChunk(fileData, chunkSize, 'import'); if (uploadChunkRes.code === RESULT_CODE_SUCCESS) { const transferToNeFileRes = await request({ - url: `/ne/action/pushFile`, + url: `/ne/action/file/push`, method: 'POST', data: { uploadPath: uploadChunkRes.data.filePath, neType, - neId, + neuid, + coreUid, delTemp: true, }, timeout: 60_000, diff --git a/src/api/tool/iperf.ts b/src/api/tool/iperf.ts index fe23ae79..067fab4f 100644 --- a/src/api/tool/iperf.ts +++ b/src/api/tool/iperf.ts @@ -8,13 +8,3 @@ export function iperfV(data: Record) { params: data, }); } - -// iperf 软件安装 -export function iperfI(data: Record) { - return request({ - url: '/tool/iperf/i', - method: 'POST', - data: data, - timeout: 60_000, - }); -} diff --git a/src/constants/ne-constants.ts b/src/constants/ne-constants.ts index 7d9ef989..5d5af200 100644 --- a/src/constants/ne-constants.ts +++ b/src/constants/ne-constants.ts @@ -36,3 +36,36 @@ export const NE_TYPE_LIST = [ * UDM-adb/kvdb */ export const NE_EXPAND_LIST = ['ADB', 'KVDB', 'RTPROXY', 'MF']; + +// 组号-其他 +export const WS_GROUP_OTHER = '0'; +// 组号-跟踪任务网元数据变更 2_traceId +export const WS_GROUP_TRACE_NE = '2'; +// 组号-信令跟踪Packet 4_taskNo +export const WS_GROUP_TRACE_PACKET = '4'; +// 组号-网元状态 8_neType_neId +export const WS_GROUP_NE_STATE = '8'; +// 组号-指标通用 10_coreUid_neUid +export const WS_GROUP_KPI = '10'; +// 组号-自定义KPI指标 20_coreUid_neUid +export const WS_GROUP_KPI_C = '20'; +// 组号-IMS_CDR会话事件 1005_coreUid_neUid +export const WS_GROUP_IMS_CDR = '1005'; +// 组号-SMF_CDR会话事件 1006_coreUid_neUid +export const WS_GROUP_SMF_CDR = '1006'; +// 组号-SMSC_CDR会话事件 1007_coreUid_neUid +export const WS_GROUP_SMSC_CDR = '1007'; +// 组号-SGWC_CDR会话事件 1008_coreUid_neUid +export const WS_GROUP_SGWC_CDR = '1008'; +// 组号-AMF_UE会话事件 1010_coreUid_neUid +export const WS_GROUP_AMF_UE = '1010'; +// 组号-MME_UE会话事件 1011_coreUid_neUid +export const WS_GROUP_MME_UE = '1011'; +// 组号-AMF_NB状态事件 1014_coreUid_neUid +export const WS_GROUP_AMF_NB = '1014'; +// 组号-MME_NB状态事件 1015_coreUid_neUid +export const WS_GROUP_MME_NB = '1015'; +// 组号-告警 2000_coreUid_neUid +export const WS_GROUP_ALARM = '2000'; +// 组号-告警事件 2002_coreUid_neUid +export const WS_GROUP_ALARM_EVENT = '2002'; diff --git a/src/i18n/locales/en-US.ts b/src/i18n/locales/en-US.ts index 3373aca9..b6960591 100644 --- a/src/i18n/locales/en-US.ts +++ b/src/i18n/locales/en-US.ts @@ -818,7 +818,7 @@ export default { checkDel:'Check Delete', importTemplate: 'Download Template', }, - udmVOIP: { + udmVoIP: { startUsername: 'Starting username', username: 'username', usernamePlease: "Please enter your username correctly", @@ -957,21 +957,6 @@ export default { smDataTip:'The IP in sm_data=1-000001&internet-1.2.3.4&ims-1.2.3.5: 1.2.3.4 is the static IP assigned to the APN of 5G user internet, and 1.2.3.5 is the static IP assigned to the APN of 5G user ims. If it is dynamic allocation, just remove the IP and the previous connector. Need to support multiple dnn uses & connections', smDataArrTip:'SST,DNN/APN is required', }, - base5G: { - neType: 'NE Object', - }, - n3iwf: { - neType: 'N3IWF Object', - }, - ue: { - neType: 'SMF Object', - }, - ims: { - neType: 'IMS Object', - }, - nssf:{ - neType: 'NSSF Object', - }, }, perfManage: { taskManage:{ diff --git a/src/i18n/locales/zh-CN.ts b/src/i18n/locales/zh-CN.ts index d1f6b3f1..6a30a2a5 100644 --- a/src/i18n/locales/zh-CN.ts +++ b/src/i18n/locales/zh-CN.ts @@ -818,7 +818,7 @@ export default { checkDel:'勾选删除', importTemplate: '导入模板', }, - udmVOIP: { + udmVoIP: { startUsername: '起始用户名', username: '用户名', usernamePlease: "请正确输入用户名", @@ -957,21 +957,6 @@ export default { smDataTip:'sm_data=1-000001&internet-1.2.3.4&ims-1.2.3.5中的IP:1.2.3.4为5G用户internet这个APN分配的静态IP,1.2.3.5为5G用户ims这个APN分配的静态IP。如果是动态分配,把IP以及前面一个连接符去掉即可。需支持多个dnn用&连接', smDataArrTip:'SST,DNN/APN为必填项', }, - base5G: { - neType: '网元对象', - }, - n3iwf: { - neType: 'N3IWF网元对象', - }, - ue: { - neType: 'SMF网元对象', - }, - ims: { - neType: 'IMS网元对象', - }, - nssf:{ - neType: 'NSSF网元对象', - }, }, perfManage: { taskManage:{ diff --git a/src/views/mml/ne/index.vue b/src/views/mml/ne/index.vue index ddaef43b..58965de2 100644 --- a/src/views/mml/ne/index.vue +++ b/src/views/mml/ne/index.vue @@ -7,9 +7,10 @@ import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import useNeStore from '@/store/modules/ne'; import { regExpIPv4, regExpIPv6 } from '@/utils/regular-utils'; import useI18n from '@/hooks/useI18n'; -import { getMMLByNE, sendMMlByNE } from '@/api/mmlManage/neOperate'; +import { getMMLByNE, sendMML } from '@/api/mmlManage/neOperate'; import { uploadFileToNE } from '@/api/tool/file'; import { UploadRequestOption } from 'ant-design-vue/es/vc-upload/interface'; +import { currentCoreUid } from '@/hooks/useCoreUid'; const neStore = useNeStore(); const { t } = useI18n(); @@ -177,8 +178,14 @@ function fnSendMML() { // 发送 state.from.sendLoading = true; - const [neType, neId] = state.neType; - sendMMlByNE(neType, neId, objectType, cmdArr) + const [neType, neUid] = state.neType; + sendMML({ + coreUid: currentCoreUid(), + neUid: neUid, + neType: neType, + type: objectType, + command: cmdArr, + }) .then(res => { state.from.sendLoading = false; if (res.code === RESULT_CODE_SUCCESS) { @@ -210,8 +217,8 @@ function fnUpload(up: UploadRequestOption, name: string) { onOk() { const hide = message.loading(t('common.loading'), 0); state.from.uploadLoading = true; - const [neType, neId] = state.neType; - uploadFileToNE(neType, neId, up.file as File, 5) + const [neType, neUid] = state.neType; + uploadFileToNE(neType, neUid, currentCoreUid(), up.file as File, 5) .then(res => { // 文件转存 if (res.code === RESULT_CODE_SUCCESS) { @@ -459,6 +466,9 @@ function fnAutoCompleteSearch(value: string) { /**自动完成搜索选择 */ function fnAutoCompleteSelect(_: any, option: any) { + if (Object.keys(option).length === 0) { + return; + } state.mmlSelect = { title: option.value, key: option.key, @@ -510,7 +520,7 @@ function fnAutoCompleteChange(value: any, _: any) { key: '', operation: '', object: '', - objectType: state.mmlSelect.objectType, + objectType: 'General', param: [], }; } @@ -518,16 +528,16 @@ function fnAutoCompleteChange(value: any, _: any) { } /**自动完成按键触发 */ -function fnAutoCompleteKeydown(evt: any) { +function fnAutoCompleteKeydown(evt: KeyboardEvent) { if (evt.key === 'Enter') { // 阻止默认的换行行为 evt.preventDefault(); // 按下 Shift + Enter 键时换行 - if (evt.shiftKey) { + if (evt.shiftKey && evt.target) { // 插入换行符 - const textarea = evt.target; - const start = textarea.selectionStart; - const end = textarea.selectionEnd; + const textarea = evt.target as HTMLInputElement; + const start = textarea.selectionStart || 0; + const end = textarea.selectionEnd || 0; const text = textarea.value; textarea.value = text.substring(0, start) + '\n' + text.substring(end); state.autoCompleteValue = textarea.value; @@ -541,11 +551,9 @@ function fnAutoCompleteKeydown(evt: any) { onMounted(() => { // 获取网元网元列表 - neCascaderOptions.value = neStore.getNeCascaderOptions.filter( - (item: any) => { - return !['OMC', 'CBC', 'SGWC'].includes(item.value); // 过滤不可用的网元 - } - ); + neCascaderOptions.value = neStore.getNeCascaderOptions.filter((item: any) => { + return !['OMC', 'CBC', 'SGWC'].includes(item.value); // 过滤不可用的网元 + }); if (neCascaderOptions.value.length === 0) { message.warning({ content: t('common.noData'), @@ -557,10 +565,10 @@ onMounted(() => { const item = neCascaderOptions.value.find(s => s.value === 'AMF'); if (item && item.children) { const info = item.children[0]; - state.neType = [info.neType, info.neId]; + state.neType = [info.neType, info.neUid]; } else { const info = neCascaderOptions.value[0].children[0]; - state.neType = [info.neType, info.neId]; + state.neType = [info.neType, info.neUid]; } // 列表 diff --git a/src/views/mml/omc/index.vue b/src/views/mml/omc/index.vue index 55d44edc..71ce517f 100644 --- a/src/views/mml/omc/index.vue +++ b/src/views/mml/omc/index.vue @@ -10,6 +10,7 @@ import useI18n from '@/hooks/useI18n'; import { getMMLByOMC, sendMMlByOMC } from '@/api/mmlManage/omcOperate'; import { uploadFileToNE } from '@/api/tool/file'; import { UploadRequestOption } from 'ant-design-vue/es/vc-upload/interface'; +import { currentCoreUid } from '@/hooks/useCoreUid'; const { t } = useI18n(); const neStore = useNeStore(); /**网元参数 */ @@ -18,7 +19,7 @@ let neOptions = ref[]>([]); /**对象信息状态类型 */ type StateType = { /**网元ID */ - neId: string | undefined; + neUid: string | undefined; /**命令数据 tree */ mmlTreeData: any[]; /**命令选中 */ @@ -37,7 +38,7 @@ type StateType = { /**对象信息状态 */ let state: StateType = reactive({ - neId: undefined, + neUid: undefined, mmlTreeData: [], mmlSelect: { title: '', @@ -108,7 +109,7 @@ function fnSendMML() { if (state.from.sendLoading) { return; } - if (!state.neId) { + if (!state.neUid) { message.warning({ content: t('views.mmlManage.udmOpesrate.noOMC'), duration: 5, @@ -177,7 +178,7 @@ function fnSendMML() { // 发送 state.from.sendLoading = true; - sendMMlByOMC(state.neId, cmdArr) + sendMMlByOMC(state.neUid, cmdArr) .then(res => { state.from.sendLoading = false; if (res.code === RESULT_CODE_SUCCESS) { @@ -203,8 +204,8 @@ function fnSendMML() { /**上传变更 */ function fnUpload(up: UploadRequestOption, name: string) { - const neId = state.neId; - if (!neId) { + const neUid = state.neUid; + if (!neUid) { message.warning({ content: t('views.mmlManage.udmOpesrate.noOMC'), duration: 5, @@ -217,7 +218,7 @@ function fnUpload(up: UploadRequestOption, name: string) { onOk() { const hide = message.loading(t('common.loading'), 0); state.from.uploadLoading = true; - uploadFileToNE('OMC', neId, up.file as File, 5) + uploadFileToNE('OMC', neUid, currentCoreUid(), up.file as File, 5) .then(res => { // 文件转存 if (res.code === RESULT_CODE_SUCCESS) { @@ -518,7 +519,7 @@ onMounted(() => { return; } if (neOptions.value.length > 0) { - state.neId = neOptions.value[0].value; + state.neUid = neOptions.value[0].value; } // 获取列表数据 @@ -537,9 +538,9 @@ onMounted(() => { :title="t('views.mmlManage.cmdTitle')" > - + diff --git a/src/views/mml/udm/index.vue b/src/views/mml/udm/index.vue index 061ea93e..f277afad 100644 --- a/src/views/mml/udm/index.vue +++ b/src/views/mml/udm/index.vue @@ -7,9 +7,10 @@ import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import useNeStore from '@/store/modules/ne'; import { regExpIPv4, regExpIPv6 } from '@/utils/regular-utils'; import useI18n from '@/hooks/useI18n'; -import { getMMLByUDM, sendMMlByUDM } from '@/api/mmlManage/udmOperate'; +import { getMMLByUDM, sendMMlByGeneral } from '@/api/mmlManage/neOperate'; import { UploadRequestOption } from 'ant-design-vue/es/vc-upload/interface'; import { uploadFileToNE } from '@/api/tool/file'; +import { currentCoreUid } from '@/hooks/useCoreUid'; const { t } = useI18n(); const neStore = useNeStore(); /**网元参数 */ @@ -18,7 +19,7 @@ let neOptions = ref[]>([]); /**对象信息状态类型 */ type StateType = { /**网元ID */ - neId: string | undefined; + neUid: string | undefined; /**命令数据 tree */ mmlTreeData: any[]; /**命令选中 */ @@ -37,7 +38,7 @@ type StateType = { /**对象信息状态 */ let state: StateType = reactive({ - neId: undefined, + neUid: undefined, mmlTreeData: [], mmlSelect: { title: '', @@ -108,7 +109,7 @@ function fnSendMML() { if (state.from.sendLoading) { return; } - if (!state.neId) { + if (!state.neUid) { message.warning({ content: t('views.mmlManage.udmOpesrate.noUDM'), duration: 5, @@ -177,7 +178,7 @@ function fnSendMML() { // 发送 state.from.sendLoading = true; - sendMMlByUDM(state.neId, cmdArr) + sendMMlByGeneral(currentCoreUid(), state.neUid, cmdArr) .then(res => { state.from.sendLoading = false; if (res.code === RESULT_CODE_SUCCESS) { @@ -203,8 +204,8 @@ function fnSendMML() { /**上传变更 */ function fnUpload(up: UploadRequestOption, name: string) { - const neId = state.neId; - if (!neId) { + const neUid = state.neUid; + if (!neUid) { message.warning({ content: t('views.mmlManage.udmOpesrate.noUDM'), duration: 5, @@ -217,7 +218,7 @@ function fnUpload(up: UploadRequestOption, name: string) { onOk() { const hide = message.loading(t('common.loading'), 0); state.from.uploadLoading = true; - uploadFileToNE('UDM', neId, up.file as File, 5) + uploadFileToNE('UDM', neUid, currentCoreUid(), up.file as File, 5) .then(res => { // 文件转存 if (res.code === RESULT_CODE_SUCCESS) { @@ -425,6 +426,9 @@ function fnAutoCompleteSearch(value: string) { /**自动完成搜索选择 */ function fnAutoCompleteSelect(_: any, option: any) { + if (Object.keys(option).length === 0) { + return; + } state.mmlSelect = { title: option.value, key: option.key, @@ -518,7 +522,7 @@ onMounted(() => { return; } if (neOptions.value.length > 0) { - state.neId = neOptions.value[0].value; + state.neUid = neOptions.value[0].value; } // 获取列表数据 @@ -537,9 +541,9 @@ onMounted(() => { :title="t('views.mmlManage.cmdTitle')" > - + diff --git a/src/views/monitor/overview/components/Topology/index.vue b/src/views/monitor/overview/components/Topology/index.vue index 1a7bae78..2c6e50ed 100644 --- a/src/views/monitor/overview/components/Topology/index.vue +++ b/src/views/monitor/overview/components/Topology/index.vue @@ -53,11 +53,11 @@ const graphNodeTooltip = new Tooltip({ ${neState.refreshTime ?? '--'}
========================
-
ID:${neState.neId}
+
ID:${neState.neUid}
${t('views.monitor.topology.name')}: ${neState.neName ?? '--'}
-
IP:${neState.neIP}
+
IP:${neState.ipAddr}
${t('views.monitor.topology.version')}: ${neState.version ?? '--'}
diff --git a/src/views/monitor/overview/components/UPFFlow/index.vue b/src/views/monitor/overview/components/UPFFlow/index.vue index c635fa8c..b31c6426 100644 --- a/src/views/monitor/overview/components/UPFFlow/index.vue +++ b/src/views/monitor/overview/components/UPFFlow/index.vue @@ -16,7 +16,8 @@ import { CanvasRenderer } from 'echarts/renderers'; import { markRaw } from 'vue'; import useI18n from '@/hooks/useI18n'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; -import { upfFlowData, upfFlowParse } from '../../hooks/useUPFTotalFlow'; +import { upfNeUId, upfFlowData, upfFlowParse } from '../../hooks/useUPFTotalFlow'; +import { currentCoreUid } from '@/hooks/useCoreUid'; const { t } = useI18n(); @@ -206,8 +207,9 @@ function fnGetInitData() { const nowDate = new Date().getTime(); listKPIData({ + coreUid: currentCoreUid(), + neUid: upfNeUId.value, neType: 'UPF', - neId: '001', beginTime: nowDate - 5 * 60 * 1000, endTime: nowDate, interval: 5, // 5秒 @@ -250,7 +252,9 @@ watch( ); onMounted(() => { - fnGetInitData(); + setTimeout(() => { + fnGetInitData(); + }, 1000); }); diff --git a/src/views/monitor/overview/hooks/useTopology.ts b/src/views/monitor/overview/hooks/useTopology.ts index 64c01c68..afb4d8ae 100644 --- a/src/views/monitor/overview/hooks/useTopology.ts +++ b/src/views/monitor/overview/hooks/useTopology.ts @@ -52,8 +52,8 @@ export const graphNodeStateNum = computed(() => { let normal = 0; let abnormal = 0; for (const item of graphState.data.nodes) { - const neId = item.neState.neId; - if (neId) { + const neUid = item.neState.neUid; + if (neUid) { if (item.neState.online) { normal += 1; } else { diff --git a/src/views/monitor/overview/hooks/useUPFTotalFlow.ts b/src/views/monitor/overview/hooks/useUPFTotalFlow.ts index 16c3f6d2..9b5cb6d7 100644 --- a/src/views/monitor/overview/hooks/useUPFTotalFlow.ts +++ b/src/views/monitor/overview/hooks/useUPFTotalFlow.ts @@ -2,6 +2,9 @@ import { parseDateToStr } from '@/utils/date-utils'; import { parseSizeFromByte, parseSizeFromKbs } from '@/utils/parse-utils'; import { ref } from 'vue'; +/**当前选的upf的neUid */ +export const upfNeUId = ref(''); + type FDType = { /**时间 */ lineXTime: string[]; diff --git a/src/views/monitor/overview/hooks/useUserActivity.ts b/src/views/monitor/overview/hooks/useUserActivity.ts index 8c4a80b1..59c64a21 100644 --- a/src/views/monitor/overview/hooks/useUserActivity.ts +++ b/src/views/monitor/overview/hooks/useUserActivity.ts @@ -1,5 +1,12 @@ import { ref } from 'vue'; +/**当前选的事件的neUid */ +export const eventNeUid = ref>({ + AMF: '', + MME: '', + IMS: '', +}); + /**ueEventAMFParse UE会话事件AMF 数据解析 */ function ueEventAMFParse( item: Record diff --git a/src/views/monitor/overview/hooks/useWS.ts b/src/views/monitor/overview/hooks/useWS.ts index b91da409..fa5d324d 100644 --- a/src/views/monitor/overview/hooks/useWS.ts +++ b/src/views/monitor/overview/hooks/useWS.ts @@ -1,13 +1,15 @@ import { RESULT_CODE_ERROR } from '@/constants/result-constants'; import { OptionsType, WS } from '@/plugins/ws-websocket'; -import { onBeforeUnmount, ref } from 'vue'; +import { onBeforeUnmount } from 'vue'; import { eventData, eventListParse, eventItemParseAndPush, userActivityReset, + eventNeUid, } from './useUserActivity'; import { + upfNeUId, upfTotalFlow, upfTFParse, upfFlowParse, @@ -15,9 +17,13 @@ import { } from './useUPFTotalFlow'; import { topologyReset, neStateParse, neStateRequestMap } from './useTopology'; import PQueue from 'p-queue'; - -/**UPF-的Id */ -export const upfWhoId = ref(''); +import { + WS_GROUP_AMF_UE, + WS_GROUP_IMS_CDR, + WS_GROUP_KPI, + WS_GROUP_MME_UE, +} from '@/constants/ne-constants'; +import { currentCoreUid } from '@/hooks/useCoreUid'; /**websocket连接 */ export default function useWS() { @@ -39,10 +45,11 @@ export default function useWS() { } // 网元状态 if (requestId && requestId.startsWith('neState')) { - const neType = requestId.split('_')[1]; + const neType = requestId.split('_')[3]; neStateParse(neType, data); return; } + const coreUid = currentCoreUid(); // 普通信息 switch (requestId) { @@ -68,13 +75,13 @@ export default function useWS() { } break; //UPF-总流量数 - case `upf_${upfWhoId.value}_0`: + case `upf_${upfNeUId.value}_0`: upfTFParse('0', data); break; - case `upf_${upfWhoId.value}_7`: + case `upf_${upfNeUId.value}_7`: upfTFParse('7', data); break; - case `upf_${upfWhoId.value}_30`: + case `upf_${upfNeUId.value}_30`: upfTFParse('30', data); break; } @@ -84,25 +91,25 @@ export default function useWS() { } switch (data.groupId) { // kpiEvent 指标UPF - case `10_UPF_${upfWhoId.value}`: + case `${WS_GROUP_KPI}_${coreUid}_${upfNeUId.value}`: if (data.data) { upfFlowParse(data.data); } break; // AMF_UE会话事件 - case '1010_001': + case `${WS_GROUP_AMF_UE}_${coreUid}_${eventNeUid.value.AMF}`: if (data.data) { queue.add(() => eventItemParseAndPush('amf_ue', data.data)); } break; // MME_UE会话事件 - case '1011_001': + case `${WS_GROUP_MME_UE}_${coreUid}_${eventNeUid.value.MME}`: if (data.data) { queue.add(() => eventItemParseAndPush('mme_ue', data.data)); } break; // IMS_CDR会话事件 - case '1005_001': + case `${WS_GROUP_IMS_CDR}_${coreUid}_${eventNeUid.value.IMS}`: if (data.data) { queue.add(() => eventItemParseAndPush('ims_cdr', data.data)); } @@ -117,13 +124,13 @@ export default function useWS() { return; } upfTotalFlow.value[day].requestFlag = true; - ws.send({ - requestId: `upf_${upfWhoId.value}_${day}`, + requestId: `upf_${upfNeUId.value}_${day}`, type: 'upf_tf', data: { + coreUid: currentCoreUid(), + neUid: upfNeUId.value, neType: 'UPF', - neId: upfWhoId.value, day: Number(day), }, }); @@ -136,8 +143,9 @@ export default function useWS() { requestId: 'amf_1010_001', type: 'amf_ue', data: { + coreUid: currentCoreUid(), + neUid: eventNeUid.value.AMF, neType: 'AMF', - neId: '001', sortField: 'timestamp', sortOrder: 'desc', pageNum: 1, @@ -149,8 +157,9 @@ export default function useWS() { requestId: 'mme_1011_001', type: 'mme_ue', data: { + coreUid: currentCoreUid(), + neUid: eventNeUid.value.MME, neType: 'MME', - neId: '001', sortField: 'timestamp', sortOrder: 'desc', pageNum: 1, @@ -162,8 +171,9 @@ export default function useWS() { requestId: 'ims_1005_001', type: 'ims_cdr', data: { + coreUid: currentCoreUid(), + neUid: eventNeUid.value.IMS, neType: 'IMS', - neId: '001', recordType: 'MOC', sortField: 'timestamp', sortOrder: 'desc', @@ -174,8 +184,7 @@ export default function useWS() { } /**重新发送至UPF 10_UPF_neId */ - function reSendUPF(neId: string) { - upfWhoId.value = neId; + function reSendUPF() { //初始时时无需还原全部属性以及关闭 if (ws.state() === WebSocket.OPEN) { ws.close(); @@ -184,6 +193,14 @@ export default function useWS() { neStateRequestMap.value = new Map(); //topologyReset(); } + const coreUid = currentCoreUid(); + let subGroupIDArr: string[] = []; + subGroupIDArr.push(`${WS_GROUP_KPI}_${coreUid}_${upfNeUId.value}`); + subGroupIDArr.push(`${WS_GROUP_AMF_UE}_${coreUid}_${eventNeUid.value.AMF}`); + subGroupIDArr.push(`${WS_GROUP_MME_UE}_${coreUid}_${eventNeUid.value.MME}`); + subGroupIDArr.push( + `${WS_GROUP_IMS_CDR}_${coreUid}_${eventNeUid.value.IMS}` + ); const options: OptionsType = { url: '/ws', params: { @@ -194,7 +211,7 @@ export default function useWS() { * MME_UE会话事件(GroupID:1011_neId) * IMS_CDR会话事件(GroupID:1005_neId) */ - subGroupID: `10_UPF_${neId},1010_001,1011_001,1005_001`, + subGroupID: subGroupIDArr.join(','), }, onmessage: wsMessage, onerror: (ev: any) => { @@ -209,7 +226,7 @@ export default function useWS() { userActivityReset(); upfTotalFlowReset(); topologyReset(); - upfWhoId.value = ''; + upfNeUId.value = ''; }); return { diff --git a/src/views/monitor/overview/index.vue b/src/views/monitor/overview/index.vue index 3d83af61..bb85ab34 100644 --- a/src/views/monitor/overview/index.vue +++ b/src/views/monitor/overview/index.vue @@ -21,7 +21,7 @@ import { graphNodeStateNum, neStateRequestMap, } from './hooks/useTopology'; -import { upfTotalFlow, upfTFActive } from './hooks/useUPFTotalFlow'; +import { upfNeUId, upfTotalFlow, upfTFActive } from './hooks/useUPFTotalFlow'; import { useFullscreen } from '@vueuse/core'; import useWS from './hooks/useWS'; import useAppStore from '@/store/modules/app'; @@ -29,7 +29,8 @@ import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import { useRouter } from 'vue-router'; import useNeStore from '@/store/modules/ne'; import { message } from 'ant-design-vue'; -import { upfWhoId } from './hooks/useWS'; +import { currentCoreUid } from '@/hooks/useCoreUid'; +import { eventNeUid } from './hooks/useUserActivity'; const router = useRouter(); const appStore = useAppStore(); @@ -84,18 +85,19 @@ function fnGetNeState() { // 获取节点状态 for (const node of graphState.data.nodes) { if (notNeNodes.includes(node.id)) continue; - const { neType, neId } = node.neInfo; - if (!neType || !neId) continue; + const { neType, coreUid, neUid } = node.neInfo; + if (!neType || !neUid) continue; // 请求标记检查避免重复发送 if (neStateRequestMap.value.get(neType)) continue; neStateRequestMap.value.set(neType, true); wsSend({ - requestId: `neState_${neType}_${neId}`, + requestId: `neState_${coreUid}_${neUid}_${neType}`, type: 'ne_state', data: { + coreUid: coreUid, neType: neType, - neId: neId, + neUid: neUid, }, }); } @@ -107,8 +109,8 @@ async function fnGetSkim() { // [ // 'UDM', // { - // request: (neId: string) => - // listUDMSub({ neId: neId, pageNum: 1, pageSize: 1 }), + // request: (coreUid: string, neUid: string) => + // listUDMSub({ coreUid, neUid, pageNum: 1, pageSize: 1 }), // process: (res: any) => // res.code === RESULT_CODE_SUCCESS && // (skimState.udmSubNum += res.data.total), @@ -117,7 +119,10 @@ async function fnGetSkim() { [ 'SMF', { - request: (neId: string) => listSMFSubNum(neId), + request: (coreUid: string, neUid: string) => { + eventNeUid.value.SMF = neUid; + return listSMFSubNum(coreUid, neUid); + }, process: (res: any) => { if ( res.code === RESULT_CODE_SUCCESS && @@ -131,7 +136,10 @@ async function fnGetSkim() { [ 'IMS', { - request: (neId: string) => listIMSSessionNum(neId), + request: (coreUid: string, neUid: string) => { + eventNeUid.value.IMS = neUid; + return listIMSSessionNum(coreUid, neUid); + }, process: (res: any) => { if ( res.code === RESULT_CODE_SUCCESS && @@ -145,7 +153,10 @@ async function fnGetSkim() { [ 'AMF', { - request: (neId: string) => listAMFNblist({ neId }), + request: (coreUid: string, neUid: string) => { + eventNeUid.value.AMF = neUid; + return listAMFNblist({ coreUid, neUid }); + }, process: (res: any) => { if (res.code === RESULT_CODE_SUCCESS && Array.isArray(res.data)) { skimState.gnbNum += res.data.length; @@ -160,7 +171,10 @@ async function fnGetSkim() { [ 'MME', { - request: (neId: string) => listMMENblist({ neId }), + request: (coreUid: string, neUid: string) => { + eventNeUid.value.MME = neUid; + return listMMENblist({ coreUid, neUid }); + }, process: (res: any) => { if (res.code === RESULT_CODE_SUCCESS && Array.isArray(res.data)) { skimState.enbNum += res.data.length; @@ -181,7 +195,7 @@ async function fnGetSkim() { const handler = neHandlers.get(child.neType); return handler ? { - promise: handler.request(child.neId), + promise: handler.request(child.coreUid, child.neUid), process: handler.process, } : null; @@ -210,7 +224,12 @@ async function fnGetSkim() { }); // UDM - listUDMSub({ neId: udmNeId.value, pageNum: 1, pageSize: 1 }).then(res => { + listUDMSub({ + coreUid: currentCoreUid(), + neUid: udmNeUid.value, + pageNum: 1, + pageSize: 1, + }).then(res => { if (res.code === RESULT_CODE_SUCCESS) { skimState.udmSubNum = res.data.total; } @@ -254,12 +273,12 @@ function fnToRouter(name: string, query?: any) { } /**网元参数 */ -let neOtions = ref[]>([]); +let upfOtions = ref[]>([]); // UPF实时流量下拉框选择 function fnSelectNe(value: any, option: any) { - upfWhoId.value = value; - reSendUPF(value); + upfNeUId.value = value; + reSendUPF(); // upfTotalFlow.value.map((item: any) => { // item.requestFlag = false; // }); @@ -270,12 +289,17 @@ function fnSelectNe(value: any, option: any) { // loadData(); } -let udmNeId = ref('001'); +let udmNeUid = ref(''); let udmOtions = ref[]>([]); /**用户数量-选择UDM */ function fnSelectUDM(e: any) { - udmNeId.value = e.key; - listUDMSub({ neId: udmNeId.value, pageNum: 1, pageSize: 1 }).then(res => { + udmNeUid.value = e.key; + listUDMSub({ + coreUid: currentCoreUid(), + neUid: e.key, + pageNum: 1, + pageSize: 1, + }).then(res => { if (res.code === RESULT_CODE_SUCCESS) { skimState.udmSubNum = res.data.total; } @@ -294,14 +318,14 @@ onMounted(() => { // 获取网元网元列表 neStore.neCascaderOptions.forEach(item => { if (item.value === 'UPF') { - neOtions.value = JSON.parse(JSON.stringify(item.children)); + upfOtions.value = JSON.parse(JSON.stringify(item.children)); } if (item.value === 'UDM') { udmOtions.value = JSON.parse(JSON.stringify(item.children)); } }); - if (neOtions.value.length > 0) { - fnSelectNe(neOtions.value[0].value, neOtions.value[0]); + if (upfOtions.value.length > 0) { + fnSelectNe(upfOtions.value[0].value, upfOtions.value[0]); } if (udmOtions.value.length > 0) { fnSelectUDM({ key: udmOtions.value[0].value }); @@ -382,7 +406,7 @@ onBeforeUnmount(() => { {{ v.label }} @@ -535,8 +559,8 @@ onBeforeUnmount(() => { t('views.dashboard.overview.upfFlow.title') }} ([ // function initPicture() { - Promise.allSettled([origGet(), top3Sel()]) + const coreUid = currentCoreUid() + Promise.allSettled([origGet(coreUid), top3Sel(coreUid)]) .then(resArr => { if (resArr[0].status === 'fulfilled') { const res0 = resArr[0].value; diff --git a/src/views/monitor/overview2/components/Topology/index.vue b/src/views/monitor/overview2/components/Topology/index.vue index 2d111865..3cf25046 100644 --- a/src/views/monitor/overview2/components/Topology/index.vue +++ b/src/views/monitor/overview2/components/Topology/index.vue @@ -61,11 +61,11 @@ const graphNodeTooltip = new Tooltip({ ${neState.refreshTime ?? '--'}
========================
-
ID:${neState.neId}
+
ID:${neState.neUid}
${t('views.monitor.topology.name')}: ${neState.neName ?? '--'}
-
IP:${neState.neIP ?? '--'}
+
IP:${neState.ipAddr ?? '--'}
${t('views.monitor.topology.version')}: ${neState.version ?? '--'}
@@ -104,15 +104,15 @@ const graphNodeTooltip = new Tooltip({ sameTypeNes.forEach((ne: any, index: number) => { // 获取该网元的状态信息 const neStateInfo = - neStateMap?.[ne.neId] || (ne.neId === neState.neId ? neState : {}); + neStateMap?.[ne.neUid] || (ne.neUid === neState.neUid ? neState : {}); content += `
${t( 'views.monitor.topology.name' - )}:${ne.neName || id + '_' + ne.neId}
-
ID:${ne.neId || '--'}
+ )}:${ne.neName || id + '_' + ne.neUid} +
ID:${ne.neUid || '--'}
IP:${ - neStateInfo.neIP || ne.neIP || '--' + neStateInfo.ipAddr || ne.ipAddr || '--' }
${t('views.monitor.topology.version')}: ${neStateInfo.version || ne.version || '--'} diff --git a/src/views/monitor/overview2/components/UPFFlow/index.vue b/src/views/monitor/overview2/components/UPFFlow/index.vue index 482aff9d..b628c1d7 100644 --- a/src/views/monitor/overview2/components/UPFFlow/index.vue +++ b/src/views/monitor/overview2/components/UPFFlow/index.vue @@ -16,8 +16,12 @@ import { CanvasRenderer } from 'echarts/renderers'; import { markRaw } from 'vue'; import useI18n from '@/hooks/useI18n'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; -import { upfFlowData, upfFlowParse } from '../../hooks/useUPFTotalFlow'; -import { upfWhoId } from '../../hooks/useWS'; +import { + upfNeUId, + upfFlowData, + upfFlowParse, +} from '../../hooks/useUPFTotalFlow'; +import { currentCoreUid } from '@/hooks/useCoreUid'; const { t } = useI18n(); @@ -207,8 +211,9 @@ function fnGetInitData() { const nowDate = new Date().getTime(); listKPIData({ + coreUid: currentCoreUid(), + neUid: upfNeUId.value, neType: 'UPF', - neId: '001', beginTime: nowDate - 5 * 60 * 1000, endTime: nowDate, interval: 5, // 5秒 @@ -251,7 +256,9 @@ watch( ); onMounted(() => { - fnGetInitData(); + setTimeout(() => { + fnGetInitData(); + }, 1000); // setInterval(() => { // upfFlowData.value.lineXTime.push(parseDateToStr(new Date())); diff --git a/src/views/monitor/overview2/hooks/useTopology.ts b/src/views/monitor/overview2/hooks/useTopology.ts index ff83a840..30107850 100644 --- a/src/views/monitor/overview2/hooks/useTopology.ts +++ b/src/views/monitor/overview2/hooks/useTopology.ts @@ -56,8 +56,8 @@ export const graphNodeStateNum = computed(() => { let normal = 0; let abnormal = 0; for (const item of graphState.data.nodes) { - const neId = item.neState.neId; - if (neId) { + const neUid = item.neState.neUid; + if (neUid) { if (item.neState.online) { normal += 1; } else { @@ -72,8 +72,8 @@ export const graphNodeStateNum = computed(() => { export const neStateRequestMap = ref>(new Map()); /**neStateParse 网元状态 数据解析 */ -export function neStateParse(neType: string, data: Record,neId: string) { - // console.log('neStateParse',neType, data, neId); +export function neStateParse(neType: string, data: Record,neUid: string) { + // console.log('neStateParse',neType, data, neUid); const { combos, edges, nodes } = graphState.data; @@ -90,16 +90,16 @@ export function neStateParse(neType: string, data: Record,neId: str ...data, // 先展开data对象 refreshTime: parseDateToStr(data.refreshTime, 'HH:mm:ss'), online: !!data.cpu, - neId: neId + neUid: neUid }; // 如果是001,更新节点状态。neInfo为主要的网元信息 - if (node.neInfo && node.neInfo.neId === neId) { + if (node.neInfo && node.neInfo.neUid === neUid) { Object.assign(node.neState, newNeState); } //console.log(node.neState) // 无论是否为主要网元,都更新状态映射 - node.neStateMap[neId] = {...newNeState}; + node.neStateMap[neUid] = {...newNeState}; // 通过 ID 查询节点实例 const item = graphG6.value.findById(node.id); if (item) { diff --git a/src/views/monitor/overview2/hooks/useUPFTotalFlow.ts b/src/views/monitor/overview2/hooks/useUPFTotalFlow.ts index c90af755..9b5cb6d7 100644 --- a/src/views/monitor/overview2/hooks/useUPFTotalFlow.ts +++ b/src/views/monitor/overview2/hooks/useUPFTotalFlow.ts @@ -2,6 +2,9 @@ import { parseDateToStr } from '@/utils/date-utils'; import { parseSizeFromByte, parseSizeFromKbs } from '@/utils/parse-utils'; import { ref } from 'vue'; +/**当前选的upf的neUid */ +export const upfNeUId = ref(''); + type FDType = { /**时间 */ lineXTime: string[]; @@ -23,7 +26,9 @@ export const upfFlowData = ref({ /**UPF-流量数据 数据解析 */ export function upfFlowParse(data: Record) { - upfFlowData.value.lineXTime.push(parseDateToStr(+data['timeGroup'], 'HH:mm:ss')); + upfFlowData.value.lineXTime.push( + parseDateToStr(+data['timeGroup'], 'HH:mm:ss') + ); const upN3 = parseSizeFromKbs(+data['UPF.03'], 5); upfFlowData.value.lineYUp.push(upN3[0]); const downN6 = parseSizeFromKbs(+data['UPF.06'], 5); diff --git a/src/views/monitor/overview2/hooks/useUserActivity.ts b/src/views/monitor/overview2/hooks/useUserActivity.ts index 76ffd23e..69222e46 100644 --- a/src/views/monitor/overview2/hooks/useUserActivity.ts +++ b/src/views/monitor/overview2/hooks/useUserActivity.ts @@ -1,5 +1,12 @@ import { ref } from 'vue'; +/**当前选的事件的neUid */ +export const eventNeUid = ref>({ + AMF: '', + MME: '', + IMS: '', +}); + /**ueEventAMFParse UE会话事件AMF 数据解析 */ function ueEventAMFParse( item: Record diff --git a/src/views/monitor/overview2/hooks/useWS.ts b/src/views/monitor/overview2/hooks/useWS.ts index c926e44f..2fe3c8a1 100644 --- a/src/views/monitor/overview2/hooks/useWS.ts +++ b/src/views/monitor/overview2/hooks/useWS.ts @@ -6,18 +6,24 @@ import { eventListParse, eventItemParseAndPush, userActivityReset, + eventNeUid, } from './useUserActivity'; import { upfTotalFlow, upfTFParse, upfFlowParse, upfTotalFlowReset, + upfNeUId, } from './useUPFTotalFlow'; import { topologyReset, neStateParse, neStateRequestMap } from './useTopology'; import PQueue from 'p-queue'; - -/**UPF-的Id */ -export const upfWhoId = ref(''); +import { + WS_GROUP_KPI, + WS_GROUP_AMF_UE, + WS_GROUP_MME_UE, + WS_GROUP_IMS_CDR, +} from '@/constants/ne-constants'; +import { currentCoreUid } from '@/hooks/useCoreUid'; /**websocket连接 */ export default function useWS() { @@ -39,11 +45,12 @@ export default function useWS() { } // 网元状态 if (requestId && requestId.startsWith('neState')) { - const neType = requestId.split('_')[1]; - const neId = requestId.split('_')[2]; - neStateParse(neType, data,neId); + const neType = requestId.split('_')[3]; + const neUid = requestId.split('_')[2]; + neStateParse(neType, data, neUid); return; } + const coreUid = currentCoreUid(); // 普通信息 switch (requestId) { @@ -69,13 +76,13 @@ export default function useWS() { } break; //UPF-总流量数 - case `upf_${upfWhoId.value}_0`: + case `upf_${upfNeUId.value}_0`: upfTFParse('0', data); break; - case `upf_${upfWhoId.value}_7`: + case `upf_${upfNeUId.value}_7`: upfTFParse('7', data); break; - case `upf_${upfWhoId.value}_30`: + case `upf_${upfNeUId.value}_30`: upfTFParse('30', data); break; } @@ -85,25 +92,25 @@ export default function useWS() { } switch (data.groupId) { // kpiEvent 指标UPF - case `10_UPF_${upfWhoId.value}`: + case `${WS_GROUP_KPI}_${coreUid}_${upfNeUId.value}`: if (data.data) { upfFlowParse(data.data); } break; // AMF_UE会话事件 - case '1010_001': + case `${WS_GROUP_AMF_UE}_${coreUid}_${eventNeUid.value.AMF}`: if (data.data) { queue.add(() => eventItemParseAndPush('amf_ue', data.data)); } break; // MME_UE会话事件 - case '1011_001': + case `${WS_GROUP_MME_UE}_${coreUid}_${eventNeUid.value.MME}`: if (data.data) { queue.add(() => eventItemParseAndPush('mme_ue', data.data)); } break; // IMS_CDR会话事件 - case '1005_001': + case `${WS_GROUP_IMS_CDR}_${coreUid}_${eventNeUid.value.IMS}`: if (data.data) { queue.add(() => eventItemParseAndPush('ims_cdr', data.data)); } @@ -120,11 +127,12 @@ export default function useWS() { upfTotalFlow.value[day].requestFlag = true; ws.send({ - requestId: `upf_${upfWhoId.value}_${day}`, + requestId: `upf_${upfNeUId.value}_${day}`, type: 'upf_tf', data: { + coreUid: currentCoreUid(), + neUid: upfNeUId.value, neType: 'UPF', - neId: upfWhoId.value, day: Number(day), }, }); @@ -137,8 +145,9 @@ export default function useWS() { requestId: 'amf_1010_001', type: 'amf_ue', data: { + coreUid: currentCoreUid(), + neUid: eventNeUid.value.AMF, neType: 'AMF', - neId: '001', sortField: 'timestamp', sortOrder: 'desc', pageNum: 1, @@ -150,8 +159,9 @@ export default function useWS() { requestId: 'mme_1011_001', type: 'mme_ue', data: { + coreUid: currentCoreUid(), + neUid: eventNeUid.value.MME, neType: 'MME', - neId: '001', sortField: 'timestamp', sortOrder: 'desc', pageNum: 1, @@ -163,8 +173,9 @@ export default function useWS() { requestId: 'ims_1005_001', type: 'ims_cdr', data: { + coreUid: currentCoreUid(), + neUid: eventNeUid.value.IMS, neType: 'IMS', - neId: '001', recordType: 'MOC', sortField: 'timestamp', sortOrder: 'desc', @@ -174,9 +185,8 @@ export default function useWS() { }); } - /**重新发送至UPF 10_UPF_neId */ - function reSendUPF(neId: string) { - upfWhoId.value = neId; + /**重新发送至UPF 10_UPF_neUid */ + function reSendUPF() { //初始时时无需还原全部属性以及关闭 if (ws.state() === WebSocket.OPEN) { ws.close(); @@ -185,17 +195,25 @@ export default function useWS() { neStateRequestMap.value = new Map(); //topologyReset(); } + const coreUid = currentCoreUid(); + let subGroupIDArr: string[] = []; + subGroupIDArr.push(`${WS_GROUP_KPI}_${coreUid}_${upfNeUId.value}`); + subGroupIDArr.push(`${WS_GROUP_AMF_UE}_${coreUid}_${eventNeUid.value.AMF}`); + subGroupIDArr.push(`${WS_GROUP_MME_UE}_${coreUid}_${eventNeUid.value.MME}`); + subGroupIDArr.push( + `${WS_GROUP_IMS_CDR}_${coreUid}_${eventNeUid.value.IMS}` + ); const options: OptionsType = { url: '/ws', params: { /**订阅通道组 * - * 指标UPF (GroupID:10_neType_neId) - * AMF_UE会话事件(GroupID:1010_neId) - * MME_UE会话事件(GroupID:1011_neId) - * IMS_CDR会话事件(GroupID:1005_neId) + * 指标UPF (GroupID:10_neType_neUid) + * AMF_UE会话事件(GroupID:1010_neUid) + * MME_UE会话事件(GroupID:1011_neUid) + * IMS_CDR会话事件(GroupID:1005_neUid) */ - subGroupID: `10_UPF_${neId},1010_001,1011_001,1005_001`, + subGroupID: subGroupIDArr.join(','), }, onmessage: wsMessage, onerror: (ev: any) => { @@ -210,7 +228,7 @@ export default function useWS() { userActivityReset(); upfTotalFlowReset(); topologyReset(); - upfWhoId.value = ''; + upfNeUId.value = ''; }); return { diff --git a/src/views/monitor/overview2/index.vue b/src/views/monitor/overview2/index.vue index 74aceca0..0d5352b5 100644 --- a/src/views/monitor/overview2/index.vue +++ b/src/views/monitor/overview2/index.vue @@ -16,14 +16,8 @@ import { listIMSSessionNum } from '@/api/neData/ims'; import { listAMFNblist } from '@/api/neData/amf'; import { listMMENblist } from '@/api/neData/mme'; -import { - graphNodeClickID, - graphState, - notNeNodes, - graphNodeStateNum, - neStateRequestMap, -} from './hooks/useTopology'; -import { upfTotalFlow, upfTFActive } from './hooks/useUPFTotalFlow'; +import { graphNodeClickID, graphState, notNeNodes } from './hooks/useTopology'; +import { upfNeUId, upfTotalFlow, upfTFActive } from './hooks/useUPFTotalFlow'; import { useFullscreen } from '@vueuse/core'; import useWS from './hooks/useWS'; import useAppStore from '@/store/modules/app'; @@ -31,9 +25,10 @@ import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import { useRouter } from 'vue-router'; import useNeStore from '@/store/modules/ne'; import { message } from 'ant-design-vue'; -import { upfWhoId } from './hooks/useWS'; import { listAMFNbStatelist } from '@/api/neData/amf'; import { listMMENbStatelist } from '@/api/neData/mme'; +import { eventNeUid } from './hooks/useUserActivity'; +import { currentCoreUid } from '@/hooks/useCoreUid'; const neStore = useNeStore(); const router = useRouter(); @@ -99,14 +94,15 @@ function fnGetNeState() { if (neInfoList.length === 0) continue; for (const neInfo of neInfoList) { - if (!neInfo.neType || !neInfo.neId) continue; + if (!neInfo.neType || !neInfo.neUid) continue; wsSend({ - requestId: `neState_${neInfo.neType}_${neInfo.neId}`, + requestId: `neState_${neInfo.coreUid}_${neInfo.neUid}_${neInfo.neType}`, type: 'ne_state', data: { + coreUid: neInfo.coreUid, neType: neInfo.neType, - neId: neInfo.neId, + neUid: neInfo.neUid, }, }); } @@ -131,7 +127,10 @@ async function fnGetSkim() { [ 'SMF', { - request: (neId: string) => listSMFSubNum(neId), + request: (coreUid: string, neUid: string) => { + eventNeUid.value.SMF = neUid; + return listSMFSubNum(coreUid, neUid); + }, process: (res: any) => { if ( res.code === RESULT_CODE_SUCCESS && @@ -145,7 +144,10 @@ async function fnGetSkim() { [ 'IMS', { - request: (neId: string) => listIMSSessionNum(neId), + request: (coreUid: string, neUid: string) => { + eventNeUid.value.IMS = neUid; + return listIMSSessionNum(coreUid, neUid); + }, process: (res: any) => { if ( res.code === RESULT_CODE_SUCCESS && @@ -174,17 +176,18 @@ async function fnGetSkim() { [ 'AMF', { - request: (neId: string) => listAMFNblist({ neId }), - process: async (res: any, neId: any) => { - console.log(neId); + request: (coreUid: string, neUid: string) => { + eventNeUid.value.AMF = neUid; + return listAMFNblist({ coreUid, neUid }); + }, + process: async (res: any, coreUid: any, neUid: any) => { if (res.code === RESULT_CODE_SUCCESS && Array.isArray(res.data)) { skimState.gnbNum += res.data.length; skimState.gnbUeNum += res.data.reduce( (sum: number, item: any) => sum + item.ueNum, 0 ); - const amfNbRes = await listAMFNbStatelist({ neId }); - console.log(amfNbRes); + const amfNbRes = await listAMFNbStatelist({ coreUid, neUid }); if ( amfNbRes.code === RESULT_CODE_SUCCESS && Array.isArray(amfNbRes.data) @@ -214,8 +217,11 @@ async function fnGetSkim() { [ 'MME', { - request: (neId: string) => listMMENblist({ neId }), - process: async (res: any, neId: any) => { + request: (coreUid: string, neUid: string) => { + eventNeUid.value.MME = neUid; + return listMMENblist({ coreUid, neUid }); + }, + process: async (res: any, coreUid: any, neUid: any) => { if (res.code === RESULT_CODE_SUCCESS && Array.isArray(res.data)) { skimState.enbNum += res.data.length; skimState.enbUeNum += res.data.reduce( @@ -223,14 +229,12 @@ async function fnGetSkim() { 0 ); - const mmeNbRes = await listMMENbStatelist({ neId }); - console.log(mmeNbRes); + const mmeNbRes = await listMMENbStatelist({ coreUid, neUid }); if ( mmeNbRes.code === RESULT_CODE_SUCCESS && Array.isArray(mmeNbRes.data) ) { // skimState.eNbSumNum += mmeNbRes.data.length; - console.log(mmeNbRes); tempEnbSumNum += mmeNbRes.data.length; } } @@ -244,13 +248,13 @@ async function fnGetSkim() { (ne: any) => ne.children ?.map((child: any) => { - console.log(child.neId); const handler = neHandlers.get(child.neType); return handler ? { - promise: handler.request(child.neId), + promise: handler.request(child.coreUid, child.neUid), process: handler.process, - neId: child.neId, // 这里加上neId + coreUid: child.coreUid, + neUid: child.neUid, } : null; }) @@ -280,9 +284,9 @@ async function fnGetSkim() { const processPromises = results.map((result: any, index: any) => { const req = requests[index]; if (result.status === 'fulfilled') { - return req.process(result.value, req.neId); + return req.process(result.value, req.coreUid, req.neUid); } else { - return req.process(0, req.neId); + return req.process(0, req.coreUid, req.neUid); } }); @@ -291,7 +295,12 @@ async function fnGetSkim() { skimState.eNbSumNum = tempEnbSumNum; // UDM - listUDMSub({ neId: udmNeId.value, pageNum: 1, pageSize: 1 }).then(res => { + listUDMSub({ + coreUid: currentCoreUid(), + neUid: udmNeUid.value, + pageNum: 1, + pageSize: 1, + }).then(res => { if (res.code === RESULT_CODE_SUCCESS) { skimState.udmSubNum = res.data.total; } @@ -335,12 +344,12 @@ function fnToRouter(name: string, query?: any) { } /**网元参数 */ -let neOtions = ref[]>([]); +let upfOtions = ref[]>([]); // UPF实时流量下拉框选择 function fnSelectNe(value: any, option: any) { - upfWhoId.value = value; - reSendUPF(value); + upfNeUId.value = value; + reSendUPF(); // upfTotalFlow.value.map((item: any) => { // item.requestFlag = false; // }); @@ -353,35 +362,30 @@ function fnSelectNe(value: any, option: any) { // UPF实时流量下拉菜单选择 function fnSelectUPF(e: any) { - upfWhoId.value = e.key; - reSendUPF(e.key); + upfNeUId.value = e.key; + reSendUPF(); for (var key in upfTotalFlow.value) { upfTotalFlow.value[key].requestFlag = false; } } -let udmNeId = ref('001'); +let udmNeUid = ref('001'); let udmOtions = ref[]>([]); let onlineOtions = ref[]>([]); /**用户数量-选择UDM */ async function fnSelectUDM(e: any) { - udmNeId.value = e.key; + udmNeUid.value = e.key; try { const res = await listUDMSub({ - neId: udmNeId.value, + coreUid: currentCoreUid(), + neUid: udmNeUid.value, pageNum: 1, pageSize: 1, }); - console.log(res); - // listUDMSub({ neId: udmNeId.value, pageNum: 1, pageSize: 1 }).then(res => { - if ( - res.code === RESULT_CODE_SUCCESS && - typeof res.data.total === 'number' - ) { + if (res.code === RESULT_CODE_SUCCESS) { skimState.udmSubNum = res.data.total; - console.log(res); } else { skimState.udmSubNum = 0; } @@ -411,14 +415,15 @@ onMounted(() => { neStore.getNeCascaderOptions.forEach(item => { console.log(item); if (item.value === 'UPF') { - neOtions.value = JSON.parse(JSON.stringify(item.children)); + upfOtions.value = JSON.parse(JSON.stringify(item.children)); } if (item.value === 'UDM') { udmOtions.value = JSON.parse(JSON.stringify(item.children)); } }); - if (neOtions.value.length > 0) { - fnSelectNe(neOtions.value[0].value, neOtions.value[0]); + if (upfOtions.value.length > 0) { + fnSelectNe(upfOtions.value[0].value, upfOtions.value[0]); + graphNodeClickID.value = `${upfOtions.value[0].neType}_${upfOtions.value[0].neUid}`; } if (udmOtions.value.length > 0) { fnSelectUDM({ key: udmOtions.value[0].value }); @@ -459,7 +464,7 @@ onMounted(() => { ].includes(v.neType) ) { onlineArr.push({ - value: v.neType + '_' + v.neId, + value: v.neType + '_' + v.neUid, label: v.neName, rmUid: v.rmUid, }); @@ -532,7 +537,7 @@ onBeforeUnmount(() => { {{ v.label }} @@ -631,14 +636,14 @@ onBeforeUnmount(() => { >
{{ - neOtions.find(item => item.value === upfWhoId)?.label || + upfOtions.find(item => item.value === upfNeUId)?.label || 'Select UPF' }}