提交 4dfe7a96 编写于 作者: d-u-a's avatar d-u-a

update: error reporting

上级 b619458a
......@@ -13,7 +13,12 @@ function parseJson (content, preprocess = false) {
type: jsPreprocessOptions.type
})
}
content = JSON.parse(stripJsonComments(content))
try {
content = JSON.parse(stripJsonComments(content))
} catch (e) {
throw new Error("dcloud:parse-json-error")
}
}
content = JSON.stringify(content)
......
function shouldReport (err = '') {
try {
const errMsg = err.toString()
// 目前简单的上报逻辑为:错误信息中包含@dcloudio包名
if (
errMsg.includes('@dcloudio') &&
!errMsg.includes('Errors compiling template')
) {
return true
class ErrorReport {
static get instance() {
if (this._instance == null) {
this._instance = new ErrorReport();
}
} catch (e) {}
return false
}
return this._instance;
}
constructor() {
this._instance = null;
this._https = null;
this._crypto = null;
this._cacheList = [];
this._isReporting = false;
}
get https() {
if (this._https == null) {
this._https = require('https');
}
return this._https;
}
get isInHBuilderX() {
const {
isInHBuilderX
} = require('@dcloudio/uni-cli-shared')
return isInHBuilderX;
}
report(type, err) {
if (!this._shouldReport(err)) {
return;
}
const data = JSON.stringify({
np: process.platform,
nv: process.version,
cp: process.env.UNI_PLATFORM,
hx: this.isInHBuilderX ? 1 : 0,
et: type,
em: err
});
var hash = this._getMD5(data);
if (this._cacheList.includes(hash)) {
return;
}
this._cacheList.push(hash);
setTimeout(() => {
this._doReport(data);
}, 10);
}
_doReport(data) {
const req = this.https.request({
hostname: this.HOST,
port: 443,
path: this.PATH,
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': data.length
}
});
req.write(data);
req.end();
}
_shouldReport(err = '') {
try {
const errMsg = err.toString()
const errorIndex = this.EXCLUDE_ERROR_LIST.findIndex(item => errMsg.includes(item) >= 0)
if (errorIndex >= 0) {
return false
}
// err:string|Error
function report (type, err) {
if (shouldReport(err)) {
// console.log('Error Reporting...')
// const https = require('https')
// const data = ...
// const req = https.request({
// hostname: '',
// port: 8080,
// path: '/todos',
// method: 'POST',
// headers: {
// 'Content-Type': 'application/json',
// 'Content-Length': data.length
// }
// })
// req.write(data)
// req.end()
// 目前简单的上报逻辑为:错误信息中包含@dcloudio包名
if (
errMsg.includes('@dcloudio') &&
!errMsg.includes('Errors compiling template')
) {
return true
}
} catch (e) {}
return false
}
_getMD5(str) {
return this.crypto.createHash('md5').update(str).digest('hex');
}
get crypto() {
if (this._crypto == null) {
this._crypto = require('crypto');
}
return this._crypto;
}
}
Object.assign(ErrorReport.prototype, {
HOST: "96f0e031-f37a-48ef-84c7-2023f6360c0a.bspapp.com",
PATH: "/http/uni-app-compiler",
EXCLUDE_ERROR_LIST: ['dcloud:parse-json-error']
});
function report(type, err) {
ErrorReport.instance.report(type, err);
}
global.__error_reporting__ = report
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册