library: Fix up stat API

Adjusted vmstat to use the new API for memory and CPU statistics
This commit is contained in:
Craig Small
2015-06-23 22:22:50 +10:00
parent ca4a09c432
commit 05efbebb66
8 changed files with 208 additions and 119 deletions

View File

@@ -38,13 +38,13 @@ struct meminfo_data {
unsigned long high_total;
unsigned long low_free;
unsigned long low_total;
unsigned long main_available;
unsigned long main_buffers;
unsigned long main_cached;
unsigned long main_free;
unsigned long main_shared;
unsigned long main_total;
unsigned long main_used;
unsigned long available;
unsigned long buffers;
unsigned long cached;
unsigned long free;
unsigned long shared;
unsigned long total;
unsigned long used;
unsigned long swap_free;
unsigned long swap_total;
unsigned long swap_used;
@@ -131,23 +131,23 @@ PROCPS_EXPORT int procps_meminfo_read(struct procps_meminfo *info)
} else if (0 == strcmp(head, "LowTotal:")) {
valptr = &(info->data.low_total);
} else if (0 == strcmp(head, "MemAvailable:")) {
valptr = &(info->data.main_available);
valptr = &(info->data.available);
} else if (0 == strcmp(head, "Buffers:")) {
valptr = &(info->data.main_buffers);
valptr = &(info->data.buffers);
} else if (0 == strcmp(head, "Cached:")) {
valptr = &(info->data.main_cached);
valptr = &(info->data.cached);
} else if (0 == strcmp(head, "MemFree:")) {
valptr = &(info->data.main_free);
valptr = &(info->data.free);
} else if (0 == strcmp(head, "Shmem:")) {
valptr = &(info->data.main_shared);
valptr = &(info->data.shared);
} else if (0 == strcmp(head, "MemTotal:")) {
valptr = &(info->data.main_total);
valptr = &(info->data.total);
} else if (0 == strcmp(head, "SwapFree:")) {
valptr = &(info->data.swap_free);
} else if (0 == strcmp(head, "SwapTotal:")) {
valptr = &(info->data.swap_total);
}
head - tail+1;
head = tail+1;
if (valptr) {
*valptr = strtoul(head, &tail, 10);
}
@@ -186,9 +186,45 @@ PROCPS_EXPORT unsigned long procps_meminfo_get(
enum meminfo_item item)
{
switch(item) {
case PROCPS_MEMINFO_ACTIVE:
case PROCPS_MEM_ACTIVE:
return info->data.active;
case PROCPS_MEMINFO_SWAP_USED:
case PROCPS_MEM_INACTIVE:
return info->data.inactive;
case PROCPS_MEMHI_FREE:
return info->data.high_free;
case PROCPS_MEMHI_TOTAL:
return info->data.high_total;
case PROCPS_MEMHI_USED:
if (info->data.high_free > info->data.high_total)
return 0;
return info->data.high_total - info->data.high_free;
case PROCPS_MEMLO_FREE:
return info->data.low_free;
case PROCPS_MEMLO_TOTAL:
return info->data.low_total;
case PROCPS_MEMLO_USED:
if (info->data.low_free > info->data.low_total)
return 0;
return info->data.low_total - info->data.low_free;
case PROCPS_MEM_AVAILABLE:
return info->data.available;
case PROCPS_MEM_BUFFERS:
return info->data.buffers;
case PROCPS_MEM_CACHED:
return info->data.cached;
case PROCPS_MEM_FREE:
return info->data.free;
case PROCPS_MEM_SHARED:
return info->data.shared;
case PROCPS_MEM_TOTAL:
return info->data.total;
case PROCPS_MEM_USED:
return info->data.used;
case PROCPS_SWAP_FREE:
return info->data.swap_free;
case PROCPS_SWAP_TOTAL:
return info->data.swap_total;
case PROCPS_SWAP_USED:
if (info->data.swap_free > info->data.swap_total)
return 0;
return info->data.swap_total - info->data.swap_free;

View File

@@ -33,22 +33,24 @@ struct procps_meminfo *procps_meminfo_ref(struct procps_meminfo *info);
struct procps_meminfo *procps_meminfo_unref(struct procps_meminfo *info);
enum meminfo_item {
PROCPS_MEMINFO_ACTIVE,
PROCPS_MEMINFO_INACTIVE,
PROCPS_MEMINFO_HIGH_FREE,
PROCPS_MEMINFO_HIGH_TOTAL,
PROCPS_MEMINFO_LOW_FREE,
PROCPS_MEMINFO_LOW_TOTAL,
PROCPS_MEMINFO_MAIN_AVAILABLE,
PROCPS_MEMINFO_MAIN_BUFFERS,
PROCPS_MEMINFO_MAIN_CACHED,
PROCPS_MEMINFO_MAIN_FREE,
PROCPS_MEMINFO_MAIN_SHARED,
PROCPS_MEMINFO_MAIN_TOTAL,
PROCPS_MEMINFO_MAIN_USED,
PROCPS_MEMINFO_SWAP_FREE,
PROCPS_MEMINFO_SWAP_TOTAL,
PROCPS_MEMINFO_SWAP_USED,
PROCPS_MEM_ACTIVE,
PROCPS_MEM_INACTIVE,
PROCPS_MEMHI_FREE,
PROCPS_MEMHI_TOTAL,
PROCPS_MEMHI_USED,
PROCPS_MEMLO_FREE,
PROCPS_MEMLO_TOTAL,
PROCPS_MEMLO_USED,
PROCPS_MEM_AVAILABLE,
PROCPS_MEM_BUFFERS,
PROCPS_MEM_CACHED,
PROCPS_MEM_FREE,
PROCPS_MEM_SHARED,
PROCPS_MEM_TOTAL,
PROCPS_MEM_USED,
PROCPS_SWAP_FREE,
PROCPS_SWAP_TOTAL,
PROCPS_SWAP_USED,
};
unsigned long procps_meminfo_get(struct procps_meminfo *info, enum meminfo_item item);

View File

@@ -188,9 +188,9 @@ PROCPS_EXPORT jiff procps_stat_get_cpu(struct procps_stat_info *info, enum procp
PROCPS_EXPORT unsigned int procps_stat_get(struct procps_stat_info *info, enum procps_stat_item item)
{
switch(item) {
case PROCPS_STAT_INTERRUPTS:
case PROCPS_STAT_INTR:
return info->data.intr;
case PROCPS_STAT_CONTEXT:
case PROCPS_STAT_CTXT:
return info->data.ctxt;
case PROCPS_STAT_BTIME:
return info->data.btime;

View File

@@ -36,8 +36,8 @@ enum procps_cpu_item {
};
enum procps_stat_item {
PROCPS_STAT_INTERRUPTS,
PROCPS_STAT_CONTEXT,
PROCPS_STAT_INTR,
PROCPS_STAT_CTXT,
PROCPS_STAT_BTIME,
PROCPS_STAT_PROCS,
PROCPS_STAT_PROCS_BLK,

View File

@@ -107,13 +107,14 @@ PROCPS_EXPORT char *sprint_uptime(void)
double uptime_secs, idle_secs;
double av1, av5, av15;
upbuf[0] = '\0';
if (time(&realseconds) < 0)
return NULL;
return upbuf;
realtime = localtime(&realseconds);
pos = sprintf(upbuf, " %02d:%02d:%02d ",
realtime->tm_hour, realtime->tm_min, realtime->tm_sec);
if (uptime(&uptime_secs, &idle_secs) < 0)
return NULL;
return upbuf;
updays = ((int) uptime_secs / (60*60*24));
uphours = ((int) uptime_secs / (60*24)) % 24;
@@ -134,7 +135,7 @@ PROCPS_EXPORT char *sprint_uptime(void)
users, users == 1 ? "" : "s",
av1, av5, av15);
return upbuf;
}
PROCPS_EXPORT char *sprint_uptime_short(void)
@@ -146,8 +147,9 @@ PROCPS_EXPORT char *sprint_uptime_short(void)
struct tm *realtime;
double uptime_secs, idle_secs;
shortbuf[0] = '\0';
if (uptime(&uptime_secs, &idle_secs) < 0)
return NULL;
return shortbuf;
updecades = (int) uptime_secs / (60*60*24*365*10);
upyears = ((int) uptime_secs / (60*60*24*365)) % 10;