Added experiment for disk tests

This commit is contained in:
Michiel Broek 2004-03-20 16:09:35 +00:00
parent a1345b8c84
commit f19b0b0a7e
4 changed files with 292 additions and 63 deletions

View File

@ -11,8 +11,8 @@ v0.51.2 06-Mar-2004
Start mbsetup, this can take a while on a system with lots of Start mbsetup, this can take a while on a system with lots of
files, during startup the files database will be converted. files, during startup the files database will be converted.
After the menu appears, enter global setup, exit and save. After the menu appears, enter global setup, exit and save.
Open the system again. Now stop and restart mbtask.
If you want you may restart mbtask. Open the system with mbstat open.
general: general:
Updated to a new files database structure that allows for Updated to a new files database structure that allows for
@ -95,6 +95,7 @@ v0.51.2 06-Mar-2004
mbmon: mbmon:
Switched to use new filesystems command. Switched to use new filesystems command.
On screen 2 added disk status.
mbtask: mbtask:
Added communication commands for disk watch thread. Added communication commands for disk watch thread.

View File

@ -247,70 +247,81 @@ void system_moni(void)
void system_stat(void) void system_stat(void)
{ {
int ch; int ch;
char buf[256]; char buf[256], *cnt;
char *cnt; time_t now;
time_t now;
clr_index(); clr_index();
set_color(WHITE, BLACK); set_color(WHITE, BLACK);
mvprintw( 5, 6, "2. SERVER STATISTICS"); mvprintw( 5, 6, "2. SERVER STATISTICS");
set_color(CYAN, BLACK); set_color(CYAN, BLACK);
mvprintw( 7, 6, "First date started"); mvprintw( 7, 6, "First date started");
mvprintw( 7,62, "BBS Open"); mvprintw( 7,62, "BBS Open");
mvprintw( 8, 6, "Last date started"); mvprintw( 8, 6, "Last date started");
mvprintw( 8,62, "ZMH"); mvprintw( 8,62, "ZMH");
mvprintw( 9, 6, "Total server starts"); mvprintw( 9, 6, "Total server starts");
mvprintw( 9,62, "Internet"); mvprintw( 9,62, "Internet");
mvprintw(10, 6, "Connected clients"); mvprintw(10, 6, "Connected clients");
mvprintw(10,62, "Need inet"); mvprintw(10,62, "Need inet");
mvprintw(11,62, "Running"); mvprintw(11,62, "Running");
mvprintw(12,30, "Total Today"); mvprintw(12,30, "Total Today");
mvprintw(12,62, "Load avg"); mvprintw(12,62, "Load avg");
hor_lin(13,30,8); hor_lin(13,30,8);
hor_lin(13,45,8); hor_lin(13,45,8);
mvprintw(14, 6, "Client connects"); mvprintw(13,62, "Disk stat");
mvprintw(15, 6, "Peak connections"); mvprintw(14, 6, "Client connects");
mvprintw(16, 6, "Protocol syntax errors"); mvprintw(15, 6, "Peak connections");
mvprintw(17, 6, "Communication errors"); mvprintw(16, 6, "Protocol syntax errors");
mvprintw(19, 6, "Next sequence number"); mvprintw(17, 6, "Communication errors");
mvprintw(19,62, "Press any key"); mvprintw(19, 6, "Next sequence number");
IsDoing("System Statistics"); mvprintw(19,62, "Press any key");
IsDoing("System Statistics");
do { do {
show_date(LIGHTGRAY, BLACK, 0, 0); show_date(LIGHTGRAY, BLACK, 0, 0);
sprintf(buf, "GSTA:1,%d;", getpid()); sprintf(buf, "GSTA:1,%d;", getpid());
if (socket_send(buf) == 0) { if (socket_send(buf) == 0) {
strcpy(buf, socket_receive()); strcpy(buf, socket_receive());
set_color(LIGHTGRAY, BLACK); set_color(LIGHTGRAY, BLACK);
cnt = strtok(buf, ","); cnt = strtok(buf, ",");
now = atoi(strtok(NULL, ",")); now = atoi(strtok(NULL, ","));
mvprintw(7, 30, "%s", ctime(&now)); mvprintw(7, 30, "%s", ctime(&now));
now = atoi(strtok(NULL, ",")); now = atoi(strtok(NULL, ","));
mvprintw(8, 30, "%s", ctime(&now)); mvprintw(8, 30, "%s", ctime(&now));
cnt = strtok(NULL, ","); cnt = strtok(NULL, ",");
mvprintw(9, 30, (char *)"%s ", strtok(NULL, ",")); mvprintw(9, 30, (char *)"%s ", strtok(NULL, ","));
mvprintw(10,30, (char *)"%s ", strtok(NULL, ",")); mvprintw(10,30, (char *)"%s ", strtok(NULL, ","));
mvprintw(14,30, (char *)"%s ", strtok(NULL, ",")); mvprintw(14,30, (char *)"%s ", strtok(NULL, ","));
mvprintw(15,30, (char *)"%s ", strtok(NULL, ",")); mvprintw(15,30, (char *)"%s ", strtok(NULL, ","));
mvprintw(16,30, (char *)"%s ", strtok(NULL, ",")); mvprintw(16,30, (char *)"%s ", strtok(NULL, ","));
mvprintw(17,30, (char *)"%s ", strtok(NULL, ",")); mvprintw(17,30, (char *)"%s ", strtok(NULL, ","));
mvprintw(14,45, (char *)"%s ", strtok(NULL, ",")); mvprintw(14,45, (char *)"%s ", strtok(NULL, ","));
mvprintw(15,45, (char *)"%s ", strtok(NULL, ",")); mvprintw(15,45, (char *)"%s ", strtok(NULL, ","));
mvprintw(16,45, (char *)"%s ", strtok(NULL, ",")); mvprintw(16,45, (char *)"%s ", strtok(NULL, ","));
mvprintw(17,45, (char *)"%s ", strtok(NULL, ",")); mvprintw(17,45, (char *)"%s ", strtok(NULL, ","));
mvprintw(7,72, "%s", atoi(strtok(NULL, ",")) == 1?"Yes":"No "); mvprintw(7,72, "%s", atoi(strtok(NULL, ",")) == 1?"Yes":"No ");
mvprintw(8,72, "%s", atoi(strtok(NULL, ",")) == 1?"Yes":"No "); mvprintw(8,72, "%s", atoi(strtok(NULL, ",")) == 1?"Yes":"No ");
mvprintw(9,72, "%s", atoi(strtok(NULL, ",")) == 1?"Yes":"No "); mvprintw(9,72, "%s", atoi(strtok(NULL, ",")) == 1?"Yes":"No ");
mvprintw(10,72,"%s", atoi(strtok(NULL, ",")) == 1?"Yes":"No "); mvprintw(10,72,"%s", atoi(strtok(NULL, ",")) == 1?"Yes":"No ");
mvprintw(11,72,"%s", atoi(strtok(NULL, ",")) == 1?"Yes":"No "); mvprintw(11,72,"%s", atoi(strtok(NULL, ",")) == 1?"Yes":"No ");
mvprintw(12,72, "%s ", strtok(NULL, ",")); mvprintw(12,72, "%s ", strtok(NULL, ","));
mvprintw(19,30, (char *)"%s", strtok(NULL, ";")); mvprintw(19,30, (char *)"%s", strtok(NULL, ";"));
} }
ch = testkey(19,76); switch (enoughspace()) {
} while (ch == '\0'); case 0: mvprintw(13, 72, "Full ");
break;
case 1: mvprintw(13, 72, "Ok ");
break;
case 2: mvprintw(13, 72, "N/A ");
break;
case 3: mvprintw(13, 72, "Error");
break;
}
ch = testkey(19,76);
} while (ch == '\0');
} }

View File

@ -712,7 +712,10 @@ void die(int onsig)
while ((cmd_run || ping_run || sched_run || disk_run) && (time(NULL) < now)) { while ((cmd_run || ping_run || sched_run || disk_run) && (time(NULL) < now)) {
sleep(1); sleep(1);
} }
Syslog('+', "All threads stopped"); if (cmd_run || ping_run || sched_run || disk_run)
Syslog('+', "Not all threads stopped! Forced shutdown");
else
Syslog('+', "All threads stopped");
/* /*
* Free memory * Free memory

View File

@ -175,9 +175,86 @@ char *disk_getfs()
/*
* Add path to table.
* Find out if the parameter is a path or a file on a path.
*/
void add_path(char *path) void add_path(char *path)
{ {
struct stat sb;
char *p, *fsname;
#if defined(__linux__)
char *mtab, *fs;
FILE *fp;
#elif defined(__FreeBSD__) || defined(__NetBSD__)
struct statfs *mntbuf;
int i;
#endif
if (strlen(path) == 0) {
Syslog('d', "add_path() empty pathname");
return;
}
Syslog('d', "add_path(%s)", path); Syslog('d', "add_path(%s)", path);
if (lstat(path, &sb) == 0) {
if (S_ISDIR(sb.st_mode)) {
#if defined(__linux__)
if ((fp = fopen((char *)"/etc/mtab", "r"))) {
mtab = calloc(PATH_MAX, sizeof(char));
fsname = calloc(PATH_MAX, sizeof(char));
fsname[0] = '\0';
while (fgets(mtab, PATH_MAX -1, fp)) {
fs = strtok(mtab, " \t");
fs = strtok(NULL, " \t");
/*
* Overwrite fsname each time a match is found, the last
* mounted filesystem that matches must be the one we seek.
*/
if (strncmp(fs, path, strlen(fs)) == 0) {
Syslog('d', "Found fs %s", fs);
sprintf(fsname, "%s", fs);
}
}
fclose(fp);
free(mtab);
Syslog('d', "Should be on \"%s\"", fsname);
free(fsname);
}
#elif defined(__FreeBSD__) || defined(__NetBSD__)
if ((mntsize = getmntinfo(&mntbuf, MNT_NOWAIT))) {
fsname = calloc(PATH_MAX, sizeof(char));
for (i = 0; i < mntsize; i++) {
Syslog('d', "Check fs %s", mntbuf[i].f_mntonname);
if (strncmp(mntbuf[i].f_mntonname, path, strlen(mntbuf[i].f_mntonname)) == 0) {
Syslog('d', "Found fs %s", fs);
sprintf(fsname, "%s", fs);
}
}
Syslog('d', "Should be on \"%s\"", fsname);
free(fsname);
}
#endif
} else {
Syslog('d', "**** Is not a dir");
}
} else {
/*
* Possible cause, we were given a filename that
* may not be present because this is a temporary file.
* Strip the last part of the name and try again.
*/
if ((p = strrchr(path, '/')))
*p = '\0';
Syslog('d', "Recursive add name %s", path);
add_path(path);
}
} }
@ -187,6 +264,9 @@ void add_path(char *path)
*/ */
void *disk_thread(void) void *disk_thread(void)
{ {
FILE *fp;
char *temp;
Syslog('+', "Start disk thread"); Syslog('+', "Start disk thread");
disk_run = TRUE; disk_run = TRUE;
disk_reread = TRUE; disk_reread = TRUE;
@ -196,7 +276,141 @@ void *disk_thread(void)
if (disk_reread) { if (disk_reread) {
disk_reread = FALSE; disk_reread = FALSE;
Syslog('+', "Reread disk filesystems"); Syslog('+', "Reread disk filesystems");
add_path(getenv("MBSE_ROOT"));
add_path(CFG.bbs_menus); add_path(CFG.bbs_menus);
add_path(CFG.bbs_txtfiles);
add_path(CFG.alists_path);
add_path(CFG.req_magic);
add_path(CFG.bbs_usersdir);
add_path(CFG.nodelists);
add_path(CFG.inbound);
add_path(CFG.pinbound);
add_path(CFG.outbound);
add_path(CFG.ftp_base);
add_path(CFG.bbs_macros);
add_path(CFG.out_queue);
add_path(CFG.rulesdir);
add_path(CFG.tmailshort);
add_path(CFG.tmaillong);
temp = calloc(PATH_MAX, sizeof(char ));
sprintf(temp, "%s/etc/fareas.data", getenv("MBSE_ROOT"));
if ((fp = fopen(temp, "r"))) {
Syslog('d', "+ %s", temp);
fread(&areahdr, sizeof(areahdr), 1, fp);
fseek(fp, areahdr.hdrsize, SEEK_SET);
while (fread(&area, areahdr.recsize, 1, fp)) {
if (area.Available) {
if (area.CDrom)
add_path(area.FilesBbs);
else
add_path(area.Path);
}
}
fclose(fp);
}
sprintf(temp, "%s/etc/mareas.data", getenv("MBSE_ROOT"));
if ((fp = fopen(temp, "r"))) {
Syslog('d', "+ %s", temp);
fread(&msgshdr, sizeof(msgshdr), 1, fp);
fseek(fp, msgshdr.hdrsize, SEEK_SET);
while (fread(&msgs, msgshdr.recsize, 1, fp)) {
if (msgs.Active)
add_path(msgs.Base);
fseek(fp, msgshdr.syssize, SEEK_CUR);
}
fclose(fp);
}
sprintf(temp, "%s/etc/language.data", getenv("MBSE_ROOT"));
if ((fp = fopen(temp, "r"))) {
Syslog('d', "+ %s", temp);
fread(&langhdr, sizeof(langhdr), 1, fp);
fseek(fp, langhdr.hdrsize, SEEK_SET);
while (fread(&lang, langhdr.recsize, 1, fp)) {
if (lang.Available) {
add_path(lang.MenuPath);
add_path(lang.TextPath);
add_path(lang.MacroPath);
}
}
fclose(fp);
}
sprintf(temp, "%s/etc/nodes.data", getenv("MBSE_ROOT"));
if ((fp = fopen(temp, "r"))) {
Syslog('d', "+ %s", temp);
fread(&nodeshdr, sizeof(nodeshdr), 1, fp);
fseek(fp, nodeshdr.hdrsize, SEEK_SET);
while (fread(&nodes, nodeshdr.recsize, 1, fp)) {
if (nodes.Session_in == S_DIR)
add_path(nodes.Dir_in_path);
if (nodes.Session_out == S_DIR)
add_path(nodes.Dir_out_path);
add_path(nodes.OutBox);
fseek(fp, nodeshdr.filegrp + nodeshdr.mailgrp, SEEK_CUR);
}
fclose(fp);
}
sprintf(temp, "%s/etc/fgroups.data", getenv("MBSE_ROOT"));
if ((fp = fopen(temp, "r"))) {
Syslog('d', "+ %s", temp);
fread(&fgrouphdr, sizeof(fgrouphdr), 1, fp);
fseek(fp, fgrouphdr.hdrsize, SEEK_SET);
while (fread(&fgroup, fgrouphdr.recsize, 1, fp)) {
if (fgroup.Active)
add_path(fgroup.BasePath);
}
fclose(fp);
}
sprintf(temp, "%s/etc/mgroups.data", getenv("MBSE_ROOT"));
if ((fp = fopen(temp, "r"))) {
Syslog('d', "+ %s", temp);
fread(&mgrouphdr, sizeof(mgrouphdr), 1, fp);
fseek(fp, mgrouphdr.hdrsize, SEEK_SET);
while (fread(&mgroup, mgrouphdr.recsize, 1, fp)) {
if (mgroup.Active)
add_path(mgroup.BasePath);
}
fclose(fp);
}
sprintf(temp, "%s/etc/hatch.data", getenv("MBSE_ROOT"));
if ((fp = fopen(temp, "r"))) {
Syslog('d', "+ %s", temp);
fread(&hatchhdr, sizeof(hatchhdr), 1, fp);
fseek(fp, hatchhdr.hdrsize, SEEK_SET);
while (fread(&hatch, hatchhdr.recsize, 1, fp)) {
if (hatch.Active)
add_path(hatch.Spec);
}
fclose(fp);
}
sprintf(temp, "%s/etc/magic.data", getenv("MBSE_ROOT"));
if ((fp = fopen(temp, "r"))) {
Syslog('d', "+ %s", temp);
fread(&magichdr, sizeof(magichdr), 1, fp);
fseek(fp, magichdr.hdrsize, SEEK_SET);
while (fread(&magic, magichdr.recsize, 1, fp)) {
if (magic.Active && ((magic.Attrib == MG_COPY) || (magic.Attrib == MG_UNPACK)))
add_path(magic.Path);
}
fclose(fp);
}
free(temp);
Syslog('d', "All directories added");
} }
sleep(1); sleep(1);