Fixed mbtask disk and loadavg status

This commit is contained in:
Michiel Broek
2002-02-04 20:37:01 +00:00
parent 8e1a1569b0
commit 8fa71f10a1
4 changed files with 77 additions and 25 deletions

View File

@@ -88,7 +88,7 @@ char ttyfn[PATH_MAX]; /* TTY file name */
int ping_isocket; /* Ping socket */
int icmp_errs = 0; /* ICMP error counter */
int internet = FALSE; /* Internet is down */
float Load; /* System Load */
double Load; /* System Load */
int Processing; /* Is system running */
int ZMH = FALSE; /* Zone Mail Hour */
int UPSalarm = FALSE; /* UPS alarm status */
@@ -1169,12 +1169,14 @@ void scheduler(void)
static char doing[32], buf[2048];
time_t now;
struct tm *tm, *utm;
#if !defined(__FreeBSD__) && !defined(__NetBSD__)
FILE *fp;
float lavg1, lavg2, lavg3;
#endif
struct pollfd pfd;
struct in_addr paddr;
int call_work;
static int call_entry = MAXTASKS;
double loadavg[3];
InitFidonet();
@@ -1275,23 +1277,31 @@ void scheduler(void)
/*
* Check the systems load average. FIXME: doesn't work in FreeBSD !!!
*/
Load = 0.0;
loadavg[0] = loadavg[1] = loadavg[2] = 0.0;
#if defined(__FreeBSD__) || defined(__NetBSD__)
if (getloadavg(loadavg, 3) == 3) {
Load = loadavg[0];
}
#else
if ((fp = fopen((char *)"/proc/loadavg", "r"))) {
if (fscanf(fp, "%f %f %f", &lavg1, &lavg2, &lavg3) == 3) {
Load = lavg1;
if (lavg1 >= TCFG.maxload) {
if (!LOADhi) {
tasklog('!', "System load too high: %2.2f (%2.2f)", lavg1, TCFG.maxload);
LOADhi = TRUE;
}
} else {
if (LOADhi) {
tasklog('!', "System load normal: %2.2f (%2.2f)", lavg1, TCFG.maxload);
LOADhi = FALSE;
}
}
if (fscanf(fp, "%f %f %f", &loadavg[0], &loadavg[1], &loadavg[2]) == 3) {
Load = loadavg[0];
}
fclose(fp);
}
#endif
if (Load >= TCFG.maxload) {
if (!LOADhi) {
tasklog('!', "System load too high: %2.2f (%2.2f)", Load, TCFG.maxload);
LOADhi = TRUE;
}
} else {
if (LOADhi) {
tasklog('!', "System load normal: %2.2f (%2.2f)", Load, TCFG.maxload);
LOADhi = FALSE;
}
}
/*
* Report to the system monitor.
@@ -1306,7 +1316,7 @@ void scheduler(void)
else if (Processing)
sprintf(doing, "Waiting (%d)", oldmin);
else
sprintf(doing, "Overload %2.2f", lavg1);
sprintf(doing, "Overload %2.2f", Load);
sprintf(reginfo[0].doing, "%s", doing);
reginfo[0].lastcon = time(NULL);

View File

@@ -41,21 +41,27 @@
*/
char *get_diskstat()
{
char *mtab, *dev, *fs, *type, *tmp = NULL;
FILE *fp;
int i = 0;
static char buf[SS_BUFSIZE];
struct statfs sfs;
char *tmp = NULL;
char tt[80];
struct statfs sfs;
unsigned long temp;
#if defined(__linux__)
char *mtab, *dev, *fs, *type;
FILE *fp;
int i = 0;
#elif defined(__FreeBSD__) || (__NetBSD__)
struct statfs *mntbuf;
long mntsize;
int i, j = 0;
#endif
buf[0] = '\0';
#if defined (__linux__)
mtab = calloc(PATH_MAX, sizeof(char));
#ifdef __linux__
if ((fp = fopen((char *)"/etc/mtab", "r")) == 0) {
#elif __FreeBSD__ || __NetBSD__
if ((fp = fopen((char *)"/etc/fstab", "r")) == 0) {
#endif
sprintf(buf, "100:0;");
return buf;
}
@@ -90,6 +96,39 @@ char *get_diskstat()
else
sprintf(buf, "100:%d%s;", i, tmp);
#elif defined(__FreeBSD__) || (__NetBSD__)
mntsize = getmntinfo(&mntbuf, MNT_NOWAIT);
for (i = 0; i < mntsize; i++) {
if ((strncmp(mntbuf[i].f_fstypename, (char *)"kernfs", 6)) && (statfs(mntbuf[i].f_mntonname, &sfs) == 0)) {
if (tmp == NULL)
tmp = xstrcpy((char *)",");
else
tmp = xstrcat(tmp, (char *)",");
tt[0] = '\0';
temp = (unsigned long)(sfs.f_bsize / 512L);
sprintf(tt, "%lu %lu %s %s",
(unsigned long)(sfs.f_blocks * temp) / 2048L,
(unsigned long)(sfs.f_bavail * temp) / 2048L,
mntbuf[i].f_mntonname, mntbuf[i].f_fstypename);
tmp = xstrcat(tmp, tt);
j++;
if (j == 10)
break;
}
}
if (strlen(tmp) > (SS_BUFSIZE - 8))
sprintf(buf, "100:0;");
else
sprintf(buf, "100:%d%s;", j, tmp);
#else
/*
* Not supported, so return nothing usefull.
*/
sprintf(buf, "100:0;");
#endif
return buf;
}

View File

@@ -82,7 +82,7 @@ typedef struct {
static char stat_fn[PATH_MAX]; /* Statusfile name */
static status_r status; /* Status data */
extern float Load; /* System Load */
extern double Load; /* System Load */
extern int Processing; /* Is system running */