From 7abeef5c1ee4ec563178b7ce7b5cd08bc30bcc3b Mon Sep 17 00:00:00 2001 From: Lei OT Date: Mon, 21 Jul 2025 15:45:53 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=B8=8A=E4=BC=A0=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pageSpy/index.jsx | 51 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/src/pageSpy/index.jsx b/src/pageSpy/index.jsx index a0918e5..66925fd 100644 --- a/src/pageSpy/index.jsx +++ b/src/pageSpy/index.jsx @@ -1,7 +1,29 @@ import { loadScript } from '@/utils/commons'; import { PROJECT_NAME, BUILD_VERSION } from '@/config'; +import { fetchJSON } from '@/utils/request' + +let spyTitle = ''; + +const sendNotify = async () => { + const notifyUrl = 'https://p9axztuwd7x8a7.mycht.cn/dingtalk/dingtalkwork/SendMDMsgByDingRobotToGroup'; + + const params = { + groupid: 'cidFtzcIzNwNoiaGU9Q795CIg==', + msgTitle: '有人求助', + msgText: `${spyTitle}上传了${PROJECT_NAME} (${BUILD_VERSION})的日志`, + }; + + return fetchJSON(notifyUrl, params).then((json) => { + if (json.errcode === 0) { + console.info('发送通知成功'); + } else { + throw new Error(json?.errmsg + ': ' + json.errcode); + } + }); +}; export const loadPageSpy = (title) => { + spyTitle = title; if (import.meta.env.DEV || window.$pageSpy) return @@ -20,19 +42,44 @@ export const loadPageSpy = (title) => { PageSpy.registerPlugin(p) }) window.$pageSpy = new PageSpy(PageSpyConfig); + + window.onerror = async function (msg, url, lineNo, columnNo, error) { + // 上传最近 3 分钟的日志 + const now = Date.now() + await window.$harbor.uploadPeriods({ + startTime: now - 3 * 60000, + endTime: now, + remark: `\`onerror\`自动上传. ${msg}`, + }) + } }); }; export const uploadPageSpyLog = async () => { // window.$pageSpy.triggerPlugins('onOfflineLog', 'upload'); if (window.$pageSpy) { - await window.$harbor.upload() // 上传日志 { clearCache: true, remark: '' } - alert('Success') + try { + // await window.$harbor.upload() // 上传日志 { clearCache: true, remark: '' } + // 上传最近 1 小时的日志, 直接upload 所有日志: 413 Payload Too Large + const now = Date.now(); + await window.$harbor.uploadPeriods({ + startTime: now - 60 * 60000, + endTime: now, + }); + alert('Success'); + sendNotify() + } catch (error) { + alert('Failure'); + } } else { alert('Failure') } } +/** + * @deprecated + * @outdated + */ export const PageSpyLog = () => { return ( <>