statusbar/src/modules/uptime.zig

36 lines
1.1 KiB
Zig
Raw Normal View History

2024-03-15 18:30:35 -06:00
const std = @import("std");
const Module = @import("../module.zig");
const Self = @This();
module: Module,
2024-03-15 19:15:59 -06:00
pub fn init(allocator: std.mem.Allocator) Self {
2024-03-15 18:30:35 -06:00
return .{
.module = .{
.allocator = allocator,
.getJsonFn = getJson,
},
};
}
pub fn getJson(module: *const Module) !Module.JSON {
const self = @fieldParentPtr(Self, "module", module);
2024-03-15 19:15:59 -06:00
var uptime_file = try std.fs.openFileAbsolute("/proc/uptime", .{});
defer uptime_file.close();
2024-03-15 18:30:35 -06:00
2024-03-15 19:15:59 -06:00
const uptime_string = try uptime_file.reader().readAllAlloc(self.module.allocator, 256);
var uptime_split = std.mem.splitScalar(u8, uptime_string[0 .. uptime_string.len - 1], ' ');
var uptime = try std.fmt.parseFloat(f32, uptime_split.first());
2024-03-15 18:30:35 -06:00
2024-03-15 19:15:59 -06:00
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;
2024-03-15 18:30:35 -06:00
return .{
2024-03-15 19:15:59 -06:00
.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 }),
2024-03-15 18:30:35 -06:00
};
}