Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
E
evm-store
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wanli
evm-store
Commits
e1bc1a28
Commit
e1bc1a28
authored
Sep 09, 2021
by
wanli
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
✨
feat: 更新监视器
parent
4842c1df
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
205 additions
and
462 deletions
+205
-462
backend/controller/monitor.py
backend/controller/monitor.py
+16
-13
frontend/src/utils/eventBus.js
frontend/src/utils/eventBus.js
+3
-11
frontend/src/views/system/bytecode-tool.vue
frontend/src/views/system/bytecode-tool.vue
+1
-1
frontend/src/views/system/components/EvmChart.vue
frontend/src/views/system/components/EvmChart.vue
+3
-28
frontend/src/views/system/components/LvglChart.vue
frontend/src/views/system/components/LvglChart.vue
+18
-94
frontend/src/views/system/components/SystemChart.vue
frontend/src/views/system/components/SystemChart.vue
+29
-61
frontend/src/views/system/monitor.vue
frontend/src/views/system/monitor.vue
+135
-254
No files found.
backend/controller/monitor.py
View file @
e1bc1a28
...
...
@@ -10,6 +10,7 @@ import jwt
import
json
import
time
import
logging
from
copy
import
deepcopy
from
app
import
config
from
model.monitor
import
session
,
System
,
Lvgl
,
Evm
,
Image
,
Device
,
Request
,
User
...
...
@@ -237,26 +238,31 @@ class MonitorManager(object):
return
None
if
msg
.
get
(
"request"
):
msg
.
get
(
"request"
)
.
update
({
"watch"
:
watch_id
})
result
=
Request
(
**
msg
.
get
(
"request"
))
obj
=
deepcopy
(
msg
.
get
(
"request"
))
obj
.
update
({
"watch"
:
watch_id
})
result
=
Request
(
**
obj
)
session
.
add
(
result
)
session
.
flush
()
session
.
commit
()
if
msg
.
get
(
"system"
):
msg
.
get
(
"system"
)
.
update
({
"watch"
:
watch_id
})
systemResource
.
post
(
msg
.
get
(
"system"
))
obj
=
deepcopy
(
msg
.
get
(
"system"
))
obj
.
update
({
"watch"
:
watch_id
})
systemResource
.
post
(
obj
)
if
msg
.
get
(
"lvgl"
):
msg
.
get
(
"lvgl"
)
.
update
({
"watch"
:
watch_id
})
lvglResource
.
post
(
msg
.
get
(
"lvgl"
))
obj
=
deepcopy
(
msg
.
get
(
"lvgl"
))
obj
.
update
({
"watch"
:
watch_id
})
lvglResource
.
post
(
obj
)
if
msg
.
get
(
"evm"
):
msg
.
get
(
"evm"
)
.
update
({
"watch"
:
watch_id
})
evmResource
.
post
(
msg
.
get
(
"evm"
))
obj
=
deepcopy
(
msg
.
get
(
"evm"
))
obj
.
update
({
"watch"
:
watch_id
})
evmResource
.
post
(
obj
)
if
msg
.
get
(
"image"
):
imageResource
.
post_array
(
msg
.
get
(
"image"
),
watch_id
)
obj
=
deepcopy
(
msg
.
get
(
"image"
))
imageResource
.
post_array
(
obj
,
watch_id
)
def
check_client
(
self
,
instance
):
index
=
-
1
...
...
@@ -267,7 +273,6 @@ class MonitorManager(object):
return
index
def
receive_message
(
self
,
instance
,
message
):
print
(
instance
.
_clients
,
message
)
if
message
.
get
(
"type"
)
and
message
.
get
(
"token"
):
# 获取token值,检验正确与否,获取uuid
payload
=
jwt
.
decode
(
message
.
get
(
"token"
),
config
[
'SECRET_KEY'
],
verify
=
True
,
algorithms
=
[
'HS256'
],
options
=
{
'verify_aud'
:
False
})
...
...
@@ -297,8 +302,6 @@ class MonitorManager(object):
return
json
.
dumps
({
'code'
:
200
,
'data'
:
None
,
'msg'
:
'unkonw message packet, disconnect by server'
})
def
broadcast_message
(
self
,
clients
,
message
):
print
(
clients
,
message
)
if
not
message
.
get
(
"imei"
):
return
False
...
...
frontend/src/utils/eventBus.js
View file @
e1bc1a28
/*
* @Author: your name
* @Date: 2021-07-01 15:02:16
* @LastEditTime: 2021-08-07 18:29:02
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \evm-store\frontend\src\utils\eventBus.js
*/
import
Vue
from
"
vue
"
;
// import store from "@/store";
export
let
wsNotify
=
new
WebSocket
(
`ws://
${
window
.
location
.
hostname
}
:3000/ws/v1/notify`
`ws://
localhost
:3000/ws/v1/notify`
);
window
.
wsNotify
=
wsNotify
;
...
...
@@ -19,9 +11,9 @@ wsNotify.eventBus = new Vue();
wsNotify
.
eventBus
.
$on
(
"
reconnect
"
,
()
=>
{
wsNotify
=
new
WebSocket
(
`ws://
${
window
.
location
.
hostname
}
:3000/ws/v1/notify`
`ws://
localhost
:3000/ws/v1/notify`
);
})
})
;
// let timer = null;
...
...
frontend/src/views/system/bytecode-tool.vue
View file @
e1bc1a28
...
...
@@ -18,7 +18,7 @@
<div
class=
"el-upload__text"
>
将文件拖到此处,或
<em>
点击上传
</em>
</div>
<div
class=
"el-upload__tip"
slot=
"tip"
>
请选择
evue文件
</div>
<div
class=
"el-upload__tip"
slot=
"tip"
>
请选择
文件(目前支持.js/.evue格式)
</div>
</el-upload>
</el-form-item>
<el-form-item>
...
...
frontend/src/views/system/components/EvmChart.vue
View file @
e1bc1a28
...
...
@@ -9,40 +9,15 @@ import resize from "./mixins/resize";
import
{
getDateTimeString
}
from
"
@/utils/utils
"
;
import
{
wsNotify
}
from
"
@/utils/eventBus.js
"
;
// function randomData() {
// now = new Date(+now + oneDay);
// value = value + Math.random() * 21 - 10;
// return {
// name: "EVM",
// value: [
// [now.getFullYear(), now.getMonth() + 1, now.getDate()].join("/") +
// " " +
// [now.getHours(), now.getMinutes() + 1, now.getSeconds()].join(":"),
// Math.round(value),
// ],
// };
// }
// const dataList = [];
// let now = +new Date(1997, 9, 3);
// const oneDay = 24 * 3600 * 1000;
// var value = Math.random() * 1000;
// for (var i = 0; i
<
1000
;
i
++
)
{
// dataList.push(randomData());
// }
let
chart
=
null
;
const
seriesData
=
{
evue_free_size
:
[],
evue_total_size
:
[],
evue_used_size
:
[],
ext_total_size
:
[],
ext_used_size
:
[],
heap_total_size
:
[],
heap_used_size
:
[],
stack_total_size
:
[],
stack_used_size
:
[]
stack_used_size
:
[],
ext_used_size
:
[],
app_size
:
[]
};
export
default
{
...
...
frontend/src/views/system/components/LvglChart.vue
View file @
e1bc1a28
...
...
@@ -4,7 +4,7 @@
<
script
>
import
*
as
echarts
from
"
echarts
"
;
require
(
"
echarts/theme/macarons
"
);
// echarts theme
require
(
"
echarts/theme/macarons
"
);
import
resize
from
"
./mixins/resize
"
;
import
{
getDateTimeString
}
from
"
@/utils/utils
"
;
import
{
wsNotify
}
from
"
@/utils/eventBus.js
"
;
...
...
@@ -44,96 +44,11 @@ export default {
type
:
Object
,
required
:
true
,
},
dataList
:
{
type
:
Array
,
required
:
false
,
default
:
()
=>
[],
},
},
data
()
{
return
{
series
:
[
{
name
:
"
frag_pct
"
,
type
:
"
line
"
,
showSymbol
:
false
,
emphasis
:
{
scale
:
false
,
focus
:
"
series
"
,
blurScope
:
"
coordinateSystem
"
,
},
data
:
seriesData
.
frag_pct
,
},
{
name
:
"
free_biggest_size
"
,
type
:
"
line
"
,
showSymbol
:
false
,
emphasis
:
{
focus
:
"
series
"
,
blurScope
:
"
coordinateSystem
"
,
},
data
:
seriesData
.
free_biggest_size
,
},
{
name
:
"
free_cnt
"
,
type
:
"
line
"
,
showSymbol
:
false
,
emphasis
:
{
focus
:
"
series
"
,
blurScope
:
"
coordinateSystem
"
,
},
data
:
seriesData
.
free_cnt
,
},
{
name
:
"
free_size
"
,
type
:
"
line
"
,
showSymbol
:
false
,
emphasis
:
{
focus
:
"
series
"
,
blurScope
:
"
coordinateSystem
"
,
},
data
:
seriesData
.
free_size
,
},
{
name
:
"
total_size
"
,
type
:
"
line
"
,
showSymbol
:
false
,
emphasis
:
{
focus
:
"
series
"
,
blurScope
:
"
coordinateSystem
"
,
},
data
:
seriesData
.
total_size
,
},
{
name
:
"
used_cnt
"
,
type
:
"
line
"
,
showSymbol
:
false
,
emphasis
:
{
focus
:
"
series
"
,
blurScope
:
"
coordinateSystem
"
,
},
data
:
seriesData
.
used_cnt
,
},
{
name
:
"
used_pct
"
,
type
:
"
line
"
,
showSymbol
:
false
,
emphasis
:
{
focus
:
"
series
"
,
blurScope
:
"
coordinateSystem
"
,
},
data
:
seriesData
.
used_pct
,
},
],
legendData
:
[
"
frag_pct
"
,
"
free_biggest_size
"
,
"
free_cnt
"
,
"
free_size
"
,
"
total_size
"
,
"
used_cnt
"
,
"
used_pct
"
,
],
series
:
[],
legendData
:
Object
.
keys
(
seriesData
),
};
},
watch
:
{
...
...
@@ -143,14 +58,23 @@ export default {
this
.
handleMessage
(
val
);
},
},
dataList
:
{
deep
:
true
,
handler
(
val
)
{
if
(
val
.
length
>
0
)
this
.
handleData
(
val
);
},
},
},
mounted
()
{
let
array
=
[];
Object
.
keys
(
seriesData
).
forEach
((
k
)
=>
{
array
.
push
({
name
:
k
,
type
:
"
line
"
,
showSymbol
:
false
,
emphasis
:
{
focus
:
"
series
"
,
blurScope
:
"
coordinateSystem
"
,
},
data
:
seriesData
[
k
],
});
});
this
.
series
=
array
;
this
.
$nextTick
(()
=>
{
this
.
initChart
();
});
...
...
frontend/src/views/system/components/SystemChart.vue
View file @
e1bc1a28
...
...
@@ -4,7 +4,7 @@
<
script
>
import
*
as
echarts
from
"
echarts
"
;
require
(
"
echarts/theme/macarons
"
);
// echarts theme
require
(
"
echarts/theme/macarons
"
);
import
resize
from
"
./mixins/resize
"
;
import
{
getDateTimeString
}
from
"
@/utils/utils
"
;
import
{
wsNotify
}
from
"
@/utils/eventBus.js
"
;
...
...
@@ -15,7 +15,7 @@ const seriesData = {
used_space_size
:
[],
};
let
chart
=
null
let
chart
=
null
;
export
default
{
mixins
:
[
resize
],
...
...
@@ -40,47 +40,10 @@ export default {
type
:
Object
,
required
:
true
,
},
dataList
:
{
type
:
Array
,
required
:
false
,
default
:
()
=>
[],
},
},
data
()
{
return
{
series
:
[
{
name
:
"
free_size
"
,
type
:
"
line
"
,
showSymbol
:
false
,
emphasis
:
{
scale
:
false
,
focus
:
"
series
"
,
blurScope
:
"
coordinateSystem
"
,
},
data
:
seriesData
.
free_size
,
},
{
name
:
"
free_space_size
"
,
type
:
"
line
"
,
showSymbol
:
false
,
emphasis
:
{
focus
:
"
series
"
,
blurScope
:
"
coordinateSystem
"
,
},
data
:
seriesData
.
free_space_size
,
},
{
name
:
"
used_space_size
"
,
type
:
"
line
"
,
showSymbol
:
false
,
emphasis
:
{
focus
:
"
series
"
,
blurScope
:
"
coordinateSystem
"
,
},
data
:
seriesData
.
used_space_size
,
},
],
series
:
[],
legendData
:
Object
.
keys
(
seriesData
),
};
},
...
...
@@ -91,14 +54,23 @@ export default {
this
.
handleMessage
(
val
);
},
},
dataList
:
{
deep
:
true
,
handler
(
val
)
{
if
(
val
.
length
>
0
)
this
.
handleData
(
val
);
},
},
},
mounted
()
{
let
array
=
[];
Object
.
keys
(
seriesData
).
forEach
((
k
)
=>
{
array
.
push
({
name
:
k
,
type
:
"
line
"
,
showSymbol
:
false
,
emphasis
:
{
focus
:
"
series
"
,
blurScope
:
"
coordinateSystem
"
,
},
data
:
seriesData
[
k
],
});
});
this
.
series
=
array
;
this
.
$nextTick
(()
=>
{
this
.
initChart
();
});
...
...
@@ -113,13 +85,13 @@ export default {
});
wsNotify
.
eventBus
.
$on
(
"
resize
"
,
()
=>
{
if
(
chart
)
chart
.
resize
()
if
(
chart
)
chart
.
resize
()
;
});
wsNotify
.
eventBus
.
$on
(
"
clear-system-chart
"
,
()
=>
{
chart
.
clear
()
this
.
setOptions
()
})
chart
.
clear
()
;
this
.
setOptions
()
;
})
;
},
beforeDestroy
()
{
if
(
!
chart
)
{
...
...
@@ -130,11 +102,11 @@ export default {
},
methods
:
{
handleData
(
data
)
{
Object
.
keys
(
seriesData
).
forEach
(
key
=>
{
seriesData
[
key
]
=
[]
Object
.
keys
(
seriesData
).
forEach
(
(
key
)
=>
{
seriesData
[
key
]
=
[]
;
});
this
.
series
.
forEach
(
item
=>
{
item
.
data
=
[]
this
.
series
.
forEach
(
(
item
)
=>
{
item
.
data
=
[]
;
});
// chart.dispose();
chart
.
setOption
({
series
:
this
.
series
});
...
...
@@ -180,9 +152,7 @@ export default {
},
xAxis
:
{
type
:
"
time
"
,
splitLine
:
{
},
splitLine
:
{},
axisLabel
:
{
formatter
:
"
{HH}:{mm}:{ss}
"
,
},
...
...
@@ -190,9 +160,7 @@ export default {
yAxis
:
{
type
:
"
value
"
,
// boundaryGap: [0, "100%"],
splitLine
:
{
},
splitLine
:
{},
},
tooltip
:
{
trigger
:
"
axis
"
,
...
...
@@ -207,7 +175,7 @@ export default {
selected
:
{
free_size
:
true
,
free_space_size
:
true
,
used_space_size
:
false
used_space_size
:
false
,
},
},
series
:
this
.
series
,
...
...
frontend/src/views/system/monitor.vue
View file @
e1bc1a28
...
...
@@ -73,25 +73,9 @@
>
<p
class=
"item-title"
>
SYSTEM
</p>
<div
class=
"list-element"
>
<div>
<label>
host
</label>
<p>
{{
systemList
.
host
}}
</p>
</div>
<div>
<label>
timestamp
</label>
<p
style=
"font-size: 13px;"
>
{{
systemList
.
timestamp
}}
</p>
</div>
<div>
<label>
free_size
</label>
<p>
{{
systemList
.
free_size
}}
(KB)
</p>
</div>
<div>
<label>
free_space_size
</label>
<p>
{{
systemList
.
free_space_size
}}
(KB)
</p>
</div>
<div>
<label>
used_space_size
</label>
<p>
{{
systemList
.
used_space_size
}}
(KB)
</p>
<div
v-for=
"(field, index) in Object.keys(system)"
:key=
"index"
>
<label>
{{
field
}}
</label>
<p>
{{
system
[
field
]
}}
</p>
</div>
</div>
</grid-item>
...
...
@@ -109,41 +93,9 @@
>
<p
class=
"item-title"
>
EVM
</p>
<div
class=
"list-element"
>
<div
style=
"background: yellow;"
>
<label>
evue_free_size
</label>
<p>
{{
evmList
.
evue_free_size
}}
(KB)
</p>
</div>
<div
style=
"background: orange;"
>
<label>
evue_total_size
</label>
<p>
{{
evmList
.
evue_total_size
}}
(KB)
</p>
</div>
<div
style=
"background: orange;"
>
<label>
evue_used_size
</label>
<p>
{{
evmList
.
evue_used_size
}}
(KB)
</p>
</div>
<div
style=
"background: yellowgreen;"
>
<label>
ext_total_size
</label>
<p>
{{
evmList
.
ext_total_size
}}
(KB)
</p>
</div>
<div
style=
"background: yellowgreen;"
>
<label>
ext_used_size
</label>
<p>
{{
evmList
.
ext_used_size
}}
(KB)
</p>
</div>
<div
style=
"background: paleturquoise;"
>
<label>
heap_total_size
</label>
<p>
{{
evmList
.
heap_total_size
}}
(KB)
</p>
</div>
<div
style=
"background: paleturquoise;"
>
<label>
heap_used_size
</label>
<p>
{{
evmList
.
heap_used_size
}}
(KB)
</p>
</div>
<div
style=
"background: darksalmon;"
>
<label>
stack_total_size
</label>
<p>
{{
evmList
.
stack_total_size
}}
(KB)
</p>
</div>
<div
style=
"background: darksalmon;"
>
<label>
stack_used_size
</label>
<p>
{{
evmList
.
stack_used_size
}}
(KB)
</p>
<div
v-for=
"(field, index) in Object.keys(evm)"
:key=
"index"
:style=
"
{background: colors[index]}">
<label>
{{
field
}}
</label>
<p>
{{
evm
[
field
]
}}{{
field
|
retouch
}}
</p>
</div>
</div>
</grid-item>
...
...
@@ -161,33 +113,9 @@
>
<p
class=
"item-title"
>
LVGL
</p>
<div
class=
"list-element"
>
<div>
<label>
total_size
</label>
<p>
{{
lvglList
.
total_size
}}
</p>
</div>
<div>
<label>
free_cnt
</label>
<p>
{{
lvglList
.
free_cnt
}}
</p>
</div>
<div>
<label>
free_size
</label>
<p>
{{
lvglList
.
free_size
}}
(KB)
</p>
</div>
<div>
<label>
free_biggest_size
</label>
<p>
{{
lvglList
.
free_biggest_size
}}
(KB)
</p>
</div>
<div>
<label>
used_cnt
</label>
<p>
{{
lvglList
.
used_cnt
}}
</p>
</div>
<div>
<label>
used_pct
</label>
<p>
{{
lvglList
.
used_pct
}}
(%)
</p>
</div>
<div>
<label>
frag_pct
</label>
<p>
{{
lvglList
.
frag_pct
}}
(%)
</p>
<div
v-for=
"(field, index) in Object.keys(lvgl)"
:key=
"index"
>
<label>
{{
field
}}
</label>
<p>
{{
lvgl
[
field
]
}}{{
field
|
retouch
}}
</p>
</div>
</div>
</grid-item>
...
...
@@ -221,29 +149,47 @@
show-overflow-tooltip
></el-table-column>
<el-table-column
label=
"length"
min-width=
"150"
prop=
"png_total_count"
label=
"png_total_count"
min-width=
"110"
show-overflow-tooltip
></el-table-column>
<el-table-column
label=
"heap_used_size"
min-width=
"110"
show-overflow-tooltip
>
<template
slot-scope=
"scope"
>
{{
scope
.
row
.
length
}}
(KB)
</
template
>
{{
scope
.
row
.
heap_used_size
}}
(KB)
</
template
>
</el-table-column>
<el-table-column
label=
"
png_file
_size"
min-width=
"1
5
0"
label=
"
stack_used
_size"
min-width=
"1
1
0"
show-overflow-tooltip
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
png_file
_size
}}
(KB)
</
template
>
{{
scope
.
row
.
stack_used
_size
}}
(KB)
</
template
>
</el-table-column>
<el-table-column
prop=
"png_total_count"
label=
"png_total_count"
min-width=
"150"
label=
"ext_used_size"
min-width=
"100"
show-overflow-tooltip
></el-table-column>
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
ext_used_size
}}
(KB)
</
template
>
</el-table-column>
<el-table-column
label=
"evue file"
min-width=
"80"
show-overflow-tooltip
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
length
}}
(KB)
</
template
>
</el-table-column>
<el-table-column
label=
"png_uncompressed_size"
min-width=
"150"
...
...
@@ -253,6 +199,15 @@
>
{{
scope
.
row
.
png_uncompressed_size
}}
(KB)
</
template
>
</el-table-column>
<el-table-column
label=
"app_size"
min-width=
"110"
show-overflow-tooltip
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
app_size
}}
(KB)
</
template
>
</el-table-column>
</el-table>
</div>
</grid-item>
...
...
@@ -285,8 +240,7 @@
label=
"origin size"
width=
"100"
></el-table-column>
<el-table-column
prop=
"ratio"
label=
"ratio"
width=
"100"
>
</el-table-column>
<el-table-column
prop=
"ratio"
label=
"ratio"
width=
"100"
></el-table-column>
</el-table>
</div>
</grid-item>
...
...
@@ -302,7 +256,7 @@
@
container-resized=
"containerResizedEvent"
@
moved=
"movedEvent"
>
<EvmChart
:chartData=
"evm"
:dataList=
"evmHistory"
></EvmChart>
<EvmChart
:chartData=
"evm"
></EvmChart>
</grid-item>
<grid-item
:x=
"0"
...
...
@@ -328,8 +282,7 @@
prop=
"fileSize"
label=
"应用大小(KB)"
></el-table-column>
<el-table-column
prop=
"fileCount"
label=
"文件个数"
width=
"100"
>
</el-table-column>
<el-table-column
prop=
"fileCount"
label=
"文件个数"
width=
"100"
></el-table-column>
</el-table>
</div>
</grid-item>
...
...
@@ -347,7 +300,6 @@
>
<SystemChart
:chartData=
"system"
:dataList=
"systemHistory"
></SystemChart>
</grid-item>
<grid-item
...
...
@@ -362,7 +314,7 @@
@
container-resized=
"containerResizedEvent"
@
moved=
"movedEvent"
>
<LvglChart
:chartData=
"lvgl"
:dataList=
"lvglHistory"
></LvglChart>
<LvglChart
:chartData=
"lvgl"
></LvglChart>
</grid-item>
</grid-layout>
</div>
...
...
@@ -389,8 +341,7 @@ const dbObject = {
version
:
1
,
// 版本号
primaryKey
:
"
id
"
,
// 主键
keyNames
:
[
{
// 需要存储的数据字段对象
{
// 需要存储的数据字段对象
key
:
"
system.timestamp
"
,
// 字段名
unique
:
false
,
// 当前这条数据是否能重复 (最常用) 默认false
},
...
...
@@ -411,20 +362,40 @@ function isNumber(value) {
function
byteToKiloByte
(
obj
)
{
Object
.
prototype
.
toString
.
call
(
obj
)
===
"
[object Object]
"
&&
Object
.
keys
(
obj
).
forEach
(
k
=>
{
if
(
k
.
indexOf
(
"
size
"
)
!==
-
1
&&
isNumber
(
obj
[
k
]))
{
if
(
(
k
.
indexOf
(
"
size
"
)
!==
-
1
||
k
===
"
length
"
)
&&
isNumber
(
obj
[
k
]))
{
obj
[
k
]
=
Math
.
ceil
(
obj
[
k
]
/
1024
)
}
})
}
function
calculate
(
obj
,
name
,
list
)
{
Object
.
keys
(
obj
).
forEach
((
k
)
=>
{
result
[
name
+
"
First
"
][
k
]
=
0
;
result
[
name
+
"
Last
"
][
k
]
=
0
;
let
first
=
0
,
last
=
Date
.
now
();
const
t
=
list
.
map
((
item
)
=>
{
if
(
item
.
ts
>
first
)
{
first
=
item
.
ts
;
result
[
name
+
"
First
"
][
k
]
=
item
[
k
];
}
if
(
item
.
ts
<
last
)
{
last
=
item
.
ts
;
result
[
name
+
"
Last
"
][
k
]
=
item
[
k
];
}
return
item
[
k
];
});
result
[
name
+
"
Max
"
][
k
]
=
Math
.
max
.
apply
(
null
,
t
);
result
[
name
+
"
Min
"
][
k
]
=
Math
.
min
.
apply
(
null
,
t
);
result
[
name
+
"
Avg
"
][
k
]
=
Math
.
ceil
(
t
.
reduce
((
prev
,
curr
)
=>
prev
+
curr
)
/
t
.
length
);
});
}
function
resetResult
()
{
return
{
systemMax
:
{},
systemMin
:
{},
systemAvg
:
{},
systemFirst
:
{},
systemLast
:
{},
evmMax
:
{},
evmMin
:
{},
evmAvg
:
{},
...
...
@@ -437,6 +408,12 @@ function resetResult() {
lvglFirst
:
{},
lvglLast
:
{},
systemMax
:
{},
systemMin
:
{},
systemAvg
:
{},
systemFirst
:
{},
systemLast
:
{},
systemImg
:
null
,
evmImg
:
null
,
lvglImg
:
null
,
...
...
@@ -448,27 +425,6 @@ function resetResult() {
// 统计使用
const
result
=
resetResult
();
const
system
=
{
free_size
:
null
,
free_space_size
:
null
,
used_space_size
:
null
,
},
evm
=
{
heap_total_size
:
null
,
heap_used_size
:
null
,
stack_total_size
:
null
,
stack_used_size
:
null
,
},
lvgl
=
{
frag_pct
:
null
,
free_biggest_size
:
null
,
free_cnt
:
null
,
free_size
:
null
,
total_size
:
null
,
used_cnt
:
null
,
used_pct
:
null
,
};
export
default
{
name
:
"
Monitor
"
,
data
()
{
...
...
@@ -477,30 +433,16 @@ export default {
pngList
:
[],
globalData
:
null
,
device
:
null
,
devices
:
{},
deviceList
:
null
,
system
:
{
host
:
null
,
timestamp
:
null
,
free_size
:
null
,
free_space_size
:
null
,
used_space_size
:
null
,
},
systemList
:
{
host
:
""
,
timestamp
:
""
,
free_size
:
0
,
free_space_size
:
0
,
used_space_size
:
0
},
systemHistory
:
[],
evmHistory
:
[],
lvglHistory
:
[],
evm
:
{
heap_total_size
:
null
,
heap_used_size
:
null
,
stack_total_size
:
null
,
stack_used_size
:
null
,
},
evmList
:
{
app_size
:
0
,
evue_free_size
:
0
,
evue_total_size
:
0
,
evue_used_size
:
0
,
...
...
@@ -511,18 +453,18 @@ export default {
stack_total_size
:
0
,
stack_used_size
:
0
,
},
lvgl
:
{
},
lvglList
:
{
total
_size
:
0
,
lvgl
:
{
frag_pct
:
0
,
free_biggest
_size
:
0
,
free_cnt
:
0
,
free_size
:
0
,
free_biggest
_size
:
0
,
total
_size
:
0
,
used_cnt
:
0
,
used_pct
:
0
,
frag_pct
:
0
used_pct
:
0
},
image
:
{},
imageList
:
[],
colors
:
[
"
yellow
"
,
"
yellow
"
,
"
yellowgreen
"
,
"
yellowgreen
"
,
"
orange
"
,
"
orange
"
,
"
paleturquoise
"
,
"
paleturquoise
"
,
"
paleturquoise
"
,
"
darksalmon
"
],
pngShowMode
:
true
,
currentPngList
:
[],
socket
:
null
,
...
...
@@ -545,6 +487,15 @@ export default {
filters
:
{
byte2kb
(
val
)
{
return
Math
.
ceil
(
val
/
1024
)
},
retouch
(
key
)
{
if
(
key
.
indexOf
(
"
size
"
)
>
-
1
)
{
return
"
KB
"
}
else
if
(
key
.
indexOf
(
"
pct
"
)
>
-
1
)
{
return
"
%
"
}
else
{
return
""
}
}
},
components
:
{
...
...
@@ -628,77 +579,9 @@ export default {
result
.
appList
=
appList
;
Object
.
keys
(
evm
).
forEach
((
k
)
=>
{
result
.
evmFirst
[
k
]
=
0
;
result
.
evmLast
[
k
]
=
0
;
let
first
=
0
,
last
=
Date
.
now
();
const
t
=
evmList
.
map
((
item
)
=>
{
if
(
item
.
ts
>
first
)
{
first
=
item
.
ts
;
result
.
evmFirst
[
k
]
=
item
[
k
];
}
if
(
item
.
ts
<
last
)
{
last
=
item
.
ts
;
result
.
evmLast
[
k
]
=
item
[
k
];
}
return
item
[
k
];
});
result
.
evmMax
[
k
]
=
Math
.
max
.
apply
(
null
,
t
);
result
.
evmMin
[
k
]
=
Math
.
min
.
apply
(
null
,
t
);
result
.
evmAvg
[
k
]
=
Math
.
ceil
(
t
.
reduce
((
prev
,
curr
)
=>
prev
+
curr
)
/
t
.
length
);
});
Object
.
keys
(
lvgl
).
forEach
((
k
)
=>
{
result
.
lvglFirst
[
k
]
=
0
;
result
.
lvglLast
[
k
]
=
0
;
let
first
=
0
,
last
=
Date
.
now
();
const
t
=
lvglList
.
map
((
item
)
=>
{
if
(
item
.
ts
>
first
)
{
first
=
item
.
ts
;
result
.
lvglFirst
[
k
]
=
item
[
k
];
}
if
(
item
.
ts
<
last
)
{
last
=
item
.
ts
;
result
.
lvglLast
[
k
]
=
item
[
k
];
}
return
item
[
k
];
});
result
.
lvglMax
[
k
]
=
Math
.
max
.
apply
(
null
,
t
);
result
.
lvglMin
[
k
]
=
Math
.
min
.
apply
(
null
,
t
);
result
.
lvglAvg
[
k
]
=
Math
.
ceil
(
t
.
reduce
((
prev
,
curr
)
=>
prev
+
curr
)
/
t
.
length
);
});
Object
.
keys
(
system
).
forEach
((
k
)
=>
{
result
.
systemFirst
[
k
]
=
0
;
result
.
systemLast
[
k
]
=
0
;
let
first
=
0
,
last
=
Date
.
now
();
const
t
=
systemList
.
map
((
item
)
=>
{
if
(
item
.
ts
>
first
)
{
first
=
item
.
ts
;
result
.
systemFirst
[
k
]
=
item
[
k
];
}
if
(
item
.
ts
<
last
)
{
last
=
item
.
ts
;
result
.
systemLast
[
k
]
=
item
[
k
];
}
return
item
[
k
];
});
result
.
systemMax
[
k
]
=
Math
.
max
.
apply
(
null
,
t
);
result
.
systemMin
[
k
]
=
Math
.
min
.
apply
(
null
,
t
);
result
.
systemAvg
[
k
]
=
Math
.
ceil
(
t
.
reduce
((
prev
,
curr
)
=>
prev
+
curr
)
/
t
.
length
);
});
calculate
(
this
.
evm
,
"
evm
"
,
evmList
);
calculate
(
this
.
lvgl
,
"
lvgl
"
,
lvglList
);
calculate
(
this
.
system
,
"
system
"
,
systemList
);
result
.
imei
=
this
.
globalData
.
imei
;
result
.
timestamp
=
this
.
globalData
.
system
.
timestamp
;
...
...
@@ -787,9 +670,9 @@ export default {
})
.
then
((
res
)
=>
{
if
(
res
.
type
==
"
object
"
)
{
this
.
evm
List
=
res
.
data
.
evm
;
this
.
lvgl
List
=
res
.
data
.
lvgl
;
this
.
image
List
=
res
.
data
.
image
;
this
.
evm
=
res
.
data
.
evm
;
this
.
lvgl
=
res
.
data
.
lvgl
;
this
.
image
=
res
.
data
.
image
;
}
})
.
catch
((
err
)
=>
{
...
...
@@ -896,19 +779,14 @@ export default {
// 清空各个表格数据
this
.
imageList
=
[];
this
.
pngList
=
[];
// this.processData(this.devices[this.device]);
// this.resetData();
},
resetData
(
m
)
{
wsNotify
.
eventBus
.
$emit
(
"
resize
"
)
;
if
(
!
m
)
return
;
this
.
evmList
=
{
...
m
.
evm
};
this
.
lvglList
=
{
...
m
.
lvgl
};
this
.
systemList
=
{
imei
:
m
.
imei
,
...
m
.
system
,
};
wsNotify
.
eventBus
.
$emit
(
"
resize
"
);
// 这里需要特殊处理下,先判断uri是否存在,不存在则添加,存在则更新
let
uris
=
[];
let
uris
=
[]
,
pngSize
=
0
;
this
.
imageList
.
forEach
((
item
)
=>
{
item
.
highlight
=
false
;
uris
.
push
(
item
.
uri
);
...
...
@@ -921,33 +799,37 @@ export default {
item
.
highlight
=
false
;
}
const
target
=
this
.
imageList
.
find
((
img
)
=>
img
.
uri
===
item
.
uri
);
if
(
target
)
{
target
.
length
=
item
.
length
;
target
.
png_total_count
=
item
.
png_total_count
;
target
.
highlight
=
item
.
highlight
;
if
(
item
.
png_uncompressed_size
)
{
if
(
item
.
png_uncompressed_size
!==
target
.
png_uncompressed_size
)
{
target
.
png_uncompressed_size
=
item
.
png_uncompressed_size
;
if
(
this
.
pngShowMode
)
this
.
pngList
=
item
.
png_detail
||
[];
if
(
m
.
evm
)
{
item
.
heap_used_size
=
m
.
evm
.
heap_used_size
item
.
stack_used_size
=
m
.
evm
.
stack_used_size
item
.
ext_used_size
=
m
.
evm
.
ext_used_size
}
else
{
item
.
heap_used_size
=
0
;
item
.
stack_used_size
=
0
;
item
.
ext_used_size
=
0
;
}
if
(
item
.
png_detail
&&
Array
.
isArray
(
item
.
png_detail
))
{
pngSize
+=
item
.
png_detail
.
reduce
((
total
,
png
)
=>
total
+
png
.
uncompressed_size
,
0
)
}
if
(
item
.
png_file_size
&&
item
.
png_file_size
!==
target
.
png_file_size
)
target
.
png_file_size
=
item
.
png_file_size
;
item
.
app_size
=
item
.
heap_used_size
+
item
.
stack_used_size
+
item
.
ext_used_size
+
Math
.
ceil
(
pngSize
/
1024
)
item
.
png_uncompressed_size
=
Math
.
ceil
(
pngSize
/
1024
)
const
target
=
this
.
imageList
.
find
((
img
)
=>
img
.
uri
===
item
.
uri
);
if
(
target
)
{
Object
.
keys
(
item
).
forEach
(
k
=>
target
[
k
]
=
item
[
k
])
}
else
{
this
.
imageList
.
push
(
item
);
}
});
if
(
m
)
{
if
(
m
.
evm
)
this
.
evm
=
m
.
evm
;
if
(
m
.
lvgl
)
this
.
lvgl
=
m
.
lvgl
;
if
(
m
.
image
)
this
.
image
=
m
.
image
;
if
(
m
.
system
)
this
.
system
=
m
.
system
;
}
this
.
evm
.
app_size
=
this
.
evm
.
heap_used_size
+
this
.
evm
.
stack_used_size
+
this
.
evm
.
ext_used_size
+
Math
.
ceil
(
pngSize
/
1024
);
if
(
this
.
system
.
timestamp
)
this
.
system
.
timestamp
=
this
.
system
.
timestamp
.
substring
(
11
,
20
);
},
},
mounted
()
{},
...
...
@@ -982,7 +864,6 @@ export default {
else
if
(
res
.
type
===
"
lvgl
"
)
result
.
lvglImg
=
res
.
data
;
else
if
(
res
.
type
===
"
system
"
)
result
.
systemImg
=
res
.
data
;
});
wsNotify
.
eventBus
.
$on
(
"
open
"
,
(
message
)
=>
{
this
.
sendMsg
();
this
.
$nextTick
(()
=>
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment