}
}
-int parse_int(char* s) {
+long parse_int(char* s) {
if (s == NULL) {
return -1;
}
errno = 0;
- int value = strtol(s, NULL, 10);
+ long value = strtol(s, NULL, 10);
if (errno != 0) {
fprintf(stderr, "Failed to parse string: %s -- %s\n", strerror(errno), s);
return -1;
return 100 - (int)round(idle_jiffys_per_cpu_second);
}
-int read_mem_free_mibis() {
+int read_meminfo(int* mem_free_mibis, int* mem_total_mibis) {
char* meminfo = read_file("/proc/meminfo");
if (meminfo == NULL) {
fprintf(stderr, "Failed reading file /proc/meminfo: %s\n", strerror(errno));
return -1;
}
+ *mem_free_mibis = -1;
+ *mem_total_mibis = -1;
+
while (*meminfo) {
char* line = read_next_line(&meminfo);
if (line == NULL) {
if (strcmp(key, "MemAvailable") == 0) {
int mem_available = parse_int(value_str);
- return (int)round((double)mem_available / 1024);
+ *mem_free_mibis = (int)round((double)mem_available / 1024);
+ }
+
+ if (strcmp(key, "MemTotal") == 0) {
+ int mem_available = parse_int(value_str);
+ *mem_total_mibis = (int)round((double)mem_available / 1024);
}
}
- fprintf(stderr, "Failed to find MemAvailable in /proc/meminfo\n");
- return -1;
+ if (*mem_free_mibis < 0 || *mem_total_mibis < 0) {
+ fprintf(stderr, "Failed to find field in /proc/meminfo\n");
+ return -1;
+ } else {
+ return 0;
+ }
}
int read_zfs_arc_used_mibis() {
}
if (strcmp(key, "size") == 0) {
- int arc_used = parse_int(value_str);
+ long arc_used = parse_int(value_str);
return (int)round((double)arc_used / 1024 / 1024);
}
}
}
printf(
- "%s <span color='%s'>%d</span>%s ",
+ "%s <span color='%s'>%d</span>%s\n",
name, color, value, units
);
}
int main(int argc, char** argv) {
char* show_flags = "cmb";
- if (argc == 2) {
+ char* top_padding = "0";
+ if (argc >= 2) {
show_flags = argv[1];
}
+ if (argc >= 3) {
+ top_padding = argv[2];
+ }
- printf("<txt>");
+ printf("<txt><span size=\"%s\">\n</span>", top_padding);
if (strchr(show_flags, 'c')) {
print_red_threshold(
}
if (strchr(show_flags, 'm')) {
+ int mem_free_mibis, mem_total_mibis;
+ read_meminfo(&mem_free_mibis, &mem_total_mibis);
print_red_threshold(
"mem", " MiB",
- read_mem_free_mibis() + read_zfs_arc_used_mibis(),
- 0, 512
+ mem_free_mibis + read_zfs_arc_used_mibis(),
+ 0, mem_total_mibis / 10
);
}