48 lines
1.5 KiB
QML
48 lines
1.5 KiB
QML
pragma Singleton
|
|
|
|
import QtQuick
|
|
import Quickshell.Io
|
|
import "." as M
|
|
|
|
QtObject {
|
|
id: root
|
|
|
|
property var byCpu: []
|
|
property var byMem: []
|
|
property int maxItems: 8
|
|
|
|
property Process _proc: Process {
|
|
id: proc
|
|
running: true
|
|
command: ["sh", "-c", "ps aux --sort=-%cpu 2>/dev/null | awk 'NR>1 && NR<=50 {cmd=$11; for(i=12;i<=NF&&i<=13;i++) cmd=cmd\" \"$i; print $1\"|\"$2\"|\"$3\"|\"$4\"|\"cmd}'"]
|
|
stdout: StdioCollector {
|
|
onStreamFinished: {
|
|
const rows = [];
|
|
for (const line of text.trim().split("\n")) {
|
|
if (!line)
|
|
continue;
|
|
const p = line.split("|");
|
|
if (p.length < 5)
|
|
continue;
|
|
const cmd = p[4].replace(/^.*\//, "");
|
|
rows.push({
|
|
"user": p[0],
|
|
"pid": parseInt(p[1]),
|
|
"cpu": parseFloat(p[2]),
|
|
"mem": parseFloat(p[3]),
|
|
"cmd": cmd || p[4]
|
|
});
|
|
}
|
|
root.byCpu = rows.slice().sort((a, b) => b.cpu - a.cpu).slice(0, root.maxItems);
|
|
root.byMem = rows.slice().sort((a, b) => b.mem - a.mem).slice(0, root.maxItems);
|
|
}
|
|
}
|
|
}
|
|
|
|
property Timer _timer: Timer {
|
|
interval: 2000
|
|
running: true
|
|
repeat: true
|
|
onTriggered: proc.running = true
|
|
}
|
|
}
|