提交 072b8566 authored 作者: GOD_ZYX's avatar GOD_ZYX

client - 1.5.8 和 server - 1.0.3

上级 cd789e0f
PC-1.5.8 / 2019-10-22
==================
* 追加 视频错误信息采集、本地JS报错信息采集。
PC-1.5.7 / 2019-10-10
==================
......
......@@ -9,6 +9,8 @@ let socket = null
let auth = ''
let delayTime = 10000
let isCreateErrorCollection = false
export default {
data () {
return {
......@@ -87,6 +89,34 @@ export default {
/* 将socket传到服务端,记录是否多开 */
window.G.socket = socket
}
/* 采集所有本地JS报错 - 错误信息 */
if (!isCreateErrorCollection && window.G && window.G.UserInfo && window.G.UserInfo.student_info && window.recordJavaScriptError) {
let socket = window.G.socket
let str = ''
let version = window.G.VERSION // 客户端版本号,每次更新后,更新版本号。可以方便查看是否客户端都是最新版本
if (window.G.UserInfo && window.G.UserInfo.student_info) {
let tmp_info = window.G.UserInfo.student_info // eslint-disable-line
str = tmp_info.personal_name + ':' + tmp_info.telephone + ':' + tmp_info.email + ':' + tmp_info.id + ':' + window.G.UserInfo.auth_key + ':' + (window.G.pwd || '')
}
str += ':' + version
window.recordJavaScriptError(function (_data) {
if (socket && socket.readyState === 1) {
let _d = _data || {}
_d.UA = window.navigator.userAgent
var arr = JSON.stringify({ 'action': 'PC-ClientJSErr', info: Base64.encode(str), 'auth': 'PC-ClientJSErr', 'err': Base64.encode(JSON.stringify(_d)) }).split('')
// var arr = JSON.stringify({ 'action': 'PC-ClientJSErr', info: Base64.encode(str), 'auth': 'PC-ClientJSErr' }).split('')
var strArr = []
for (var i = 0; i < arr.length; i++) {
strArr[i] = arr[i].charCodeAt()
}
var data = new Uint8Array(strArr)
socket.send(data.buffer)
} else {
console.log('not link build success, status: ' + socket.readyState)
}
})
}
}, delayTime)
}
}
......
......@@ -188,7 +188,7 @@ export default class CourseAction {
tempArr.push({
name: __.title,
created_time: __.created_time || '',
score: __.score || '0'
score: __.score === null ? '暂无' : __.score
})
}
homewrok.push({
......
......@@ -37,6 +37,7 @@
<script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/videoJs/videoJs.js"></script>
<script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/convertString/base64-new.js"></script>
<script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/notify/notification.js"></script>
<script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/errorCollection/collection.js"></script>
<!-- 直接引入aliyun播放插件 JS -->
<script type="text/javascript" charset="utf-8" src="https://g.alicdn.com/de/prismplayer/2.8.2/aliplayer-min.js"></script>
<script type="text/javascript" charset="utf-8" src="https://player.alicdn.com/aliplayer/presentation/js/aliplayercomponents.min.js"></script>
......
/**
* 监控流程:监控错误 -> 搜集错误 -> 存储错误 -> 分析错误 -> 错误报警-> 定位错误 -> 解决错误
* 前端报错:
* 1. js编译时异常(开发阶段就能排) - 开发直接查询
* 2. js运行时异常 - onerror、
* 3. 加载静态资源异常(路径写错、资源服务器异常、CDN异常、跨域)
* 4. 接口请求异常
*/
/**
* 页面JS错误监控
* 1. 重写window.onerror 方法
* 2. 重写console.error方法,如果App首次向浏览器注入的Js代码报错了,window.onerror是无法监控到的,所以只能重写console.error的方式来进行捕获,也许会有更好的办法
* 3. 重写window.onunhandledrejection方法,当你用到Promise的时候,而你又忘记写reject的捕获方法的时候,系统总是会抛出一个叫 Unhandled Promise rejection. 没有堆栈,没有其他信息,特别是在写fetch请求的时候很容易发生。
*
* 设置回调,回调中上传错误信息
*/
var jsMonitorStarted = false
function recordJavaScriptError (callback) {
// 重写console.error, 可以捕获更全面的报错信息
var oldError = console.error
console.error = function () {
// arguments的长度为2时,才是error上报的时机
// if (arguments.length < 2) return;
var errorMsg = arguments[0] && arguments[0].message
var url = window.location.href
var lineNumber = 0
var columnNumber = 0
var errorObj = arguments[0] && arguments[0].stack
if (!errorObj) errorObj = arguments[0]
// 如果onerror重写成功,就无需在这里进行上报了
!jsMonitorStarted && siftAndMakeUpMessage(errorMsg, url, lineNumber, columnNumber, errorObj)
return oldError.apply(console, arguments)
}
// 重写 onerror 进行jsError的监听
window.onerror = function (errorMsg, url, lineNumber, columnNumber, errorObj) {
jsMonitorStarted = true
var errorStack = errorObj ? errorObj.stack : null
siftAndMakeUpMessage(errorMsg, url, lineNumber, columnNumber, errorStack)
}
function siftAndMakeUpMessage (originErrorMsg, originUrl, originLineNumber, originColumnNumber, originErrorObj) {
var errorMsg = originErrorMsg || ''
var errorObj = originErrorObj || ''
var errorType = ''
if (errorMsg) {
var errorStackStr = JSON.stringify(errorObj)
errorType = errorStackStr.split(': ')[0].replace(/"/, '')
}
var _obj = {
errorType: errorType,
errorMsg: errorMsg,
errorObj: errorObj
}
callback(_obj)
}
}
window.recordJavaScriptError = recordJavaScriptError
PC-server-1.0.3 / 2019-10-22
==================
* 追加 视频错误信息采集、本地JS报错信息采集。
PC-server-1.0.2 / 2019-10-15
==================
......
......@@ -11,8 +11,8 @@
_paq.push(['setSiteId', '2']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
})();</script><link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.8.2/skins/default/aliplayer-min.css"><link rel="shortcut icon" href="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/favicon.ico"><link href="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/app.9b6504abad54.css" rel="stylesheet"></head><body><div id="app"></div><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/es5-shim.min.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/es5-sham.min.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/ckeditor/ckeditor.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/videoJs/videoJs.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/convertString/base64-new.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/notify/notification.js"></script><script type="text/javascript" charset="utf-8" src="https://g.alicdn.com/de/prismplayer/2.8.2/aliplayer-min.js"></script><script type="text/javascript" charset="utf-8" src="https://player.alicdn.com/aliplayer/presentation/js/aliplayercomponents.min.js"></script><!--[if lt IE 9]>
})();</script><link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.8.2/skins/default/aliplayer-min.css"><link rel="shortcut icon" href="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/favicon.ico"><link href="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/app.9b6504abad54.css" rel="stylesheet"></head><body><div id="app"></div><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/es5-shim.min.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/es5-sham.min.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/ckeditor/ckeditor.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/videoJs/videoJs.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/convertString/base64-new.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/notify/notification.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/errorCollection/collection.js"></script><script type="text/javascript" charset="utf-8" src="https://g.alicdn.com/de/prismplayer/2.8.2/aliplayer-min.js"></script><script type="text/javascript" charset="utf-8" src="https://player.alicdn.com/aliplayer/presentation/js/aliplayercomponents.min.js"></script><!--[if lt IE 9]>
<script src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/console-polyfill.js"></script>
<script src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/html5shiv.min.js"></script>
<script src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/respond.min.js"></script>
<![endif]--><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/manifest.31e1f7d8.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/vendor.b388921e.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/app.30ab72d1.js"></script></body></html>
\ No newline at end of file
<![endif]--><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/manifest.31e1f7d8.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/vendor.b388921e.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/app.2a7d9481.js"></script></body></html>
\ No newline at end of file
差异被折叠。
/**
* 监控流程:监控错误 -> 搜集错误 -> 存储错误 -> 分析错误 -> 错误报警-> 定位错误 -> 解决错误
* 前端报错:
* 1. js编译时异常(开发阶段就能排) - 开发直接查询
* 2. js运行时异常 - onerror、
* 3. 加载静态资源异常(路径写错、资源服务器异常、CDN异常、跨域)
* 4. 接口请求异常
*/
/**
* 页面JS错误监控
* 1. 重写window.onerror 方法
* 2. 重写console.error方法,如果App首次向浏览器注入的Js代码报错了,window.onerror是无法监控到的,所以只能重写console.error的方式来进行捕获,也许会有更好的办法
* 3. 重写window.onunhandledrejection方法,当你用到Promise的时候,而你又忘记写reject的捕获方法的时候,系统总是会抛出一个叫 Unhandled Promise rejection. 没有堆栈,没有其他信息,特别是在写fetch请求的时候很容易发生。
*
* 设置回调,回调中上传错误信息
*/
var jsMonitorStarted = false
function recordJavaScriptError (callback) {
// 重写console.error, 可以捕获更全面的报错信息
var oldError = console.error
console.error = function () {
// arguments的长度为2时,才是error上报的时机
// if (arguments.length < 2) return;
var errorMsg = arguments[0] && arguments[0].message
var url = window.location.href
var lineNumber = 0
var columnNumber = 0
var errorObj = arguments[0] && arguments[0].stack
if (!errorObj) errorObj = arguments[0]
// 如果onerror重写成功,就无需在这里进行上报了
!jsMonitorStarted && siftAndMakeUpMessage(errorMsg, url, lineNumber, columnNumber, errorObj)
return oldError.apply(console, arguments)
}
// 重写 onerror 进行jsError的监听
window.onerror = function (errorMsg, url, lineNumber, columnNumber, errorObj) {
jsMonitorStarted = true
var errorStack = errorObj ? errorObj.stack : null
siftAndMakeUpMessage(errorMsg, url, lineNumber, columnNumber, errorStack)
}
function siftAndMakeUpMessage (originErrorMsg, originUrl, originLineNumber, originColumnNumber, originErrorObj) {
var errorMsg = originErrorMsg || ''
var errorObj = originErrorObj || ''
var errorType = ''
if (errorMsg) {
var errorStackStr = JSON.stringify(errorObj)
errorType = errorStackStr.split(': ')[0].replace(/"/, '')
}
var _obj = {
errorType: errorType,
errorMsg: errorMsg,
errorObj: errorObj
}
callback(_obj)
}
}
window.recordJavaScriptError = recordJavaScriptError
......@@ -79,13 +79,16 @@ const getData = (_msg) => {
return
}
}
/* 根据action创建目录 */
let nameDir = data.action
let _dateStr = DateTime.toDateStr(new Date().getTime())
let _dirPath = 'upload_tmp/aliVideoErr'
let _dirPath = 'upload_tmp/' + nameDir
fs.stat(_dirPath + '/' + _dateStr + '.txt', (error, stats) => {
if (error) {
fs.stat(_dirPath, (error, stats) => {
if (error) {
Directory.mkdir('upload_tmp/aliVideoErr')
Directory.mkdir('upload_tmp/' + nameDir)
} else {
fs.appendFile(_dirPath + '/' + _dateStr + '.txt', JSON.stringify(data) + '\n', function (err) {
if (err) { console.error('123', err) }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论