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

@ -4464,6 +4464,9 @@ v0.33.19 26-Oct-2001
used by ppp scripts to see if there is work and when there is used by ppp scripts to see if there is work and when there is
no more work to do. Not important for permament connected no more work to do. Not important for permament connected
systems. systems.
Made the FreeBSD and NetBSD disk status calls reliable now
that I know how to really get the mounted filesystems.
The system load value is implemented on FreeBSD and NetBSD.
mbmon: mbmon:
Changed the lastcaller screen to display the External Door Changed the lastcaller screen to display the External Door

View File

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

View File

@ -41,21 +41,27 @@
*/ */
char *get_diskstat() char *get_diskstat()
{ {
char *mtab, *dev, *fs, *type, *tmp = NULL;
FILE *fp;
int i = 0;
static char buf[SS_BUFSIZE]; static char buf[SS_BUFSIZE];
struct statfs sfs; char *tmp = NULL;
char tt[80]; char tt[80];
struct statfs sfs;
unsigned long temp; 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'; buf[0] = '\0';
#if defined (__linux__)
mtab = calloc(PATH_MAX, sizeof(char)); mtab = calloc(PATH_MAX, sizeof(char));
#ifdef __linux__
if ((fp = fopen((char *)"/etc/mtab", "r")) == 0) { if ((fp = fopen((char *)"/etc/mtab", "r")) == 0) {
#elif __FreeBSD__ || __NetBSD__
if ((fp = fopen((char *)"/etc/fstab", "r")) == 0) {
#endif
sprintf(buf, "100:0;"); sprintf(buf, "100:0;");
return buf; return buf;
} }
@ -90,6 +96,39 @@ char *get_diskstat()
else else
sprintf(buf, "100:%d%s;", i, tmp); 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; return buf;
} }

View File

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