@@ -16,6 +16,7 @@ COM =\ | |||||
components/kernel_release\ | components/kernel_release\ | ||||
components/keyboard_indicators\ | components/keyboard_indicators\ | ||||
components/load_avg\ | components/load_avg\ | ||||
components/netspeeds\ | |||||
components/num_files\ | components/num_files\ | ||||
components/ram\ | components/ram\ | ||||
components/run_command\ | components/run_command\ | ||||
@@ -19,6 +19,7 @@ Features | |||||
- Kernel version | - Kernel version | ||||
- Keyboard indicators | - Keyboard indicators | ||||
- Load average | - Load average | ||||
- Network speeds (RX and TX) | |||||
- Number of files in a directory (hint: Maildir) | - Number of files in a directory (hint: Maildir) | ||||
- Memory status (free memory, percentage, total memory and used memory) | - Memory status (free memory, percentage, total memory and used memory) | ||||
- Swap status (free swap, percentage, total swap and used swap) | - Swap status (free swap, percentage, total swap and used swap) | ||||
@@ -0,0 +1,53 @@ | |||||
/* See LICENSE file for copyright and license details. */ | |||||
#include <stdio.h> | |||||
#include <limits.h> | |||||
#include "../util.h" | |||||
#if defined(__linux__) | |||||
const char * | |||||
netspeed_rx(const char *interface) | |||||
{ | |||||
static int valid; | |||||
static unsigned long long rxbytes; | |||||
unsigned long oldrxbytes; | |||||
extern const unsigned int interval; | |||||
char path[PATH_MAX]; | |||||
oldrxbytes = rxbytes; | |||||
snprintf(path, sizeof(path), "/sys/class/net/%s/statistics/rx_bytes", interface); | |||||
if (pscanf(path, "%llu", &rxbytes) != 1) { | |||||
return NULL; | |||||
} | |||||
if (!valid) { | |||||
valid = 1; | |||||
return NULL; | |||||
} | |||||
return fmt_scaled((rxbytes - oldrxbytes) / interval * 1000); | |||||
} | |||||
const char * | |||||
netspeed_tx(const char *interface) | |||||
{ | |||||
static int valid; | |||||
static unsigned long long txbytes; | |||||
unsigned long oldtxbytes; | |||||
extern const unsigned int interval; | |||||
char path[PATH_MAX]; | |||||
oldtxbytes = txbytes; | |||||
snprintf(path, sizeof(path), "/sys/class/net/%s/statistics/tx_bytes", interface); | |||||
if (pscanf(path, "%llu", &txbytes) != 1) { | |||||
return NULL; | |||||
} | |||||
if (!valid) { | |||||
valid = 1; | |||||
return NULL; | |||||
} | |||||
return fmt_scaled((txbytes - oldtxbytes) / interval * 1000); | |||||
} | |||||
#elif defined(__OpenBSD__) | |||||
/* unimplemented */ | |||||
#endif |
@@ -37,6 +37,10 @@ const char *keyboard_indicators(void); | |||||
/* load_avg */ | /* load_avg */ | ||||
const char *load_avg(const char *); | const char *load_avg(const char *); | ||||
/* netspeeds */ | |||||
const char *netspeed_rx(const char *); | |||||
const char *netspeed_tx(const char *); | |||||
/* num_files */ | /* num_files */ | ||||
const char *num_files(const char *); | const char *num_files(const char *); | ||||