1
0
Fork 0

Work on memory widget simplification ready for other OSes support.

This commit is contained in:
namedkitten 2020-07-23 15:01:44 +01:00
parent 6ab7a9c88e
commit 48cbb97935

View file

@ -8,12 +8,16 @@ const LoopingCounter = @import("../../types/loopingcounter.zig").LoopingCounter;
const log = std.log; const log = std.log;
const MemInfo = struct { const MemInfo = struct {
memPercent: f64,
memTotal: u64, memTotal: u64,
memFree: u64, memFree: u64,
memUsed: u64,
buffers: u64, buffers: u64,
cached: u64, cached: u64,
swapPercent: f64,
swapTotal: u64, swapTotal: u64,
swapFree: u64, swapFree: u64,
swapUsed: u64,
swapCached: u64, swapCached: u64,
}; };
@ -44,13 +48,17 @@ fn fetchTotalMemory() !MemInfo {
var meminfo_file = try std.fs.cwd().openFile("/proc/meminfo", .{ .read = true, .write = false }); var meminfo_file = try std.fs.cwd().openFile("/proc/meminfo", .{ .read = true, .write = false });
defer meminfo_file.close(); defer meminfo_file.close();
var meminfo = MemInfo{ var memInfo = MemInfo{
.memPercent = 0,
.memTotal = 0, .memTotal = 0,
.memFree = 0, .memFree = 0,
.memUsed = 0,
.buffers = 0, .buffers = 0,
.cached = 0, .cached = 0,
.swapPercent = 0,
.swapTotal = 0, .swapTotal = 0,
.swapFree = 0, .swapFree = 0,
.swapUsed = 0,
.swapCached = 0, .swapCached = 0,
}; };
@ -61,31 +69,31 @@ fn fetchTotalMemory() !MemInfo {
var it = std.mem.tokenize(line, " "); var it = std.mem.tokenize(line, " ");
const line_header = it.next().?; const line_header = it.next().?;
if (std.mem.eql(u8, line_header, "MemTotal:")) { if (std.mem.eql(u8, line_header, "MemTotal:")) {
meminfo.memTotal = try parseKibibytes(it.next().?); memInfo.memTotal = try parseKibibytes(it.next().?);
continue; continue;
} }
if (std.mem.eql(u8, line_header, "MemFree:")) { if (std.mem.eql(u8, line_header, "MemFree:")) {
meminfo.memFree = try parseKibibytes(it.next().?); memInfo.memFree = try parseKibibytes(it.next().?);
continue; continue;
} }
if (std.mem.eql(u8, line_header, "Buffers:")) { if (std.mem.eql(u8, line_header, "Buffers:")) {
meminfo.buffers = try parseKibibytes(it.next().?); memInfo.buffers = try parseKibibytes(it.next().?);
continue; continue;
} }
if (std.mem.eql(u8, line_header, "Cached:")) { if (std.mem.eql(u8, line_header, "Cached:")) {
meminfo.cached = try parseKibibytes(it.next().?); memInfo.cached = try parseKibibytes(it.next().?);
continue; continue;
} }
if (std.mem.eql(u8, line_header, "SwapTotal:")) { if (std.mem.eql(u8, line_header, "SwapTotal:")) {
meminfo.swapTotal = try parseKibibytes(it.next().?); memInfo.swapTotal = try parseKibibytes(it.next().?);
continue; continue;
} }
if (std.mem.eql(u8, line_header, "SwapFree:")) { if (std.mem.eql(u8, line_header, "SwapFree:")) {
meminfo.swapFree = try parseKibibytes(it.next().?); memInfo.swapFree = try parseKibibytes(it.next().?);
continue; continue;
} }
if (std.mem.eql(u8, line_header, "SwapCached:")) { if (std.mem.eql(u8, line_header, "SwapCached:")) {
meminfo.swapCached = try parseKibibytes(it.next().?); memInfo.swapCached = try parseKibibytes(it.next().?);
continue; continue;
} }
} else { } else {
@ -93,8 +101,12 @@ fn fetchTotalMemory() !MemInfo {
break; break;
} }
} }
memInfo.memUsed = memInfo.memTotal - memInfo.memFree - memInfo.buffers - memInfo.cached;
memInfo.swapUsed = memInfo.swapTotal - memInfo.swapFree;
memInfo.memPercent = (@intToFloat(f64, memInfo.memUsed) / @intToFloat(f64, memInfo.memTotal)) * 100;
memInfo.swapPercent = (@intToFloat(f64, memInfo.swapUsed) / @intToFloat(f64, memInfo.swapTotal)) * 100;
return meminfo; return memInfo;
} }
pub const MemoryWidget = struct { pub const MemoryWidget = struct {
@ -127,12 +139,12 @@ pub const MemoryWidget = struct {
if (self.lc.get() == 0) { if (self.lc.get() == 0) {
text = try std.fmt.allocPrint(allocator, "{} {}", .{ text = try std.fmt.allocPrint(allocator, "{} {}", .{
comptimeColour("accentlight", "mem"), comptimeColour("accentlight", "mem"),
formatMemoryPercent(allocator, (@intToFloat(f64, memInfo.memTotal - memInfo.memFree - memInfo.buffers - memInfo.cached) / @intToFloat(f64, memInfo.memTotal)) * 100), formatMemoryPercent(allocator, memInfo.memPercent),
}); });
} else if (self.lc.get() == 1) { } else if (self.lc.get() == 1) {
text = try std.fmt.allocPrint(allocator, "{} {}", .{ text = try std.fmt.allocPrint(allocator, "{} {}", .{
comptimeColour("accentlight", "swap"), comptimeColour("accentlight", "swap"),
formatMemoryPercent(allocator, (@intToFloat(f64, memInfo.swapTotal - memInfo.swapFree) / @intToFloat(f64, memInfo.swapTotal)) * 100), formatMemoryPercent(allocator, memInfo.swapPercent),
}); });
} else if (self.lc.get() == 2) { } else if (self.lc.get() == 2) {
text = try std.fmt.allocPrint(allocator, "{} {d:0<2} MB", .{ text = try std.fmt.allocPrint(allocator, "{} {d:0<2} MB", .{
@ -147,12 +159,12 @@ pub const MemoryWidget = struct {
} else if (self.lc.get() == 4) { } else if (self.lc.get() == 4) {
text = try std.fmt.allocPrint(allocator, "{} {d:0<2} MB", .{ text = try std.fmt.allocPrint(allocator, "{} {d:0<2} MB", .{
comptimeColour("accentlight", "mem used"), comptimeColour("accentlight", "mem used"),
kibibytesToMegabytes(memInfo.memTotal - memInfo.memFree - memInfo.buffers - memInfo.cached), kibibytesToMegabytes(memInfo.memUsed),
}); });
} else if (self.lc.get() == 5) { } else if (self.lc.get() == 5) {
text = try std.fmt.allocPrint(allocator, "{} {d:0<2} MB", .{ text = try std.fmt.allocPrint(allocator, "{} {d:0<2} MB", .{
comptimeColour("accentlight", "swap used"), comptimeColour("accentlight", "swap used"),
kibibytesToMegabytes(memInfo.swapTotal - memInfo.swapFree), kibibytesToMegabytes(memInfo.swapUsed),
}); });
} else if (self.lc.get() == 6) { } else if (self.lc.get() == 6) {
text = try std.fmt.allocPrint(allocator, "{} {d:0<2} MB", .{ text = try std.fmt.allocPrint(allocator, "{} {d:0<2} MB", .{