network added
This commit is contained in:
@@ -19,6 +19,13 @@ struct disk_t {
|
||||
char mountpoint[256];
|
||||
};
|
||||
|
||||
struct network_t {
|
||||
uint32_t download;
|
||||
uint32_t upload;
|
||||
char device[32];
|
||||
};
|
||||
|
||||
|
||||
void sys_get_time(struct time_date_t *td);
|
||||
|
||||
void sys_get_load_avg(double *load_avg);
|
||||
@@ -27,4 +34,6 @@ void sys_get_ram(struct memory_t *ram);
|
||||
|
||||
void sys_get_disk(struct disk_t* disk);
|
||||
|
||||
void sys_get_network(struct network_t* network);
|
||||
|
||||
#endif //LINUXSMARTIE_SYS_H
|
||||
25
src/sys.c
25
src/sys.c
@@ -1,5 +1,7 @@
|
||||
#include "sys.h"
|
||||
|
||||
#include "utils.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -42,4 +44,27 @@ void sys_get_disk(struct disk_t* disk) {
|
||||
disk->usage.free = diskData.f_bfree * diskData.f_frsize;
|
||||
disk->usage.used = (diskData.f_blocks - diskData.f_bfree) * diskData.f_frsize;
|
||||
disk->usage.total = diskData.f_blocks * diskData.f_frsize;
|
||||
}
|
||||
|
||||
void sys_get_network(struct network_t* network) {
|
||||
struct _net_t {
|
||||
struct timespec ts;
|
||||
uint64_t rx;
|
||||
uint64_t tx;
|
||||
};
|
||||
|
||||
static char path[128];
|
||||
static char buf[32];
|
||||
static struct _net_t prev;
|
||||
struct _net_t current = {};
|
||||
snprintf(path, sizeof(path), "/sys/class/net/%s/statistics", network->device);
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, ¤t.ts);
|
||||
fast_read_num_u64(path, "rx_bytes", buf, ¤t.rx, 1);
|
||||
fast_read_num_u64(path, "tx_bytes", buf, ¤t.rx, 1);
|
||||
const double ts_diff = (current.ts.tv_sec - prev.ts.tv_sec) + (current.ts.tv_nsec - prev.ts.tv_nsec) / 1000000000.0;
|
||||
network->download = (current.rx - prev.rx) / ts_diff;
|
||||
network->upload = (current.tx - prev.tx) / ts_diff;
|
||||
prev = current;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user