From 6593419fb79ea46dda6530d1a6c11f3490f5516b Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 23 Sep 2023 17:20:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=A1=E4=BB=A4=E6=8A=93=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/trace/pcap.ts | 30 ++- src/i18n/locales/en-US.ts | 16 ++ src/i18n/locales/zh-CN.ts | 34 ++- src/plugins/http-fetch.ts | 21 +- src/views/trace/pcap/index.vue | 471 +++++++++++++++++++++++++++------ 5 files changed, 467 insertions(+), 105 deletions(-) diff --git a/src/api/trace/pcap.ts b/src/api/trace/pcap.ts index 3d6f55db..d634ae2a 100644 --- a/src/api/trace/pcap.ts +++ b/src/api/trace/pcap.ts @@ -1,11 +1,33 @@ import { request } from '@/plugins/http-fetch'; -// 登录方法 -export function login(data: Record) { +// 网元抓包生成pcap +export function tcpdumpNeTask( + signal: AbortSignal, + data: Record +) { return request({ - url: '/securityManagement/v1/login', + url: '/traceManagement/v1/tcpdumpNeTask', + method: 'post', + data: data, + signal: signal, + }); +} + +// 网元抓包pcap文件下载 +export function tcpdumpPcapDownload(data: Record) { + return request({ + url: '/traceManagement/v1/tcpdumpPcapDownload', + method: 'post', + data: data, + responseType: 'blob', + }); +} + +// 网元抓包生成pcap +export function tcpdumpNeUPFTask(data: Record) { + return request({ + url: '/traceManagement/v1/tcpdumpNeUPFTask', method: 'post', data: data, - whithToken: false, }); } diff --git a/src/i18n/locales/en-US.ts b/src/i18n/locales/en-US.ts index 0d47a0c8..7a6cddca 100644 --- a/src/i18n/locales/en-US.ts +++ b/src/i18n/locales/en-US.ts @@ -154,5 +154,21 @@ export default { neType: 'SMF Type', }, }, + trace: { + pcap: { + cardTitle: 'PCAP capture', + neType: 'Type', + neIp: 'IP address', + capArg: 'Capture parameters', + capTime: "Duration in seconds", + capLog: "Execution Log", + capDownText: "Download PCAP file", + runText: 'Execute', + runTimeText: 'Execute {s} seconds', + stopText: 'Interrupt', + capStart: 'Start capturing packets', + capStop: 'Stop capturing packets', + }, + }, }, }; diff --git a/src/i18n/locales/zh-CN.ts b/src/i18n/locales/zh-CN.ts index e7375a80..dc6a645f 100644 --- a/src/i18n/locales/zh-CN.ts +++ b/src/i18n/locales/zh-CN.ts @@ -126,23 +126,23 @@ export default { neTypePlease: '查询网元类型', neType: 'UDM网元类型', export: '导出', - exportConfirm: "确认导出全部鉴权用户数据吗?", + exportConfirm: '确认导出全部鉴权用户数据吗?', import: '导入', - loadDataConfirm: "确认要重新加载数据吗?", - loadData: "更新数据", + loadDataConfirm: '确认要重新加载数据吗?', + loadData: '更新数据', loadDataTip: '成功获取更新数据:{num}条,系统内部进行数据更新,请勿重复点击获取更新!!!', - num:'放号数', + num: '放号数', batchAddText: '批量新增', - batchDelText: '批量删除', + batchDelText: '批量删除', }, - sub:{ + sub: { neTypePlease: '查询网元类型', neType: 'UDM网元类型', export: '导出', - exportConfirm: "确认导出全部签约用户数据吗?", + exportConfirm: '确认导出全部签约用户数据吗?', import: '导入', - loadDataConfirm: "确认要重新加载数据吗?", - loadData: "更新数据", + loadDataConfirm: '确认要重新加载数据吗?', + loadData: '更新数据', loadDataTip: '成功获取更新数据:{num}条,系统内部进行数据更新,请勿重复点击获取更新!!!', }, base5G: { @@ -154,5 +154,21 @@ export default { neType: 'SMF网元类型', }, }, + trace: { + pcap: { + cardTitle: 'PCAP捕获', + neType: '网元类型', + neIp: '网元IP地址', + capArg: '抓包参数', + capTime: "时长(秒's)", + capLog: "执行日志", + capDownText: "下载PCAP文件", + runText: '执行', + runTimeText: '执行 {s} 秒', + stopText: '中断', + capStart: '开始抓包', + capStop: '停止抓包', + }, + }, }, }; diff --git a/src/plugins/http-fetch.ts b/src/plugins/http-fetch.ts index 2e020398..49d9d1f2 100644 --- a/src/plugins/http-fetch.ts +++ b/src/plugins/http-fetch.ts @@ -69,6 +69,8 @@ type OptionsType = { repeatSubmit?: boolean; /**携带授权Token请求头 */ whithToken?: boolean; + /**中断控制信号,timeout不会生效 */ + signal?: AbortSignal; }; /**默认请求参数 */ @@ -87,6 +89,7 @@ const FATCH_OPTIONS: OptionsType = { credentials: undefined, repeatSubmit: true, whithToken: true, + signal: undefined }; /**请求前的拦截 */ @@ -200,15 +203,17 @@ function interceptorResponse(res: ResultType): ResultType | Promise { * @returns 返回 Promise */ export async function request(options: OptionsType): Promise { + options = Object.assign({}, FATCH_OPTIONS, options); + let timeoutId: any = 0; // 请求超时控制请求终止 - const controller = new AbortController(); - const { signal } = controller; - - options = Object.assign({ signal }, FATCH_OPTIONS, options); - - const timeoutId = setTimeout(() => { - controller.abort(); // 终止请求 - }, options.timeout); + if (!options.signal) { + const controller = new AbortController(); + const { signal } = controller; + options.signal = signal; + timeoutId = setTimeout(() => { + controller.abort(); // 终止请求 + }, options.timeout); + } // 检查请求拦截 const beforeReq = beforeRequest(options); diff --git a/src/views/trace/pcap/index.vue b/src/views/trace/pcap/index.vue index 3e1c9198..8cd6c29c 100644 --- a/src/views/trace/pcap/index.vue +++ b/src/views/trace/pcap/index.vue @@ -1,45 +1,253 @@