mirror of
https://github.com/noctalia-dev/noctalia-shell.git
synced 2026-05-11 17:08:27 +08:00
feat(bar): sysmon now support network Rx and Tx
This commit is contained in:
@@ -925,6 +925,8 @@
|
||||
"id": "ID",
|
||||
"input": "Input",
|
||||
"name": "Name",
|
||||
"net-rx": "Network RX",
|
||||
"net-tx": "Network TX",
|
||||
"none": "None",
|
||||
"on-hover": "On Hover",
|
||||
"output": "Output",
|
||||
|
||||
@@ -314,6 +314,10 @@ std::unique_ptr<Widget> WidgetFactory::create(const std::string& name, wl_output
|
||||
stat = SysmonStat::SwapPct;
|
||||
} else if (statStr == "disk_pct") {
|
||||
stat = SysmonStat::DiskPct;
|
||||
} else if (statStr == "net_rx") {
|
||||
stat = SysmonStat::NetRx;
|
||||
} else if (statStr == "net_tx") {
|
||||
stat = SysmonStat::NetTx;
|
||||
}
|
||||
const std::string display = wc != nullptr ? wc->getString("display", "gauge") : std::string("gauge");
|
||||
SysmonDisplayMode displayMode = SysmonDisplayMode::Gauge;
|
||||
|
||||
@@ -35,6 +35,16 @@ namespace {
|
||||
bool needsCpuTemp(SysmonStat stat) { return stat == SysmonStat::CpuTemp; }
|
||||
bool needsGpuTemp(SysmonStat stat) { return stat == SysmonStat::GpuTemp; }
|
||||
|
||||
[[nodiscard]] std::string formatNetSpeed(double bytesPerSec) {
|
||||
if (bytesPerSec < 1024.0)
|
||||
return std::format("{:.0f}B", bytesPerSec);
|
||||
if (bytesPerSec < 1024.0 * 1024.0)
|
||||
return std::format("{:.0f}K", bytesPerSec / 1024.0);
|
||||
if (bytesPerSec < 1024.0 * 1024.0 * 1024.0)
|
||||
return std::format("{:.1f}M", bytesPerSec / (1024.0 * 1024.0));
|
||||
return std::format("{:.1f}G", bytesPerSec / (1024.0 * 1024.0 * 1024.0));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
SysmonWidget::SysmonWidget(SystemMonitorService* monitor, wl_output* output, SysmonStat stat, std::string diskPath,
|
||||
@@ -451,6 +461,18 @@ double SysmonWidget::normalizedFromStats(SysmonStat stat, const SystemStats& sta
|
||||
}
|
||||
return 0.0;
|
||||
|
||||
case SysmonStat::NetRx: {
|
||||
if (stats.netRxBytesPerSec > tempMax)
|
||||
tempMax = stats.netRxBytesPerSec;
|
||||
return tempMax > 0.0 ? std::clamp(stats.netRxBytesPerSec / tempMax, 0.0, 1.0) : 0.0;
|
||||
}
|
||||
|
||||
case SysmonStat::NetTx: {
|
||||
if (stats.netTxBytesPerSec > tempMax)
|
||||
tempMax = stats.netTxBytesPerSec;
|
||||
return tempMax > 0.0 ? std::clamp(stats.netTxBytesPerSec / tempMax, 0.0, 1.0) : 0.0;
|
||||
}
|
||||
|
||||
case SysmonStat::DiskPct:
|
||||
return 0.0;
|
||||
}
|
||||
@@ -512,6 +534,12 @@ std::string SysmonWidget::formatValue() const {
|
||||
}
|
||||
return "--";
|
||||
|
||||
case SysmonStat::NetRx:
|
||||
return formatNetSpeed(stats.netRxBytesPerSec);
|
||||
|
||||
case SysmonStat::NetTx:
|
||||
return formatNetSpeed(stats.netTxBytesPerSec);
|
||||
|
||||
case SysmonStat::DiskPct:
|
||||
break; // handled above
|
||||
}
|
||||
@@ -533,6 +561,10 @@ const char* SysmonWidget::glyphName(SysmonStat stat) {
|
||||
case SysmonStat::SwapPct:
|
||||
case SysmonStat::DiskPct:
|
||||
return "storage";
|
||||
case SysmonStat::NetRx:
|
||||
return "download";
|
||||
case SysmonStat::NetTx:
|
||||
return "upload";
|
||||
}
|
||||
return "cpu-usage";
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ class SystemMonitorService;
|
||||
struct SystemStats;
|
||||
struct wl_output;
|
||||
|
||||
enum class SysmonStat { CpuUsage, CpuTemp, GpuTemp, RamUsed, RamPct, SwapPct, DiskPct };
|
||||
enum class SysmonStat { CpuUsage, CpuTemp, GpuTemp, RamUsed, RamPct, SwapPct, DiskPct, NetRx, NetTx };
|
||||
enum class SysmonDisplayMode { Text, Graph, Gauge };
|
||||
|
||||
class SysmonWidget : public Widget {
|
||||
|
||||
@@ -181,6 +181,10 @@ DesktopWidgetFactory::create(const std::string& type,
|
||||
return DesktopSysmonStat::RamPct;
|
||||
if (s == "swap_pct")
|
||||
return DesktopSysmonStat::SwapPct;
|
||||
if (s == "net_rx")
|
||||
return DesktopSysmonStat::NetRx;
|
||||
if (s == "net_tx")
|
||||
return DesktopSysmonStat::NetTx;
|
||||
return DesktopSysmonStat::CpuUsage;
|
||||
};
|
||||
const DesktopSysmonStat stat = parseStat(getStringSetting(settings, "stat", "cpu_usage"));
|
||||
|
||||
@@ -22,6 +22,16 @@ namespace {
|
||||
bool needsCpuTemp(DesktopSysmonStat stat) { return stat == DesktopSysmonStat::CpuTemp; }
|
||||
bool needsGpuTemp(DesktopSysmonStat stat) { return stat == DesktopSysmonStat::GpuTemp; }
|
||||
|
||||
[[nodiscard]] std::string formatNetSpeed(double bytesPerSec) {
|
||||
if (bytesPerSec < 1024.0)
|
||||
return std::format("{:.0f}B", bytesPerSec);
|
||||
if (bytesPerSec < 1024.0 * 1024.0)
|
||||
return std::format("{:.0f}K", bytesPerSec / 1024.0);
|
||||
if (bytesPerSec < 1024.0 * 1024.0 * 1024.0)
|
||||
return std::format("{:.1f}M", bytesPerSec / (1024.0 * 1024.0));
|
||||
return std::format("{:.1f}G", bytesPerSec / (1024.0 * 1024.0 * 1024.0));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
DesktopSysmonWidget::DesktopSysmonWidget(SystemMonitorService* monitor, DesktopSysmonStat stat,
|
||||
@@ -226,6 +236,16 @@ double DesktopSysmonWidget::normalizedFromStats(DesktopSysmonStat stat, const Sy
|
||||
return static_cast<double>(stats.swapUsedMb) / static_cast<double>(stats.swapTotalMb);
|
||||
}
|
||||
return 0.0;
|
||||
|
||||
case DesktopSysmonStat::NetRx:
|
||||
if (stats.netRxBytesPerSec > tempMax)
|
||||
tempMax = stats.netRxBytesPerSec;
|
||||
return tempMax > 0.0 ? std::clamp(stats.netRxBytesPerSec / tempMax, 0.0, 1.0) : 0.0;
|
||||
|
||||
case DesktopSysmonStat::NetTx:
|
||||
if (stats.netTxBytesPerSec > tempMax)
|
||||
tempMax = stats.netTxBytesPerSec;
|
||||
return tempMax > 0.0 ? std::clamp(stats.netTxBytesPerSec / tempMax, 0.0, 1.0) : 0.0;
|
||||
}
|
||||
|
||||
return 0.0;
|
||||
@@ -263,6 +283,12 @@ std::string DesktopSysmonWidget::formatValueFor(DesktopSysmonStat stat) const {
|
||||
100.0 * static_cast<double>(stats.swapUsedMb) / static_cast<double>(stats.swapTotalMb));
|
||||
}
|
||||
return "--";
|
||||
|
||||
case DesktopSysmonStat::NetRx:
|
||||
return formatNetSpeed(stats.netRxBytesPerSec);
|
||||
|
||||
case DesktopSysmonStat::NetTx:
|
||||
return formatNetSpeed(stats.netTxBytesPerSec);
|
||||
}
|
||||
|
||||
return "--";
|
||||
@@ -358,6 +384,10 @@ const char* DesktopSysmonWidget::glyphName(DesktopSysmonStat stat) {
|
||||
return "memory";
|
||||
case DesktopSysmonStat::SwapPct:
|
||||
return "storage";
|
||||
case DesktopSysmonStat::NetRx:
|
||||
return "download";
|
||||
case DesktopSysmonStat::NetTx:
|
||||
return "upload";
|
||||
}
|
||||
return "cpu-usage";
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ class GraphNode;
|
||||
class Label;
|
||||
class SystemMonitorService;
|
||||
|
||||
enum class DesktopSysmonStat : std::uint8_t { CpuUsage, CpuTemp, GpuTemp, RamPct, SwapPct };
|
||||
enum class DesktopSysmonStat : std::uint8_t { CpuUsage, CpuTemp, GpuTemp, RamPct, SwapPct, NetRx, NetTx };
|
||||
|
||||
class DesktopSysmonWidget : public DesktopWidget {
|
||||
public:
|
||||
|
||||
@@ -308,7 +308,8 @@ namespace settings {
|
||||
{"cpu_usage", "settings.widgets.options.cpu-usage"}, {"cpu_temp", "settings.widgets.options.cpu-temp"},
|
||||
{"gpu_temp", "settings.widgets.options.gpu-temp"}, {"ram_used", "settings.widgets.options.ram-used"},
|
||||
{"ram_pct", "settings.widgets.options.ram-percent"}, {"swap_pct", "settings.widgets.options.swap-percent"},
|
||||
{"disk_pct", "settings.widgets.options.disk-percent"},
|
||||
{"disk_pct", "settings.widgets.options.disk-percent"}, {"net_rx", "settings.widgets.options.net-rx"},
|
||||
{"net_tx", "settings.widgets.options.net-tx"},
|
||||
};
|
||||
const std::vector<WidgetSettingSelectOption> sysmonDisplay = {
|
||||
{"gauge", "settings.widgets.options.gauge"},
|
||||
|
||||
Reference in New Issue
Block a user