Commit ab951129 authored by jiangjiantao's avatar jiangjiantao

后屏增加错误监控

parent ce70185f
App({
import monitor from '/utils/alipayLogger';
App(monitor.hookApp({
globalData: {
version: "1.0.1.20200311",
......@@ -9,12 +11,36 @@ App({
},
onLaunch(options) {
monitor.init({
pid: "qzhr85jigetfamuqniwz4q==",
options: options,
sample: 1,
autoReportApi: true,
autoReportPage: true,
// Http请求返回数据中状态码字段名称
code: ["success"],
// Http返回数据中的error message字段名称
msg: ["errorMsg"]
});
// 第一次打开
// options.query == {number:1}
console.info('App onLaunch');
},
onShow(options) {
// 从后台被 scheme 重新打开
// options.query == {number:1}
},
});
// onError(err)
// {
// // debugger;
// console.log("草泥马");
// // fundebug.onError(err);
// },
}));
......@@ -161,9 +161,9 @@ Page({
onLoad(query) {
console.info(a);
// 页面加载
console.info(`Page onLoad with query: ${JSON.stringify(query)}`);
},
onReady() {
// 页面加载完成
......
"use strict";
Date.now = Date.now || function () {
return new Date().getTime()
};
var SEQUENCE = Date.now(),
noop = function () { },
getCwarn = function () {
var t = "object" == typeof console ? console.warn : noop;
try {
var e = {
warn: t
};
e.warn.call(e)
} catch (n) {
return noop
}
return t
},
util = {
noop: noop,
warn: getCwarn(),
createObject: function (t) {
if (Object.create) {
return Object.create(t)
}
var e = function () { };
return e.prototype = t, new e()
}, each: function (t, e) {
var n = 0,
r = t.length;
if (this.T(t, "Array")) {
for (; n < r && !1 !== e.call(t[n], t[n], n); n++) { }
} else {
for (n in t) {
if (!1 === e.call(t[n], t[n], n)) {
break
}
}
}
return t
}, safetyCall: function (t, e, n) {
if ("function" != typeof t) {
return n
}
try {
return t.apply(this, e)
} catch (r) {
return n
}
}, ignoreByRule: function (t, e) {
if (!t || !e) return !1;
if ((this.isString(e) || e.source || "Function" === this.T(e)) && (e = [e]), !this.isArray(e)) return util.warn("[cloudMonitor] invalid rules of ignore config, (list of) String/RegExp/Funcitons are available"),
!1;
for (var n, r = [], o = 0, i = e.length; o < i; o++) if (n = e[o], this.isString(n)) r.push(n.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1")); else if (n && n.source) r.push(n.source); else if (n && "Function" === this.T(n) && !0 === this.safetyCall(n, [t], !1)) return !0;
var a = new RegExp(r.join("|"), "i");
return !!(r.length && a.test && a.test(t));
}, T: function (t, e) {
var n = Object.prototype.toString.call(t).substring(8).replace("]", "");
return e ? n === e : n
}, J: function (t) {
if (!t || "string" != typeof t) {
return t
}
var e = null;
try {
e = JSON.parse(t)
} catch (n) { }
return e
}, pick: function (t) {
return 1 === t || 1 === Math.ceil(Math.random() * t)
}, verifyConfig: function (t) {
if ("sample" in t) {
var e = t.sample,
n = e;
e && /^\d+(\.\d+)?%$/.test(e) && (n = parseInt(100 / parseFloat(e))), 0 < n && 1 > n && (n = parseInt(1 / n)), n >= 1 && n <= 100 ? t.sample = n : delete t.sample
}
return t
}, delay: function (t, e) {
return -1 === e ? (t(), null) : setTimeout(t, e || 0)
}, ext: function (t) {
for (var e = 1, n = arguments.length; e < n; e++) {
var r = arguments[e];
for (var o in r) {
Object.prototype.hasOwnProperty.call(r, o) && (t[o] = r[o])
}
}
return t
}, sub: function (t, e) {
var n = {};
return this.each(t, function (t, r) {
-1 !== e.indexOf(r) && (n[r] = t)
}), n
}, uu: function () {
for (var t, e, n = 20, r = new Array(n), o = Date.now().toString(36).split(""); n-- > 0;) {
e = (t = 36 * Math.random() | 0).toString(36), r[n] = t % 3 ? e : e.toUpperCase()
}
for (var i = 0; i < 8; i++) {
r.splice(3 * i + 2, 0, o[i])
}
return r.join("")
}, seq: function () {
return (SEQUENCE++).toString(36)
}, decode: function (t) {
try {
t = decodeURIComponent(t)
} catch (e) { }
return t
}, encode: function (t, e) {
try {
t = e ? encodeURIComponent(t).replace(/\(/g, "%28").replace(/\)/g, "%29") : encodeURIComponent(t)
} catch (n) { }
return t
}, serialize: function (t) {
t = t || {};
var e = [];
for (var n in t) {
Object.prototype.hasOwnProperty.call(t, n) && t[n] !== undefined && e.push(n + "=" + this.encode(t[n], "msg" === n))
}
return e.join("&")
}, checkAPI: function (t, e) {
if (!t || "string" != typeof t) {
return !1
}
var n = /openmonitor(\.(dev|sit|test))?\.alipay[\w-]*/.test(t);
return !n && e && (n = /(\.png)|(\.gif)|(alicdn\.com)/.test(t)), !n
}, checkAutoError: function (t) {
return !(!t || !t.message) && !/failed[\w\s]+fetch/i.test(t.message)
}, cutUrlSearch: function (t) {
return t && "string" == typeof t ? t.replace(/^(.*?https?:)?\/\//, "").replace(/\?.*$/, "").replace(/&.*$/, "").replace(/\/\d{1,}$/, "/*").replace(/\/\d{1,}\//, "/*/") : ""
}, patchPath: function (t) {
if (!t || "string" != typeof t) return "";
t = t.replace(/^\//, "");
return t.includes("pages/") ? t.replace(/\.\.\//g, "") : t.replace(/^\.\./, "pages")
}, getRandIP: function () {
for (var t = [], e = 0; e < 4; e++) {
var n = Math.floor(256 * Math.random());
t[e] = (n > 15 ? "" : "0") + n.toString(16)
}
return t.join("")
}, getSortNum: function (t) {
return t ? (t += 1) >= 1000 && t <= 9999 ? t : t < 1000 ? t + 1000 : t % 10000 + 1000 : 1000
}, getRandNum: function (t) {
return t && "string" == typeof t ? t.length < 5 ? this.getNum(5) : t.substring(t.length - 5) : this.getNum(5)
}, getNum: function (t) {
for (var e = [], n = 0; n < t; n++) {
var r = Math.floor(16 * Math.random());
e[n] = r.toString(16)
}
return e.join("")
}, isFunction: function (t) {
return "function" == typeof t
}, isPlainObject: function (t) {
return "[object Object]" === Object.prototype.toString.call(t)
}, isString: function (t) {
return "[object String]" === Object.prototype.toString.call(t)
}, isArray: function (t) {
return "[object Array]" === Object.prototype.toString.call(t)
}, joinRegExp: function (t) {
for (var e, n = [], r = 0, o = t.length; r < o; r++) {
e = t[r], this.isString(e) ? n.push(e.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1")) : e && e.source && n.push(e.source)
}
return new RegExp(n.join("|"), "i")
}, getPropertyValue: function (j, arr) {
if (!arr) return "";
for (var k in j) {
if (arr.indexOf(k) > -1 && ("object" != typeof j[k])) {
return j[k] + ""
}
}
return ""
}, hashCode: function (s) {
var hash = 0, i, chr;
for (i = 0; i < s.length; i++) {
chr = s.charCodeAt(i);
hash = ((hash << 5) - hash) + chr;
hash |= 0; // Convert to 32bit integer
}
return hash;
}, toHex: function (s) {
return !s ? null : ("000" + this.hashCode(s).toString(16)).slice(-4)
}, replaceAll: function (str, find, replace) {
return str.replace(new RegExp(find, 'g'), replace);
}
},
util_1 = util,
pushToQueue = function (e, t) {
var i;
{
if ("error" !== t.t || !(i = e.requestQueue[0]) || "error" !== i.t || t.msg !== i.msg) {
if ("behavior" === t.t) {
var n = e.requestQueue && e.requestQueue.length;
if (n > 0 && "behavior" === e.requestQueue[n - 1].t) {
var r = t.behavior || [];
e.requestQueue[n - 1].behavior.concat(r);
} else e.requestQueue.push(t);
} else e.requestQueue.unshift(t);
return e.onReady(function () {
e.requestTimmer = util.delay(function () {
e.clear();
}, e.requestQueue[0] && "error" === e.requestQueue[0].t ? 3e3 : -1);
}), !0;
}
i.times++;
}
},
Base = function (t) {
return this.ver = "1.0.8", this.syn = 0, this._conf = util.ext({}, Base.dftCon), this.sampleCache = {}, this.requestQueue = [], this.hash = util.seq(), this.resetSession(), this.setConfig(t), this.rip = util.getRandIP(), this._common = {}, this
};
Base.dftCon = {
sample: 1,
tag: "",
imgUrls: ["https://openmonitor.alipay-eco.com/cloudmonitor/put.htm?"],
release: undefined,
environment: "production",
charset: "utf-8"
}, Base.prototype = {
constructor: Base,
getPage: function () {
var e = this._conf.page;
return util.safetyCall(e, [], e + "")
}, setPage: function () { }, setConfig: function (e) {
e && "object" == typeof e && (util.verifyConfig(e), e = this.setImgUrl(e), this._conf = util.ext({}, this._conf, e))
}, setImgUrl: function (e) {
return e.imgUrl && (this._conf.imgUrls = [e.imgUrl]), e;
}, sendRequest: function () { }, postData: function () { }, commonInfo: function () {
return {}
}, setCommonInfo: function (e) {
e && "object" == typeof e && (this._common = util.ext({}, this._common, e))
}, resetSession: function () {
this.session = util.uu(), this.sBegin = Date.now();
}, getConfig: function (e) {
return e ? this._conf[e] : util.ext({}, this._conf)
}, sampling: function (e) {
return 1 === e || ("boolean" == typeof this.sampleCache[e] ? this.sampleCache[e] : (this.sampleCache[e] = util.pick(e),
this.sampleCache[e]));
}, clear: function () {
var e, t = this;
if (t.syn > 2) {
return clearTimeout(t.requestTimmer), t.requestTimmer = setTimeout(function () {
t.clear()
}, 50), t;
}
for (clearTimeout(t.requestTimmer), t.requestTimmer = null; t.syn < 2 && (e = t.requestQueue.pop()); t.syn++) {
"res" === e.t ? t.postData(e, "res") : "error" === e.t ? t.postData(e, "err") : "behavior" === e.t ? t.postData(e, "behavior") : t.sendRequest(e)
}
!!t.requestQueue.length && (t.requestTimmer = setTimeout(function () {
t.clear()
}, 50));
return this
}, getToken: function (e) {
var t = this._conf.token;
return !t ? "-" : t[e] || "-";
}, _lg: function (e, t, i) {
var n = this._conf, r = t.page || util.patchPath(this.getPage()), s = n.ignore || {}, o = s.ignoreErrors, u = s.ignoreUrls, a = s.ignoreApis;
return util.ignoreByRule(r, u) || util.ignoreByRule(util.decode(r), u) ? this : "error" === e && (util.ignoreByRule(t.msg, o) || util.ignoreByRule(util.decode(t.msg), o)) ? this : "api" === e && (util.ignoreByRule(t.api, a) || util.ignoreByRule(util.decode(t.api), a)) ? this : t && !n.disabled && (n.pid || n.token) ? i && !this.sampling(i) ? this : (t = util.ext({
t: e,
page: r,
environment: n.environment,
_input_charset: n.charset,
timestamp: Date.now()
}, t, this.commonInfo(), this._common, {
token: this.getToken(e),
pid: n.pid || "-",
_v: this.ver,
sampling: i || 1
}), pushToQueue(this, t)) : this
}, custom: function (e, t) {
if (!e || "object" != typeof e) {
return this
}
var i = !1,
r = {
timestamp: Date.now()
};
return util.each(e, function (e, t) {
return !(i = t && t.length <= 20) && util.warn("[CloudMonitor] invalid key: " + t), r["x-" + t] = e, i
}), i ? this._lg("custom", r, t || 1) : this
}, report: function (k, e) {
if (!k || !e || "object" != typeof e) {
return this
}
var i = !1,
r = {
timestamp: Date.now()
};
return util.each(e, function (e, t) {
return !(i = t && t.length <= 20) && util.warn("[CloudMonitor] invalid key: " + t), r["x-" + t] = e, i
}), i ? this._lg(k, r, 1) : this
}
};
var base = Base,
validApiKeys = ["api", "success", "time", "code", "msg", "begin", "response", "c1", "c2", "c3"],
parseStatData = function (t, e) {
var r = t.split("::");
return r.length > 1 ? util_1.ext({
group: r[0],
key: r[1]
}, e) : util_1.ext({
group: "default_group",
key: r[0]
}, e)
},
Reporter = function (t) {
base.call(this, t);
var e;
try {
e = "object" == typeof performance ? performance.timing.fetchStart : Date.now()
} catch (r) {
e = Date.now()
}
return this._startTime = e, this
};
Reporter.prototype = util_1.createObject(base.prototype), util_1.ext(base.dftCon, {
startTime: null
}), util_1.ext(Reporter.prototype, {
constructor: Reporter,
_super: base,
sum: function (t, e, r) {
try {
return this._lg("sum", parseStatData(t, {
val: e || 1,
begin: Date.now()
}), r)
} catch (n) {
util_1.warn("[retcode] can not get parseStatData: " + n)
}
}, avg: function (t, e, r) {
try {
return this._lg("avg", parseStatData(t, {
val: e || 0,
begin: Date.now()
}), r)
} catch (n) {
util_1.warn("[retcode] can not get parseStatData: " + n)
}
}, percent: function (t, e, r, n) {
try {
return this._lg("percent", parseStatData(t, {
subkey: e,
val: r || 0,
begin: Date.now()
}), n)
} catch (i) {
util_1.warn("[retcode] can not get parseStatData: " + i)
}
}, msg: function (t, e) {
if (t && !(t.length > 180)) {
return this.custom({
msg: t
}, e)
}
}, error: function (t, e) {
if (!t) {
return util_1.warn("[cloudMonitor] invalid param e: " + t), this
}
1 === arguments.length ? ("string" == typeof t && (t = {
message: t
}, e = {}), "object" == typeof t && (e = t = t.error || t)) : ("string" == typeof t && (t = {
message: t
}), "object" != typeof e && (e = {}));
var r = t.name || "CustomError",
n = util_1.encode(t.message),
i = util_1.encode(util_1.replaceAll(t.stack || "", "http.*\\d*:\\d*", "unknow"));
e = e || {};
var s = {
begin: Date.now(),
cate: r,
msg: n.substring(0, 256),
stack: i && i.substring(0, 256),
file: e.filename || "",
line: e.lineno || "",
col: e.colno || "",
err: {
msg_raw: n,
stack_raw: i
}
}, n = (this.getConfig("ignore") || {}).ignoreErrors;
return util.ignoreByRule(s.msg, n) || util.ignoreByRule(util.decode(s.msg), n) ? this : (this.beforeSend && this.beforeSend("error", s)), this._lg("error", s, 1)
}, behavior: function (t) {
if (t) {
var e = "object" == typeof t && t.behavior ? t : {
behavior: t
};
return this.beforeSend && this.beforeSend("behavior", t), this._lg("behavior", e, 1)
}
}, api: function (e, t, r, i, a, s) {
if (!e) {
return util.warn("[cloudMonitor] api is null"), this
}
e = "string" == typeof e ? {
api: e,
success: t,
time: r,
code: i,
msg: a,
begin: s
} : util.sub(e, validApiKeys);
if (e.code = e.code || "", e.msg = e.msg || "", e.success = e.success ? 1 : 0, e.time = +e.time, e.begin = e.begin || "", !e.api || isNaN(e.time)) {
return util.warn("[cloudMonitor] invalid time or api"), this
}
var c = (this.getConfig("ignore") || {}).ignoreApis;
if (util.ignoreByRule(e.api, c) || util.ignoreByRule(util.decode(e.api), c)) return this;
this.beforeSend && this.beforeSend("api", e);
return this._lg("api", e, e.success && !e.response && this.getConfig("sample"))
}, resource: function (t, e) {
if (!t || !util_1.isPlainObject(t)) {
return util_1.warn("[cloudMonitor] invalid param data: " + t), this
}
var r = Object.keys(t),
n = ["begin", "dom", "load", "res", "dl"],
i = !1;
for (var o in n) {
if (r.indexOf(n[o]) < 0) {
i = !0;
break
}
}
if (i) {
return util_1.warn("[cloudMonitor] lack param data: " + t), this
}
var a = {
begin: t.begin || Date.now(),
dom: t.dom || "",
load: t.load || "",
res: util_1.isArray(t.res) ? JSON.stringify(t.res) : JSON.stringify([]),
dl: t.dl || ""
};
return this._lg("res", a, e)
}
}), Reporter._super = base, Reporter._root = base, base.Reporter = Reporter;
var reporter = Reporter,
MiniProgramLogger = function (t) {
var o = this;
return Reporter.call(o, t), o._health = {
errcount: 0,
apisucc: 0,
apifail: 0
}, o.DEFAUT_PAGE_PATH = "[app]", o.isSendPerf = !1, o.beforeSend = function (e, t) {
"error" === e ? o._health.errcount++ : "api" === e && o._health[t.success ? "apisucc" : "apifail"]++;
}, "function" == typeof o.autoSetCommonInfo && o.autoSetCommonInfo(), this
};
MiniProgramLogger.prototype = util.createObject(Reporter.prototype), util.ext(Reporter._root.dftCon, {
sendRequest: function () { }, getCurrentPage: function () { }, getPrePage: function () { }
}), util.ext(MiniProgramLogger.prototype, {
constructor: MiniProgramLogger,
_super: Reporter,
onReady: function (e) {
var t = this;
t._common.uid ? e() : setTimeout(function () {
t.onReady(e)
}, 100);
}, sendRequest: function (e, o) {
var a = this;
if (a.getConfig("debug")) {
"undefined" != typeof console && console && "function" == typeof console.log && console.log("[cloudMonitor] [DEBUG MODE] log data", e)
} else {
var r = a._conf.sendRequest;
util.each(a.getConfig("imgUrls"), function (t, i) {
"object" == typeof e && (e = util.serialize(e));
var n = t + e;
o && (n += "&post_res=");
if ("function" == typeof r) {
try {
!i ? r(n, o, a) : r(n, o)
} catch (i) {
util.warn("[cloudMonitor] error in sendRequest", i)
}
}
})
}
}, postData: function (e, o) {
var t = {};
t[o] = e[o], delete e[o], this.sendRequest(e, t)
}, getPage: function (delta) {
var e = this._conf.getCurrentPage;
if ("function" == typeof e) {
try {
var o = e();
if (o && "string" == typeof o) {
return o
}
} catch (t) {
util.warn("[cloudMonitor] error in getPage", t)
}
}
return "string" == typeof e && e ? e : this.DEFAUT_PAGE_PATH
}, addHook: function () {
return this
}, removeHook: function () {
return this
}, hookApp: function (e) {
var o = this,
t = {
onError: function (t) {
var n = 1 === arguments.length ? [arguments[0]] : Array.apply(null, arguments),
r = e.onError;
try {
o.error(t)
} catch (t) {
util.warn("[cloudMonitor] error in hookApp:onError", t)
}
if ("function" == typeof r) {
return r.apply(this, n)
}
}
};
return util.ext({}, e, t)
}, autoSetCommonInfo: function () {
this.setCommonInfo({
app: "mini_common",
uid: this._conf.uid
})
}, _lgPV: function (t) {
if (!t) return;
if ("string" == typeof t) {
t = { page: t };
}
t.page = util.cutUrlSearch(t.page);
t.url && (t.url = util.cutUrlSearch(t.url));
!t.spmPre && (t.spmPre = util.toHex(this.getPage()) || ""), !t.spmId && (t.spmId = util.toHex(t.page) || ""), !t.scene && (t.scene = ""), this._lg("pv", t);
},
sendHealthOnPageShowOrHide: function () {
try {
this.sessionPage = this.getPage(), this.sendHealth(), this.speedCache && (this._lg("speed", this.speedCache), this.speedCache = null,
clearTimeout(this.speedTimmer)), this.clear();
} catch (o) {
util.warn("[cloudMonitor] error in sendHealthOnPageShowOrHide", o)
}
},
sendHealth: function () {
if (this.sessionPage) {
var e = util.ext({}, this._health);
e.healthy = e.errcount > 0 ? 0 : 1, e.begin = Date.now();
var o = e.begin - this.sBegin;
e.page = this.sessionPage, e.stay = o, this._lg("health", e, 1), this._health = {
errcount: 0,
apisucc: 0,
apifail: 0
}, this.sessionPage = null;
}
},
parseResponse: function (e) {
if (!e || "object" != typeof e) return {};
var r = "",
c = util.getPropertyValue(e, this._conf.code) || e.stat || e.status || e.code || e.success,
u = util.getPropertyValue(e, this._conf.msg) || e.msg || e.message || e.subMsg || e.errorMsg || e.ret || e.errorResponse || "";
"object" == typeof u && (c = c || u.code, u = u.msg || u.message || u.info || u.ret || JSON.stringify(u));
return {
code: c,
msg: u,
response: util.pick(10000) ? JSON.stringify(e).substr(0, 256) : ""
};
}
});
MiniProgramLogger._super = reporter, MiniProgramLogger._root = reporter._root, reporter.MiniProgramLogger = MiniProgramLogger;
var miniProgramLogger = MiniProgramLogger,
STORAGE_MINIPROGRAM_ALIPAY_UID_KEY = "STORAGE_MINIPROGRAM_ALIPAY_UID",
AlipayLogger = function (t) {
return MiniProgramLogger.call(this, t), this
};
AlipayLogger.prototype = util.createObject(MiniProgramLogger.prototype), util.ext(MiniProgramLogger._root.dftCon, {
sendRequest: function (t, e, a) {
if ("undefined" != typeof my && my && "function" == typeof my.request) {
try {
var o, r = "GET";
e && (r = "POST", o = JSON.stringify(e)), my.request({
url: t,
method: r,
data: o,
dataType: "json",
fail: function (t) {
util.warn("[cloudMonitor] sendRequest fail", t)
},
complete: function (_t) {
a && a.syn--
}
})
} catch (n) {
util.warn("[cloudMonitor] error in conf sendRequest", n)
}
}
}, getCurrentPage: function () {
if ("function" == typeof getCurrentPages) {
try {
var t = getCurrentPages() || [],
e = t[t.length - 1];
return e && e.route || null
} catch (o) {
util.warn("[cloudMonitor] error in conf getCurrentPage", o)
}
}
}, getPrePage: function (delta) {
if ("function" == typeof getCurrentPages) {
try {
var t = getCurrentPages() || [],
e = delta === undefined ? t[t.length - 2] : delta >= t.length ? t[0] : t[t.length - 1 - delta];
return e && e.route || null
} catch (o) {
util.warn("[cloudMonitor] error in conf getCurrentPage", o)
}
}
}
}), util.ext(AlipayLogger.prototype, {
constructor: AlipayLogger,
_super: MiniProgramLogger,
autoSetCommonInfo: function () {
this.setCommonInfo({
app: "mini_alipay"
}), this.autoSetNetworkType(), this.autoSetUid(), this.autoSystemInfo(), this.autoSetAppId(), this.autoSetSDKVersion(), this.autoSetRunScene()
}, autoSetUid: function () {
var t = this;
if (t._conf && t._conf.uid) {
t.setCommonInfo({
uid: t._conf.uid
})
} else {
if ("undefined" != typeof my && my && "function" == typeof my.getStorage) {
try {
my.getStorage({
key: STORAGE_MINIPROGRAM_ALIPAY_UID_KEY,
success: function (e) {
if (e && e.data && "string" == typeof e.data) {
t.setCommonInfo({
uid: e.data
})
} else {
if ("function" == typeof my.setStorage) {
var o = util.uu();
my.setStorage({
key: STORAGE_MINIPROGRAM_ALIPAY_UID_KEY,
data: o,
success: function () {
t.setCommonInfo({
uid: o
})
}, fail: function (t) {
util.warn("[cloudMonitor] error in setStorage", t)
}
})
}
}
}, fail: function (t) {
util.warn("[cloudMonitor] error in getStorage", t)
}
})
} catch (e) {
util.warn("[cloudMonitor] error in autoSetUid", e)
}
}
}
}, autoSystemInfo: function () {
var t = this;
if ("undefined" != typeof my && my && "function" == typeof my.getSystemInfo) {
try {
my.getSystemInfo({
success: function (e) {
e && "string" == typeof e.model && "string" == typeof e.version && "string" == typeof e.platform && "string" == typeof e.language && t.setCommonInfo({
mobile: e.model,
version: e.version,
platform: e.platform,
system: e.system,
resolution: e.windowWidth + '*' + e.windowHeight,
language: e.language
})
}, fail: function (t) {
util.warn("[cloudMonitor] autoSystemInfo getSystemInfo fail", t)
}
})
} catch (e) {
util.warn("[cloudMonitor] error in getSystemInfo", e)
}
}
}, autoSetNetworkType: function () {
var t = this;
if ("undefined" != typeof my && my && "function" == typeof my.getNetworkType) {
try {
my.getNetworkType({
success: function (e) {
e && "string" == typeof e.networkType && t.setCommonInfo({
net: e.networkType
})
}, fail: function (t) {
util.warn("[cloudMonitor] autoSetNetworkType getNetworkType fail", t)
}
})
} catch (e) {
util.warn("[cloudMonitor] error in autoSetNetworkType", e)
}
}
}, autoSetAppId: function () {
var t = this;
if ("undefined" != typeof my && my && "function" == typeof my.getAppIdSync) {
try {
const appIdRes = my.getAppIdSync();
t.setCommonInfo({ appId: appIdRes.appId })
} catch (e) {
util.warn("[cloudMonitor] error in autoSetNetworkType", e)
}
}
}, autoSetSDKVersion: function () {
var t = this;
if ("undefined" != typeof my && my && "string" == typeof my.SDKVersion) {
t.setCommonInfo({
sdk_version: my.SDKVersion
})
}
}, autoSetRunScene: function () {
var t = this;
if ("undefined" != typeof my && my && "function" == typeof my.getRunScene) {
try {
my.getRunScene({
success(e) {
t.setCommonInfo({
env: e.envVersion
})
}
})
} catch (e) {
util.warn("[cloudMonitor] error in autoSetRunScene", e)
}
}
}, addHook: function () {
var e = this,
t = util,
ca = e._conf.autoReportApi,
cp = e._conf.autoReportPage;
!e.isHookInstantiated && (function () {
if (ca) {
if ("undefined" != typeof my && my && "function" == typeof my.request) {
var s = my.request;
var a = Object.getOwnPropertyDescriptor(my, "request");
a && a.writable && (my.request = function (i) {
var a = new Date().getTime(),
n = i;
if (i && i.url) {
var o = t.cutUrlSearch(i.url);
if (!t.checkAPI(o, !0)) {
return s.call(my, n)
}
var u = n && n.headers,
f = e._conf.extendApi;
u && "object" == typeof u || (u = {});
var p = {
success: function (t) {
"function" == typeof i.success && i.success(t);
var s = new Date().getTime(),
u = {};
if (t.data && (!i.dataType || i.dataType === "json")) {
u = e.parseResponse(t.data);
f && (u = util.ext(u, util.safetyCall(f, [i.data, t.data], {})));
}
//自定义错误
u.msg = JSON.stringify({
msg: u.msg,
request: i.data,
response: t.data
});
e.api(util.ext({
api: o,
success: !0,
time: s - a,
code: "",
msg: "",
response: ""
}, u))
}, fail: function (t) {
"function" == typeof i.fail && i.fail(t);
var s = new Date().getTime(),
n = "";
t && t.status && (n = t.status);
n == "" && t.error && (n = t.error);
var u = "",
r = f ? util.safetyCall(f, [i.data], {}) : {};
u.msg = JSON.stringify({
msg: u.msg,
request: i.data,
response: t.data
});
t && t.body && (u = (u = JSON.stringify(t.body)).substring(0, 256)), e.api(util.ext({
api: o,
success: !1,
time: s - a,
code: n,
msg: u
}, r))
}
};
n = t.ext({}, n, p)
}
return s.call(my, n)
})
}
}
if (cp && "undefined" != typeof my && my) {
if ("function" == typeof my.call) {
var c = my.call;
var a = Object.getOwnPropertyDescriptor(my, "call");
a && a.writable && (my.call = function (i, j, k) {
if (i && i == "startApp" && j && j.param && j.param.url) {
var o = j.param.url;
o = t.cutUrlSearch(o);
e._lgPV({
page: o
})
}
return e.sendHealthOnPageShowOrHide(), c.call(my, i, j, k)
})
}
if ("function" == typeof my.navigateTo) {
var n = my.navigateTo;
var a = Object.getOwnPropertyDescriptor(my, "navigateTo");
a && a.writable && (my.navigateTo = function (i) {
if (i && i.url) {
var o = t.cutUrlSearch(t.patchPath(i.url));
e._lgPV({
page: o
})
}
return e.sendHealthOnPageShowOrHide(), n.call(my, i)
})
}
if ("function" == typeof my.navigateBack) {
var w = my.navigateBack;
var a = Object.getOwnPropertyDescriptor(my, "navigateBack");
a && a.writable && (my.navigateBack = function (i) {
e._lgPV({
page: e._conf.getPrePage(i || 1)
})
return e.sendHealthOnPageShowOrHide(), w.call(my, i)
})
}
if ("function" == typeof my.redirectTo) {
var x = my.redirectTo;
var a = Object.getOwnPropertyDescriptor(my, "redirectTo");
a && a.writable && (my.redirectTo = function (i) {
if (i && i.url) {
var o = t.cutUrlSearch(t.patchPath(i.url));
e._lgPV({
page: o
})
}
return e.sendHealthOnPageShowOrHide(), x.call(my, i)
})
}
if ("function" == typeof my.switchTab) {
var y = my.switchTab;
var a = Object.getOwnPropertyDescriptor(my, "switchTab");
a && a.writable && (my.switchTab = function (i) {
if (i && i.url) {
var o = t.cutUrlSearch(t.patchPath(i.url));
e._lgPV({
page: o,
spmPre: "T",
})
}
return e.sendHealthOnPageShowOrHide(), y.call(my, i)
})
}
if ("function" == typeof my.reLaunch) {
var z = my.reLaunch;
var a = Object.getOwnPropertyDescriptor(my, "reLaunch");
a && a.writable && (my.reLaunch = function (i) {
if (i && i.url) {
var o = t.cutUrlSearch(t.patchPath(i.url));
e._lgPV({
page: o,
spmPre: "T",
})
}
return z.call(my, i)
})
}
if ("function" == typeof my.navigateToMiniProgram) {
var m = my.navigateToMiniProgram;
var a = Object.getOwnPropertyDescriptor(my, "navigateToMiniProgram");
a && a.writable && (my.navigateToMiniProgram = function (i) {
if (i) {
var o = i.path || i.appId || "-";
o = t.cutUrlSearch(o);
e._lgPV({
page: o
})
}
return m.call(my, i)
})
}
}
}.call(e), e.isHookInstantiated = !0);
return e
},
init: function (t) {
if (!t || !t.pid) {
util.warn("[cloudMonitor] not set pid");
}
var p, e = this;
if (t.options) {
p = t.options.path, t.scene = t.options.scene, delete t.options;
}
if (!t.ignore) {
t.ignore = {
ignoreUrls: [/\.(png|jpg|gif|jpeg)$/, /[\"{}]+/]
}
}
this.setConfig(t), this.addHook();
if (p) {
e.entrance = util.toHex(p);
e.onReady(function () {
e._lg("pv", { spmPre: "E", spmId: e.entrance || "", scene: e._conf.scene || "" })
})
}
return this;
}
});
AlipayLogger._super = miniProgramLogger, AlipayLogger._root = miniProgramLogger._root, miniProgramLogger.AlipayLogger = AlipayLogger;
module.exports = new AlipayLogger();
\ No newline at end of file
var _0x11f3=["name","Module","exports","appVersion","silent","captureBreadcrumb","length","locationInfo","error","isFiltered","headers","request","httpRequest","constructor","fundebug.notify()的option参数类型必须为object!"];(function(t,e){var r=function(e){while(--e){t["push"](t["shift"]())}};r(++e)})(_0x11f3,211);var _0x1c24=function(e,t){e=e-0;var r=_0x11f3[e];return r};module["exports"]=function(r){var n={};function o(e){if(n[e])return n[e]["exports"];var t=n[e]={i:e,l:!1,exports:{}};return r[e]["call"](t["exports"],t,t["exports"],o),t["l"]=!0,t["exports"]}return o["m"]=r,o["c"]=n,o["d"]=function(e,t,r){o["o"](e,t)||Object["defineProperty"](e,t,{enumerable:!0,get:r})},o["r"]=function(e){"undefined"!=typeof Symbol&&Symbol["toStringTag"]&&Object["defineProperty"](e,Symbol["toStringTag"],{value:_0x1c24("0x0")}),Object["defineProperty"](e,"__esModule",{value:!0})},o["t"]=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t["__esModule"])return t;var r=Object["create"](null);if(o["r"](r),Object["defineProperty"](r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)o["d"](r,n,function(e){return t[e]}["bind"](null,n));return r},o["n"]=function(e){var t=e&&e["__esModule"]?function(){return e["default"]}:function(){return e};return o["d"](t,"a",t),t},o["o"]=function(e,t){return Object["prototype"]["hasOwnProperty"]["call"](e,t)},o["p"]="",o(o["s"]=0)}([function(e,t,r){"use strict";var n=r(1),o=r(5),i=r(8),u=r(9),c=r(10),f={},s=[],a={};f["init"]=n(a,s),f["onError"]=o(a,s,f),f["test"]=u(a,s,f),f["notify"]=i(a,s,f),f["notifyError"]=c(a,s,f),e[_0x1c24("0x1")]=f},function(e,t,r){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol["iterator"]?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e["constructor"]===Symbol&&e!==Symbol["prototype"]?"symbol":typeof e},o=r(2),i=r(4);e[_0x1c24("0x1")]=function(r,e){return function(t){if(t&&"object"===(void 0===t?"undefined":n(t))){["apikey",_0x1c24("0x2"),"releaseStage","metaData","filters",_0x1c24("0x3"),"silentPage"]["forEach"](function(e){r[e]=t[e]}),o(e),i["getNetworkType"](),t["setSystemInfo"]&&i["getSystemInfo"](),t["setLocation"]&&i["getLocation"]()}}}},function(e,t,r){"use strict";var o=r(3);e[_0x1c24("0x1")]=function(n){["log","error","info","warn"]["forEach"](function(e){var t,r;t=e,r=console[t],console[t]=function(){try{var e={};e["type"]="console";e["time"]=(new Date).getTime();e["method"]=t;e["args"]=arguments;o[_0x1c24("0x4")](n,e)}catch(e){console["error"](e)}r&&r["apply"](this,arguments)}})}},function(e,t,r){"use strict";t["captureBreadcrumb"]=function(e,t){e["push"](t),20<e["length"]&&e["shift"]()},t["getCurrentPage"]=function(){var e=getCurrentPages();if(e[_0x1c24("0x5")]){var t=e[e["length"]-1];if(t)return t["route"]=t["route"],t}}},function(e,t,r){"use strict";var o=r(3),i=void 0,u=void 0,c=void 0;t["getEvent"]=function(e,t,r){var n={};n["notifierVersion"]="0.2.0";n["systemInfo"]=i;n[_0x1c24("0x6")]=u;n["networkType"]=c;return n["scene"]=e["scene"],n["apikey"]=e["apikey"],n["appVersion"]=e["appVersion"],n["releaseStage"]=e["releaseStage"],n["metaData"]=r["metaData"]||e["metaData"],n["breadcrumbs"]=t,n["time"]=(new Date)["getTime"](),e["silentPage"]||(n["Page"]=o["getCurrentPage"]()),n},t["getNetworkType"]=function(){my["getNetworkType"]({success:function(e){c=e["networkType"]}})},t["getSystemInfo"]=function(){my["getSystemInfo"]({success:function(e){i=e}})},t["getLocation"]=function(){my["getLocation"]({type:1,success:function(e){u=e}})}},function(e,t,r){"use strict";var o=r(6);e["exports"]=function(t,r,n){return function(e){try{if(t["silent"])return;if(!e)return void console["error"]("fundebug.onError()必须指定error参数!");if("string"!=typeof e)return void console["error"]("fundebug.onError()的error参数类型必须为string!");o({type:"uncaught",error:e},t,r,n)}catch(e){console[_0x1c24("0x7")](e)}}}},function(e,t,r){"use strict";var u=r(7),c=r(4),f=5;e[_0x1c24("0x1")]=function(e,t,r,n){var o=c["getEvent"](t,r,n);if(e=Object["assign"](o,e),JSON["stringify"](e,null,4),!u[_0x1c24("0x8")](e,t["filters"])&&function(e){if(!e["apikey"])return void console["error"]("请使用fundebug.init(https://docs.fundebug.com/notifier/aliapp/api/init.html)配置apikey!");return!!f&&(f--,!0)}(e)){var i={};i["url"]="https://aliapp.fundebug.net/event/";i["method"]="POST";i[_0x1c24("0x9")]={};i["data"]=JSON.stringify(e);i[_0x1c24("0x9")]["Content-Type"]="application/json";my["canIUse"]("request")?my[_0x1c24("0xa")](i):my[_0x1c24("0xb")](i)}}},function(e,t,r){"use strict";function n(e,t){if(!e)return!1;if(!t)return!1;if(Object["keys"]&&!Object["keys"](t)["length"])return!1;for(var r in t)if(t["hasOwnProperty"](r))if(t[r]["constructor"]===RegExp){if(!t[r]["test"](e[r]))return!1}else if(t[r]["constructor"]===Object){if(!n(e[r],t[r]))return!1}else{if(t[r]["constructor"]!==String||"inexistence"!==t[r])return!1;if(e["hasOwnProperty"](r))return!1}return!0}t["isFiltered"]=function(e,t){if(!t||!t["length"])return!1;for(var r=0;r<t["length"];r++)if(n(e,t[r]))return!0;return!1}},function(e,t,r){"use strict";var c="function"==typeof Symbol&&"symbol"==typeof Symbol["iterator"]?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e[_0x1c24("0xc")]===Symbol&&e!==Symbol["prototype"]?"symbol":typeof e},f=r(6);e["exports"]=function(o,i,u){return function(e,t,r){try{if(o["silent"])return;if(!e)return void console[_0x1c24("0x7")]("fundebug.notify()必须指定name参数!");if("string"!=typeof e)return void console["error"]("fundebug.notify()的name参数类型必须为string!");if(t&&"string"!=typeof t)return void console["error"]("fundebug.notify()的message参数类型必须为string!");if(r&&"object"!==(void 0===r?"undefined":c(r)))return void console["error"](_0x1c24("0xd"));var n={};n["type"]="notification";n[_0x1c24("0xe")]=e;n["message"]=t;r&&r["metaData"]&&(n["metaData"]=r["metaData"]),f(n,o,i,u)}catch(e){console["error"](e)}}}},function(e,t,r){"use strict";var i=r(6);e["exports"]=function(r,n,o){return function(e,t){try{if(r["silent"])return;if(e&&"string"!=typeof e)return void console["error"]("fundebug.test()的name参数类型必须为string!");if(t&&"string"!=typeof t)return void console["error"]("fundebug.test()的message参数类型必须为string!");i({type:"test",name:e||"Test",message:t||"Hello, Fundebug!"},r,n,o)}catch(e){console["error"](e)}}}},function(e,t,r){"use strict";var u="function"==typeof Symbol&&"symbol"==typeof Symbol["iterator"]?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e["constructor"]===Symbol&&e!==Symbol["prototype"]?"symbol":typeof e},c=r(6);e["exports"]=function(n,o,i){return function(e,t){try{if(n["silent"])return;if(!e)return void console["error"]("fundebug.notifyError()必须指定error参数!");if(!(e instanceof Error))return void console["error"]("fundebug.notifyError()的error参数类型必须为Error实例!");if(t&&"object"!==(void 0===t?"undefined":u(t)))return void console[_0x1c24("0x7")]("fundebug.notifyError()的option参数类型必须为object!");var r={};r["type"]="caught";r["error"]={};r["error"]["name"]=e.name;r["error"]["message"]=e.message;r["error"]["stack"]=e.stack;t&&(t["name"]&&(r["name"]=t["name"]),t["metaData"]&&(r["metaData"]=t["metaData"])),c(r,n,o,i)}catch(e){console["error"](e)}}}}]);
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment