mirror of
https://git.joinsharkey.org/Sharkey/Sharkey.git
synced 2024-12-24 04:13:09 +02:00
Improve cpu and memory chart in control panel
This commit is contained in:
parent
667b18fe24
commit
c2b882a5d7
5 changed files with 26 additions and 18 deletions
|
@ -122,7 +122,7 @@ export default Vue.extend({
|
|||
this.memP = (stats.mem.used / stats.mem.total * 100).toFixed(0);
|
||||
},
|
||||
onStatsLog(statsLog) {
|
||||
statsLog.forEach(stats => this.onStats(stats));
|
||||
statsLog.reverse().forEach(stats => this.onStats(stats));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -15,14 +15,14 @@
|
|||
:points="cpuPolylinePoints"
|
||||
fill="none"
|
||||
stroke="#fff"
|
||||
stroke-width="0.3"/>
|
||||
stroke-width="1"/>
|
||||
</mask>
|
||||
</defs>
|
||||
<rect
|
||||
x="0" y="0"
|
||||
:width="viewBoxX" :height="viewBoxY"
|
||||
:style="`stroke: none; fill: url(#${ cpuGradientId }); mask: url(#${ cpuMaskId })`"/>
|
||||
<text x="1" y="5">CPU <tspan>{{ cpuP }}%</tspan></text>
|
||||
<text x="1" y="12">CPU <tspan>{{ cpuP }}%</tspan></text>
|
||||
</svg>
|
||||
<svg :viewBox="`0 0 ${ viewBoxX } ${ viewBoxY }`">
|
||||
<defs>
|
||||
|
@ -39,14 +39,14 @@
|
|||
:points="memPolylinePoints"
|
||||
fill="none"
|
||||
stroke="#fff"
|
||||
stroke-width="0.3"/>
|
||||
stroke-width="1"/>
|
||||
</mask>
|
||||
</defs>
|
||||
<rect
|
||||
x="0" y="0"
|
||||
:width="viewBoxX" :height="viewBoxY"
|
||||
:style="`stroke: none; fill: url(#${ memGradientId }); mask: url(#${ memMaskId })`"/>
|
||||
<text x="1" y="5">MEM <tspan>{{ memP }}%</tspan></text>
|
||||
<text x="1" y="12">MEM <tspan>{{ memP }}%</tspan></text>
|
||||
</svg>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -59,8 +59,8 @@ export default Vue.extend({
|
|||
props: ['connection'],
|
||||
data() {
|
||||
return {
|
||||
viewBoxX: 50,
|
||||
viewBoxY: 20,
|
||||
viewBoxX: 200,
|
||||
viewBoxY: 70,
|
||||
stats: [],
|
||||
cpuGradientId: uuid(),
|
||||
cpuMaskId: uuid(),
|
||||
|
@ -79,7 +79,8 @@ export default Vue.extend({
|
|||
this.connection.on('statsLog', this.onStatsLog);
|
||||
this.connection.send({
|
||||
type: 'requestLog',
|
||||
id: Math.random().toString()
|
||||
id: Math.random().toString(),
|
||||
length: 200
|
||||
});
|
||||
},
|
||||
beforeDestroy() {
|
||||
|
@ -89,7 +90,7 @@ export default Vue.extend({
|
|||
methods: {
|
||||
onStats(stats) {
|
||||
this.stats.push(stats);
|
||||
if (this.stats.length > 50) this.stats.shift();
|
||||
if (this.stats.length > 200) this.stats.shift();
|
||||
|
||||
const cpuPolylinePoints = this.stats.map((s, i) => [this.viewBoxX - ((this.stats.length - 1) - i), (1 - s.cpu_usage) * this.viewBoxY]);
|
||||
const memPolylinePoints = this.stats.map((s, i) => [this.viewBoxX - ((this.stats.length - 1) - i), (1 - (s.mem.used / s.mem.total)) * this.viewBoxY]);
|
||||
|
@ -103,7 +104,7 @@ export default Vue.extend({
|
|||
this.memP = (stats.mem.used / stats.mem.total * 100).toFixed(0);
|
||||
},
|
||||
onStatsLog(statsLog) {
|
||||
statsLog.forEach(stats => this.onStats(stats));
|
||||
statsLog.reverse().forEach(stats => this.onStats(stats));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -111,8 +112,6 @@ export default Vue.extend({
|
|||
|
||||
<style lang="stylus" scoped>
|
||||
root(isDark)
|
||||
margin-bottom 16px
|
||||
|
||||
> svg
|
||||
display block
|
||||
width 50%
|
||||
|
@ -125,7 +124,7 @@ root(isDark)
|
|||
padding-left 5px
|
||||
|
||||
> text
|
||||
font-size 2px
|
||||
font-size 10px
|
||||
fill isDark ? rgba(#fff, 0.55) : rgba(#000, 0.55)
|
||||
|
||||
> tspan
|
||||
|
|
|
@ -77,4 +77,10 @@ export default Vue.extend({
|
|||
> *:last-child
|
||||
font-size 70%
|
||||
|
||||
> .cpu-memory
|
||||
margin-bottom 16px
|
||||
padding 16px
|
||||
border solid 1px #eee
|
||||
border-radius: 8px
|
||||
|
||||
</style>
|
||||
|
|
|
@ -15,8 +15,8 @@ const interval = 1000;
|
|||
export default function() {
|
||||
const log = new Deque<any>();
|
||||
|
||||
ev.on('requestServerStatsLog', id => {
|
||||
ev.emit('serverStatsLog:' + id, log.toArray());
|
||||
ev.on('requestServerStatsLog', x => {
|
||||
ev.emit('serverStatsLog:' + x.id, log.toArray().slice(0, x.length || 50));
|
||||
});
|
||||
|
||||
async function tick() {
|
||||
|
@ -36,8 +36,8 @@ export default function() {
|
|||
process_uptime: process.uptime()
|
||||
};
|
||||
ev.emit('serverStats', stats);
|
||||
log.push(stats);
|
||||
if (log.length > 50) log.shift();
|
||||
log.unshift(stats);
|
||||
if (log.length > 200) log.pop();
|
||||
}
|
||||
|
||||
tick();
|
||||
|
|
|
@ -22,7 +22,10 @@ export default function(request: websocket.request, connection: websocket.connec
|
|||
body: statsLog
|
||||
}));
|
||||
});
|
||||
ev.emit('requestServerStatsLog', msg.id);
|
||||
ev.emit('requestServerStatsLog', {
|
||||
id: msg.id,
|
||||
length: msg.length
|
||||
});
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue