From 25cd2dcfe83b8a7fd929efe208534a9f1340d66f Mon Sep 17 00:00:00 2001 From: Jeeves Date: Fri, 15 Mar 2024 20:15:29 -0600 Subject: [PATCH 1/3] add memory module --- src/main.zig | 2 ++ src/modules/memory.zig | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 src/modules/memory.zig diff --git a/src/main.zig b/src/main.zig index 725171c..60e71af 100644 --- a/src/main.zig +++ b/src/main.zig @@ -8,6 +8,7 @@ const calendar = @import("modules/calendar.zig"); const display = @import("modules/display.zig"); const uptime = @import("modules/uptime.zig"); const volume = @import("modules/volume.zig"); +const memory = @import("modules/memory.zig"); const Module = @import("module.zig"); pub fn main() !void { @@ -23,6 +24,7 @@ pub fn main() !void { var modules = [_]Module{ uptime.init(arena.allocator()).module, + memory.init(arena.allocator()).module, volume.init(arena.allocator()).module, display.init(arena.allocator()).module, battery.init(arena.allocator()).module, diff --git a/src/modules/memory.zig b/src/modules/memory.zig new file mode 100644 index 0000000..b7291a2 --- /dev/null +++ b/src/modules/memory.zig @@ -0,0 +1,40 @@ +const std = @import("std"); +const Module = @import("../module.zig"); +const Self = @This(); + +module: Module, + +pub fn init(allocator: std.mem.Allocator) Self { + return .{ + .module = .{ + .allocator = allocator, + .getJsonFn = getJson, + }, + }; +} + +pub fn getJson(module: *const Module) !Module.JSON { + const self = @fieldParentPtr(Self, "module", module); + + var meminfo_file = try std.fs.openFileAbsolute("/proc/meminfo", .{}); + defer meminfo_file.close(); + + const meminfo_string = try meminfo_file.reader().readAllAlloc(self.module.allocator, 4096); + const mem_total_idx = std.mem.indexOf(u8, meminfo_string, "MemTotal:"); + const mem_available_idx = std.mem.indexOf(u8, meminfo_string, "MemAvailable:"); + const mem_total_newline = std.mem.indexOfScalarPos(u8, meminfo_string, mem_total_idx.?, '\n'); + const mem_available_newline = std.mem.indexOfScalarPos(u8, meminfo_string, mem_available_idx.?, '\n'); + var mem_total_split = std.mem.splitBackwardsScalar(u8, meminfo_string[mem_total_idx.?..mem_total_newline.?], ' '); + var mem_available_split = std.mem.splitBackwardsScalar(u8, meminfo_string[mem_available_idx.?..mem_available_newline.?], ' '); + _ = mem_total_split.next(); + _ = mem_available_split.next(); + + const mem_total = try std.fmt.parseInt(usize, mem_total_split.next().?, 10); + const mem_available = try std.fmt.parseInt(usize, mem_available_split.next().?, 10); + + const mem = @as(f32, @floatFromInt(mem_total)) - @as(f32, @floatFromInt(mem_available)); + + return .{ + .full_text = try std.fmt.allocPrint(self.module.allocator, "{d:.3} GB", .{mem / 1000 / 1000}), + }; +} From c57cd52e840f820d4db6f47b1a93721b56eb6dc4 Mon Sep 17 00:00:00 2001 From: Jeeves Date: Fri, 15 Mar 2024 20:41:50 -0600 Subject: [PATCH 2/3] memory: include total rounded to nearest integer --- src/modules/memory.zig | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/modules/memory.zig b/src/modules/memory.zig index b7291a2..18c40e7 100644 --- a/src/modules/memory.zig +++ b/src/modules/memory.zig @@ -29,12 +29,11 @@ pub fn getJson(module: *const Module) !Module.JSON { _ = mem_total_split.next(); _ = mem_available_split.next(); - const mem_total = try std.fmt.parseInt(usize, mem_total_split.next().?, 10); - const mem_available = try std.fmt.parseInt(usize, mem_available_split.next().?, 10); - - const mem = @as(f32, @floatFromInt(mem_total)) - @as(f32, @floatFromInt(mem_available)); + const mem_total: f32 = @floatFromInt(try std.fmt.parseInt(usize, mem_total_split.next().?, 10)); + const mem_available: f32 = @floatFromInt(try std.fmt.parseInt(usize, mem_available_split.next().?, 10)); + const mem = mem_total - mem_available; return .{ - .full_text = try std.fmt.allocPrint(self.module.allocator, "{d:.3} GB", .{mem / 1000 / 1000}), + .full_text = try std.fmt.allocPrint(self.module.allocator, "{d:.3}/{d:.0} GB", .{ mem / 1000 / 1000, mem_total / 1000 / 1000 }), }; } From 5c1fd21a84d17dcf765e297703751c924cadfe2a Mon Sep 17 00:00:00 2001 From: Jeeves Date: Fri, 15 Mar 2024 20:42:20 -0600 Subject: [PATCH 3/3] uptime: fix math --- src/modules/uptime.zig | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/modules/uptime.zig b/src/modules/uptime.zig index 70260af..351cfef 100644 --- a/src/modules/uptime.zig +++ b/src/modules/uptime.zig @@ -23,13 +23,13 @@ pub fn getJson(module: *const Module) !Module.JSON { var uptime_split = std.mem.splitScalar(u8, uptime_string[0 .. uptime_string.len - 1], ' '); var uptime = try std.fmt.parseFloat(f32, uptime_split.first()); - const days = uptime / std.time.s_per_day; - uptime -= std.time.s_per_day * @floor(days); - const hours = uptime / std.time.s_per_hour; - uptime -= std.time.s_per_hour * @floor(hours); - const mins = uptime / std.time.s_per_min; + uptime /= 60; + const mins = @mod(uptime, 60); + uptime /= 60; + const hours = @mod(uptime, 24); + uptime /= 24; return .{ - .full_text = try std.fmt.allocPrint(self.module.allocator, "{d:0>1.0}d {d:0>1.0}h {d:.0}m", .{ days, hours, mins }), + .full_text = try std.fmt.allocPrint(self.module.allocator, "{d:0>1.0}d {d:0>1.0}h {d:.0}m", .{ uptime, hours, mins }), }; }