feat(bar): sysmon now support network Rx and Tx

This commit is contained in:
Lemmy
2026-05-10 17:55:29 -04:00
parent 3bc8774b2a
commit 599fcd6636
8 changed files with 76 additions and 3 deletions
+2
View File
@@ -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",
+4
View File
@@ -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;
+32
View File
@@ -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";
}
+1 -1
View File
@@ -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"},