Get info on inactive LXCs
This commit is contained in:
parent
afc17db869
commit
692f9dbd32
@ -1,5 +1,6 @@
|
||||
#include "lxcstat.h"
|
||||
|
||||
#include <dirent.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@ -42,6 +43,32 @@ int readLxcConfig(lxcinfo *lxc, int lxcid) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void getInactiveLXCs(lxcinfo **lxcs) {
|
||||
struct dirent *pDirent;
|
||||
DIR *pDir;
|
||||
|
||||
// Ensure we can open directory.
|
||||
pDir = opendir("/etc/pve/lxc");
|
||||
if (pDir == NULL) {
|
||||
printf("Cannot open directory '/etc/pve/lxc'\n");
|
||||
return;
|
||||
}
|
||||
|
||||
// Process each entry.
|
||||
while ((pDirent = readdir(pDir)) != NULL) {
|
||||
char *fname = pDirent->d_name;
|
||||
char extension[20];
|
||||
int lxcid;
|
||||
|
||||
int argc = sscanf(fname, "%d.%s", &lxcid, (char *) extension);
|
||||
// ensure it's an LXC config
|
||||
if (argc != 2 || strcmp((char *) extension, "conf") != 0) continue;
|
||||
getLXCInfo(lxcs, lxcid); // don't care about result
|
||||
}
|
||||
|
||||
closedir(pDir);
|
||||
}
|
||||
|
||||
lxcinfo *getLXCInfo(lxcinfo **lxcs, int lxcid) {
|
||||
lxcinfo *lxc = *lxcs;
|
||||
while (lxc != NULL) {
|
||||
@ -51,6 +78,7 @@ lxcinfo *getLXCInfo(lxcinfo **lxcs, int lxcid) {
|
||||
|
||||
lxc = calloc(1, sizeof(lxcinfo));
|
||||
lxc->lxcid = lxcid;
|
||||
lxc->running = 0;
|
||||
|
||||
if (readLxcConfig(lxc, lxcid)) {
|
||||
// failed to read LXC
|
||||
|
||||
@ -5,6 +5,7 @@ typedef struct _lxc_info {
|
||||
struct _lxc_info *next;
|
||||
struct _lxc_info *head;
|
||||
struct _lxc_info *tail; // only valid for head lxcinfo
|
||||
int running;
|
||||
int lxcid;
|
||||
int cpucount;
|
||||
int memlimit;
|
||||
@ -13,5 +14,6 @@ typedef struct _lxc_info {
|
||||
} lxcinfo;
|
||||
|
||||
lxcinfo *getLXCInfo(lxcinfo **lxcs, int lxcid);
|
||||
void getInactiveLXCs(lxcinfo **lxcs);
|
||||
|
||||
#endif
|
||||
@ -318,8 +318,12 @@ char *readProcesses(char *procdir) {
|
||||
if (memcmp(cur->cpuset, lxcTag, strlen(lxcTag)) == 0) {
|
||||
// Resides in LXC -- read file and tag
|
||||
sscanf(cur->cpuset, "/lxc/%d/ns", &cur->lxc);
|
||||
if (getLXCInfo(&lxcs, cur->lxc) == NULL)
|
||||
lxcinfo *lxc = getLXCInfo(&lxcs, cur->lxc);
|
||||
if (lxc == NULL) {
|
||||
printf("Failed to read LXC config <%d>\n", cur->lxc);
|
||||
} else {
|
||||
lxc->running = 1;
|
||||
}
|
||||
} else {
|
||||
cur->lxc = -1;
|
||||
}
|
||||
@ -336,7 +340,7 @@ nextProcess:
|
||||
|
||||
linkFamily(head);
|
||||
aggregateStats(head);
|
||||
// printFamilyTree(head);
|
||||
getInactiveLXCs(&lxcs);
|
||||
|
||||
int clocks = sysconf(_SC_CLK_TCK);
|
||||
char *output = malloc(8 * 1024 * 1024);
|
||||
@ -378,6 +382,7 @@ nextProcess:
|
||||
ptr += sprintf(ptr, "lxc_cpu_core_count{%s} %u\n", buffer, lxc->cpucount);
|
||||
ptr += sprintf(ptr, "lxc_memory_limit_bytes{%s} %llu\n", buffer, lxc->memlimit);
|
||||
ptr += sprintf(ptr, "lxc_swap_limit_bytes{%s} %llu\n", buffer, lxc->swaplimit);
|
||||
ptr += sprintf(ptr, "lxc_is_running{%s} %d\n", buffer, lxc->running);
|
||||
// free and proceed
|
||||
lxcinfo *prev = lxc;
|
||||
lxc = lxc->next;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user