Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
L
learn-online-pc
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
learn-online-pc
Commits
072b8566
提交
072b8566
authored
10月 22, 2019
作者:
GOD_ZYX
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
client - 1.5.8 和 server - 1.0.3
上级
cd789e0f
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
169 行增加
和
6 行删除
+169
-6
History.md
client/History.md
+5
-0
index.vue
client/client/components/websocket/index.vue
+30
-0
CourseAction.js
client/client/project/actions/CourseAction.js
+1
-1
index.html
client/client/project/index.html
+1
-0
collection.js
client/static/errorCollection/collection.js
+59
-0
History.md
server/History.md
+6
-0
index.html
server/client-dist/index.html
+3
-3
app.2a7d9481.js
server/client-dist/resources/app.2a7d9481.js
+0
-0
app.30ab72d1.js
server/client-dist/resources/app.30ab72d1.js
+0
-0
collection.js
server/client-dist/static/errorCollection/collection.js
+59
-0
SocketMonitor.js
server/server/controller/SocketMonitor.js
+5
-2
没有找到文件。
client/History.md
浏览文件 @
072b8566
PC-1.5.8 / 2019-10-22
==================
*
追加 视频错误信息采集、本地JS报错信息采集。
PC-1.5.7 / 2019-10-10
PC-1.5.7 / 2019-10-10
==================
==================
...
...
client/client/components/websocket/index.vue
浏览文件 @
072b8566
...
@@ -9,6 +9,8 @@ let socket = null
...
@@ -9,6 +9,8 @@ let socket = null
let
auth
=
''
let
auth
=
''
let
delayTime
=
10000
let
delayTime
=
10000
let
isCreateErrorCollection
=
false
export
default
{
export
default
{
data
()
{
data
()
{
return
{
return
{
...
@@ -87,6 +89,34 @@ export default {
...
@@ -87,6 +89,34 @@ export default {
/* 将socket传到服务端,记录是否多开 */
/* 将socket传到服务端,记录是否多开 */
window
.
G
.
socket
=
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
)
},
delayTime
)
}
}
}
}
...
...
client/client/project/actions/CourseAction.js
浏览文件 @
072b8566
...
@@ -188,7 +188,7 @@ export default class CourseAction {
...
@@ -188,7 +188,7 @@ export default class CourseAction {
tempArr
.
push
({
tempArr
.
push
({
name
:
__
.
title
,
name
:
__
.
title
,
created_time
:
__
.
created_time
||
''
,
created_time
:
__
.
created_time
||
''
,
score
:
__
.
score
||
'0'
score
:
__
.
score
===
null
?
'暂无'
:
__
.
score
})
})
}
}
homewrok
.
push
({
homewrok
.
push
({
...
...
client/client/project/index.html
浏览文件 @
072b8566
...
@@ -37,6 +37,7 @@
...
@@ -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/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/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/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 -->
<!-- 直接引入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://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>
<script
type=
"text/javascript"
charset=
"utf-8"
src=
"https://player.alicdn.com/aliplayer/presentation/js/aliplayercomponents.min.js"
></script>
...
...
client/static/errorCollection/collection.js
0 → 100644
浏览文件 @
072b8566
/**
* 监控流程:监控错误 -> 搜集错误 -> 存储错误 -> 分析错误 -> 错误报警-> 定位错误 -> 解决错误
* 前端报错:
* 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
server/History.md
浏览文件 @
072b8566
PC-server-1.0.3 / 2019-10-22
==================
*
追加 视频错误信息采集、本地JS报错信息采集。
PC-server-1.0.2 / 2019-10-15
PC-server-1.0.2 / 2019-10-15
==================
==================
...
...
server/client-dist/index.html
浏览文件 @
072b8566
...
@@ -11,8 +11,8 @@
...
@@ -11,8 +11,8 @@
_paq
.
push
([
'setSiteId'
,
'2'
]);
_paq
.
push
([
'setSiteId'
,
'2'
]);
var
d
=
document
,
g
=
d
.
createElement
(
'script'
),
s
=
d
.
getElementsByTagName
(
'script'
)[
0
];
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
);
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/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/html5shiv.min.js"></script>
<script src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/respond.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>
<![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
\ No newline at end of file
server/client-dist/resources/app.2a7d9481.js
0 → 100644
浏览文件 @
072b8566
差异被折叠。
点击展开。
server/client-dist/resources/app.30ab72d1.js
deleted
100644 → 0
浏览文件 @
cd789e0f
差异被折叠。
点击展开。
server/client-dist/static/errorCollection/collection.js
0 → 100644
浏览文件 @
072b8566
/**
* 监控流程:监控错误 -> 搜集错误 -> 存储错误 -> 分析错误 -> 错误报警-> 定位错误 -> 解决错误
* 前端报错:
* 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
server/server/controller/SocketMonitor.js
浏览文件 @
072b8566
...
@@ -79,13 +79,16 @@ const getData = (_msg) => {
...
@@ -79,13 +79,16 @@ const getData = (_msg) => {
return
return
}
}
}
}
/* 根据action创建目录 */
let
nameDir
=
data
.
action
let
_dateStr
=
DateTime
.
toDateStr
(
new
Date
().
getTime
())
let
_dateStr
=
DateTime
.
toDateStr
(
new
Date
().
getTime
())
let
_dirPath
=
'upload_tmp/
aliVideoErr'
let
_dirPath
=
'upload_tmp/
'
+
nameDir
fs
.
stat
(
_dirPath
+
'/'
+
_dateStr
+
'.txt'
,
(
error
,
stats
)
=>
{
fs
.
stat
(
_dirPath
+
'/'
+
_dateStr
+
'.txt'
,
(
error
,
stats
)
=>
{
if
(
error
)
{
if
(
error
)
{
fs
.
stat
(
_dirPath
,
(
error
,
stats
)
=>
{
fs
.
stat
(
_dirPath
,
(
error
,
stats
)
=>
{
if
(
error
)
{
if
(
error
)
{
Directory
.
mkdir
(
'upload_tmp/
aliVideoErr'
)
Directory
.
mkdir
(
'upload_tmp/
'
+
nameDir
)
}
else
{
}
else
{
fs
.
appendFile
(
_dirPath
+
'/'
+
_dateStr
+
'.txt'
,
JSON
.
stringify
(
data
)
+
'
\
n'
,
function
(
err
)
{
fs
.
appendFile
(
_dirPath
+
'/'
+
_dateStr
+
'.txt'
,
JSON
.
stringify
(
data
)
+
'
\
n'
,
function
(
err
)
{
if
(
err
)
{
console
.
error
(
'123'
,
err
)
}
if
(
err
)
{
console
.
error
(
'123'
,
err
)
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论