Implement disk info (%free/%used/%total)
This commit is contained in:
parent
f947d0a446
commit
783707906c
@ -114,6 +114,11 @@ int main(int argc, char *argv[]) {
|
||||
CFG_END()
|
||||
};
|
||||
|
||||
cfg_opt_t disk_opts[] = {
|
||||
CFG_STR("format", "%free", CFGF_NONE),
|
||||
CFG_END()
|
||||
};
|
||||
|
||||
cfg_opt_t opts[] = {
|
||||
CFG_STR_LIST("order", "{ipv6,\"run_watch DHCP\",\"wireless wlan0\",\"ethernet eth0\",\"battery 0\",\"cpu_temperature 0\",load,time}", CFGF_NONE),
|
||||
CFG_SEC("general", general_opts, CFGF_NONE),
|
||||
@ -122,6 +127,7 @@ int main(int argc, char *argv[]) {
|
||||
CFG_SEC("ethernet", ethernet_opts, CFGF_TITLE | CFGF_MULTI),
|
||||
CFG_SEC("battery", battery_opts, CFGF_TITLE | CFGF_MULTI),
|
||||
CFG_SEC("cpu_temperature", temp_opts, CFGF_TITLE | CFGF_MULTI),
|
||||
CFG_SEC("disk", disk_opts, CFGF_TITLE | CFGF_MULTI),
|
||||
CFG_SEC("ipv6", ipv6_opts, CFGF_TITLE),
|
||||
CFG_SEC("time", time_opts, CFGF_NONE),
|
||||
CFG_SEC("load", load_opts, CFGF_NONE),
|
||||
@ -181,6 +187,9 @@ int main(int argc, char *argv[]) {
|
||||
CASE_SEC_TITLE("run_watch")
|
||||
print_run_watch(title, cfg_getstr(sec, "pidfile"), cfg_getstr(sec, "format"));
|
||||
|
||||
CASE_SEC_TITLE("disk")
|
||||
print_disk_info(title, cfg_getstr(sec, "format"));
|
||||
|
||||
CASE_SEC("load")
|
||||
print_load(cfg_getstr(sec, "format"));
|
||||
|
||||
|
@ -62,6 +62,7 @@ char *color(const char *colorstr);
|
||||
char *endcolor() __attribute__ ((pure));
|
||||
|
||||
void print_ipv6_info(const char *format);
|
||||
void print_disk_info(const char *path, const char *format);
|
||||
void print_battery_info(int number, const char *format);
|
||||
void print_time(const char *format);
|
||||
const char *get_ip_addr();
|
||||
|
67
src/print_disk_info.c
Normal file
67
src/print_disk_info.c
Normal file
@ -0,0 +1,67 @@
|
||||
// vim:ts=8:expandtab
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <stdint.h>
|
||||
#include <sys/statvfs.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include "i3status.h"
|
||||
|
||||
#define TERABYTE (1024ULL * 1024 * 1024 * 1024)
|
||||
#define GIGABYTE (1024ULL * 1024 * 1024)
|
||||
#define MEGABYTE (1024ULL * 1024)
|
||||
#define KILOBYTE (1024ULL)
|
||||
|
||||
void print_bytes_human(uint64_t bytes) {
|
||||
/* 1 TB */
|
||||
if (bytes > TERABYTE)
|
||||
printf("%f TB", (double)bytes / TERABYTE);
|
||||
else if (bytes > GIGABYTE)
|
||||
printf("%.01f GB", (double)bytes / GIGABYTE);
|
||||
else if (bytes > MEGABYTE)
|
||||
printf("%.01f MB", (double)bytes / MEGABYTE);
|
||||
else if (bytes > KILOBYTE)
|
||||
printf("%.01f KB", (double)bytes / KILOBYTE);
|
||||
else {
|
||||
printf("%.01f B", (double)bytes);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Just parses /proc/net/wireless looking for lines beginning with
|
||||
* wlan_interface, extracting the quality of the link and adding the
|
||||
* current IP address of wlan_interface.
|
||||
*
|
||||
*/
|
||||
void print_disk_info(const char *path, const char *format) {
|
||||
const char *walk;
|
||||
struct statvfs buf;
|
||||
|
||||
if (statvfs(path, &buf) == -1)
|
||||
return;
|
||||
|
||||
for (walk = format; *walk != '\0'; walk++) {
|
||||
if (*walk != '%') {
|
||||
putchar(*walk);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (BEGINS_WITH(walk+1, "free")) {
|
||||
print_bytes_human(buf.f_bsize * buf.f_bfree);
|
||||
walk += strlen("free");
|
||||
}
|
||||
|
||||
if (BEGINS_WITH(walk+1, "used")) {
|
||||
print_bytes_human(buf.f_bsize * (buf.f_blocks - buf.f_bfree));
|
||||
walk += strlen("used");
|
||||
}
|
||||
|
||||
if (BEGINS_WITH(walk+1, "total")) {
|
||||
print_bytes_human(buf.f_bsize * buf.f_blocks);
|
||||
walk += strlen("total");
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user