158 lines
No EOL
4 KiB
QML
158 lines
No EOL
4 KiB
QML
import QtQuick 2.15
|
|
import QtQuick.Layouts 1.15
|
|
import QtQuick.Controls 2.15
|
|
import Quickshell.Io
|
|
import "root:/Settings" as Settings
|
|
import "root:/Components" as Components
|
|
|
|
Rectangle {
|
|
id: systemMonitor
|
|
width: 70
|
|
height: 200
|
|
color: "transparent"
|
|
|
|
property real cpuUsage: 0
|
|
property real memoryUsage: 0
|
|
property real diskUsage: 0
|
|
property bool isVisible: false
|
|
|
|
// Timers to control when processes run
|
|
Timer {
|
|
id: cpuTimer
|
|
interval: 2000
|
|
repeat: true
|
|
running: isVisible
|
|
onTriggered: cpuInfo.running = true
|
|
}
|
|
|
|
Timer {
|
|
id: memoryTimer
|
|
interval: 3000
|
|
repeat: true
|
|
running: isVisible
|
|
onTriggered: memoryInfo.running = true
|
|
}
|
|
|
|
Timer {
|
|
id: diskTimer
|
|
interval: 5000
|
|
repeat: true
|
|
running: isVisible
|
|
onTriggered: diskInfo.running = true
|
|
}
|
|
|
|
// Process for getting CPU usage
|
|
Process {
|
|
id: cpuInfo
|
|
command: ["sh", "-c", "top -bn1 | grep 'Cpu(s)' | awk '{print $2}' | awk -F'%' '{print $1}'"]
|
|
running: false
|
|
|
|
stdout: SplitParser {
|
|
onRead: data => {
|
|
let usage = parseFloat(data.trim())
|
|
if (!isNaN(usage)) {
|
|
systemMonitor.cpuUsage = usage
|
|
}
|
|
cpuInfo.running = false
|
|
}
|
|
}
|
|
}
|
|
|
|
// Process for getting memory usage
|
|
Process {
|
|
id: memoryInfo
|
|
command: ["sh", "-c", "free | grep Mem | awk '{print int($3/$2 * 100)}'"]
|
|
running: false
|
|
|
|
stdout: SplitParser {
|
|
onRead: data => {
|
|
let usage = parseFloat(data.trim())
|
|
if (!isNaN(usage)) {
|
|
systemMonitor.memoryUsage = usage
|
|
}
|
|
memoryInfo.running = false
|
|
}
|
|
}
|
|
}
|
|
|
|
// Process for getting disk usage
|
|
Process {
|
|
id: diskInfo
|
|
command: ["sh", "-c", "df / | tail -1 | awk '{print int($5)}'"]
|
|
running: false
|
|
|
|
stdout: SplitParser {
|
|
onRead: data => {
|
|
let usage = parseFloat(data.trim())
|
|
if (!isNaN(usage)) {
|
|
systemMonitor.diskUsage = usage
|
|
}
|
|
diskInfo.running = false
|
|
}
|
|
}
|
|
}
|
|
|
|
// Function to start monitoring
|
|
function startMonitoring() {
|
|
isVisible = true
|
|
// Trigger initial readings
|
|
cpuInfo.running = true
|
|
memoryInfo.running = true
|
|
diskInfo.running = true
|
|
}
|
|
|
|
// Function to stop monitoring
|
|
function stopMonitoring() {
|
|
isVisible = false
|
|
cpuInfo.running = false
|
|
memoryInfo.running = false
|
|
diskInfo.running = false
|
|
}
|
|
|
|
Rectangle {
|
|
id: card
|
|
anchors.fill: parent
|
|
color: Settings.Theme.surface
|
|
radius: 18
|
|
|
|
ColumnLayout {
|
|
anchors.fill: parent
|
|
anchors.margins: 8
|
|
spacing: 12
|
|
Layout.alignment: Qt.AlignVCenter
|
|
|
|
// CPU Usage
|
|
Components.CircularProgressBar {
|
|
progress: cpuUsage / 100
|
|
size: 50
|
|
strokeWidth: 4
|
|
hasNotch: true
|
|
notchIcon: "speed"
|
|
notchIconSize: 14
|
|
Layout.alignment: Qt.AlignHCenter
|
|
}
|
|
|
|
// Memory Usage
|
|
Components.CircularProgressBar {
|
|
progress: memoryUsage / 100
|
|
size: 50
|
|
strokeWidth: 4
|
|
hasNotch: true
|
|
notchIcon: "memory"
|
|
notchIconSize: 14
|
|
Layout.alignment: Qt.AlignHCenter
|
|
}
|
|
|
|
// Disk Usage
|
|
Components.CircularProgressBar {
|
|
progress: diskUsage / 100
|
|
size: 50
|
|
strokeWidth: 4
|
|
hasNotch: true
|
|
notchIcon: "storage"
|
|
notchIconSize: 14
|
|
Layout.alignment: Qt.AlignHCenter
|
|
}
|
|
}
|
|
}
|
|
} |