Have both distribution and package extraction screens display the

transfer speed in KB/sec while fetching stuff; this gives you a better
idea if your link has crashed or is behaving oddly.
This commit is contained in:
Jordan K. Hubbard 1996-05-23 16:34:30 +00:00
parent 087b79e649
commit 2f833c17e4
18 changed files with 141 additions and 82 deletions

View File

@ -1,7 +1,7 @@
PROG= sysinstall
NOMAN= yes
CLEANFILES= makedevs.c rtermcap
#DEBUG_FLAGS+= -g3
DEBUG_FLAGS+= -g3
.PATH: ${.CURDIR}/../disklabel ${.CURDIR}/../../usr.bin/cksum

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: config.c,v 1.30 1996/04/29 18:06:06 jkh Exp $
* $Id: config.c,v 1.31 1996/05/16 11:47:26 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -460,7 +460,7 @@ configPackages(dialogMenuItem *self)
pos = scroll = 0;
index_menu(&top, &plist, &pos, &scroll);
if (plist.kids) {
if (plist.kids && plist.kids->name) {
/* Now show the packing list menu */
pos = scroll = 0;
ret = index_menu(&plist, NULL, &pos, &scroll);

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: dist.c,v 1.51 1996/05/16 13:30:22 jkh Exp $
* $Id: dist.c,v 1.52 1996/05/16 13:39:06 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -34,6 +34,7 @@
*
*/
#include <sys/time.h>
#include "sysinstall.h"
unsigned int Dists;
@ -295,12 +296,13 @@ distSetXF86(dialogMenuItem *self)
static Boolean
distExtract(char *parent, Distribution *me)
{
int i, status;
int i, status, total;
int cpid, zpid, fd, fd2, chunk, numchunks;
char *path, *dist, buf[10240];
const char *tmp;
Attribs *dist_attr;
WINDOW *w = savescr();
struct timeval start, stop;
status = TRUE;
dialog_clear();
@ -322,9 +324,10 @@ distExtract(char *parent, Distribution *me)
continue;
}
/* Recurse if actually have a sub-distribution */
/* Recurse if we actually have a sub-distribution */
if (me[i].my_dist) {
status = distExtract(dist, me[i].my_dist);
if ((status = distExtract(dist, me[i].my_dist)) == TRUE)
*(me[i].my_mask) &= ~(me[i].my_bit);
goto done;
}
@ -332,6 +335,10 @@ distExtract(char *parent, Distribution *me)
snprintf(buf, 512, "%s/%s.tgz", path, dist);
if (isDebug())
msgDebug("Trying to get large piece: %s\n", buf);
/*
* Passing TRUE as 3rd parm to get routine makes this a "probing" get, for which errors
* are not considered too significant.
*/
fd = mediaDevice->get(mediaDevice, buf, TRUE);
if (fd >= 0) {
msgNotify("Extracting %s into %s directory...", me[i].my_name, me[i].my_dir);
@ -378,6 +385,8 @@ distExtract(char *parent, Distribution *me)
/* We have one or more chunks, go pick them up */
mediaExtractDistBegin(me[i].my_dir, &fd2, &zpid, &cpid);
total = 0;
(void)gettimeofday(&start, (struct timezone *)0);
for (chunk = 0; chunk < numchunks; chunk++) {
int n, retval;
char prompt[80];
@ -387,13 +396,31 @@ distExtract(char *parent, Distribution *me)
msgDebug("trying for piece %d of %d: %s\n", chunk + 1, numchunks, buf);
fd = mediaDevice->get(mediaDevice, buf, FALSE);
if (fd < 0) {
msgConfirm("failed to retreive piece file %s!\nAborting the transfer", buf);
msgConfirm("failed to retreive piece file %s!\n"
"Aborting the transfer", buf);
goto punt;
}
snprintf(prompt, 80, "Extracting %s into %s directory...", me[i].my_name, me[i].my_dir);
dialog_gauge("Progress", prompt, 8, 15, 6, 50, (int)((float)(chunk + 1) / numchunks * 100));
move(0, 0); /* Get cursor out of the way - it makes gauges look strange */
while ((n = read(fd, buf, sizeof buf)) > 0) {
while (1) {
int seconds;
n = read(fd, buf, sizeof buf);
if (n <= 0)
break;
total += n;
/* Print statistics about how we're doing */
(void) gettimeofday(&stop, (struct timezone *)0);
stop.tv_sec = stop.tv_sec - start.tv_sec;
stop.tv_usec = stop.tv_usec - start.tv_usec;
if (stop.tv_usec < 0)
stop.tv_sec--, stop.tv_usec += 1000000;
seconds = stop.tv_sec + (stop.tv_usec / 1000000.0);
if (!seconds)
seconds = 1;
msgInfo("%d bytes read from distribution chunk %d of %d, %d KBytes/second",
total, chunk + 1, numchunks, (total / seconds) / 1024);
retval = write(fd2, buf, n);
if (retval != n) {
mediaDevice->close(mediaDevice, fd);

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: index.c,v 1.28 1996/05/01 09:31:50 jkh Exp $
* $Id: index.c,v 1.29 1996/05/16 11:47:29 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -518,7 +518,7 @@ index_extract(Device *dev, PkgNodePtr top, PkgNodePtr plist)
PkgNodePtr tmp;
int status = DITEM_SUCCESS;
for (tmp = plist->kids; tmp; tmp = tmp->next)
for (tmp = plist->kids; tmp && tmp->name; tmp = tmp->next)
status = index_extract_one(dev, top, tmp, FALSE);
return status;
}

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: msg.c,v 1.32 1996/04/28 00:37:36 jkh Exp $
* $Id: msg.c,v 1.33 1996/05/16 11:47:40 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -82,7 +82,7 @@ msgInfo(char *fmt, ...)
/* NULL is a special convention meaning "erase the old stuff" */
if (!fmt) {
move(OnVTY ? VTY_STATLINE : TTY_STATLINE, 0);
attrset(A_REVERSE);
attrset(A_NORMAL);
clrtoeol();
attrset(attrs);
return;
@ -99,16 +99,11 @@ msgInfo(char *fmt, ...)
break;
}
line[80] = '\0';
attrset(A_REVERSE);
attrset(item_attr);
mvaddstr(OnVTY ? VTY_STATLINE : TTY_STATLINE, 0, line);
attrset(attrs);
move(OnVTY ? VTY_STATLINE : TTY_STATLINE, 79);
refresh();
if (OnVTY) {
if (isDebug())
msgDebug("Information: `%s'\n", errstr);
msgInfo(NULL);
}
}
/* Whack up a warning on the status line */

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: package.c,v 1.35 1996/04/30 06:13:50 jkh Exp $
* $Id: package.c,v 1.36 1996/05/16 11:47:42 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -38,6 +38,7 @@
#include <string.h>
#include <stdlib.h>
#include <sys/errno.h>
#include <sys/time.h>
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/stat.h>
@ -114,27 +115,35 @@ package_extract(Device *dev, char *name, Boolean depended)
else {
char buf[BUFSIZ];
WINDOW *w = savescr();
struct timeval start, stop;
close(pfd[0]);
tot = 0;
while ((i = read(fd, buf, BUFSIZ)) > 0) {
char line[80];
int x, len;
(void)gettimeofday(&start, (struct timezone *)0);
while ((i = read(fd, buf, BUFSIZ)) > 0) {
int seconds;
write(pfd[1], buf, i);
tot += i;
sprintf(line, "%d bytes read from package %s", tot, name);
len = strlen(line);
for (x = len; x < 79; x++)
line[x] = ' ';
line[79] = '\0';
mvprintw(0, 0, line);
clrtoeol();
refresh();
/* Print statistics about how we're doing */
(void) gettimeofday(&stop, (struct timezone *)0);
stop.tv_sec = stop.tv_sec - start.tv_sec;
stop.tv_usec = stop.tv_usec - start.tv_usec;
if (stop.tv_usec < 0)
stop.tv_sec--, stop.tv_usec += 1000000;
seconds = stop.tv_sec + (stop.tv_usec / 1000000.0);
if (!seconds)
seconds = 1;
msgInfo("%d bytes read from package %s, %d KBytes/second", tot, name, (tot / seconds) / 1024);
/* Write it out */
if (write(pfd[1], buf, i) != i) {
msgInfo("Write failure to pkg_add! Package may be corrupt.");
break;
}
}
close(pfd[1]);
dev->close(dev, fd);
mvprintw(0, 0, "Package %s read successfully - waiting for pkg_add", name);
msgInfo("Package %s read successfully - waiting for pkg_add", name);
refresh();
i = waitpid(pid, &tot, 0);
if (i < 0 || WEXITSTATUS(tot)) {
@ -149,6 +158,7 @@ package_extract(Device *dev, char *name, Boolean depended)
}
else {
msgDebug("pkg_extract: get operation returned %d\n", fd);
dialog_clear();
if (variable_get(VAR_NO_CONFIRM))
msgNotify("Unable to fetch package %s from selected media.\n"
"No package add will be done.", name);

View File

@ -55,7 +55,6 @@ set_termcap(void)
on = 1;
i = ioctl(DebugFD, TIOCCONS, (char *)&on);
msgDebug("ioctl(%d, TIOCCONS, NULL) = %d (%s)\n", DebugFD, i, !i ? "success" : strerror(errno));
OnVTY = TRUE;
}
if (ColorDisplay) {
if (!term) {
@ -73,6 +72,7 @@ set_termcap(void)
return -1;
}
}
OnVTY = TRUE;
}
return 0;
}

View File

@ -1,7 +1,7 @@
PROG= sysinstall
NOMAN= yes
CLEANFILES= makedevs.c rtermcap
#DEBUG_FLAGS+= -g3
DEBUG_FLAGS+= -g3
.PATH: ${.CURDIR}/../disklabel ${.CURDIR}/../../usr.bin/cksum

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: config.c,v 1.30 1996/04/29 18:06:06 jkh Exp $
* $Id: config.c,v 1.31 1996/05/16 11:47:26 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -460,7 +460,7 @@ configPackages(dialogMenuItem *self)
pos = scroll = 0;
index_menu(&top, &plist, &pos, &scroll);
if (plist.kids) {
if (plist.kids && plist.kids->name) {
/* Now show the packing list menu */
pos = scroll = 0;
ret = index_menu(&plist, NULL, &pos, &scroll);

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: msg.c,v 1.32 1996/04/28 00:37:36 jkh Exp $
* $Id: msg.c,v 1.33 1996/05/16 11:47:40 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -82,7 +82,7 @@ msgInfo(char *fmt, ...)
/* NULL is a special convention meaning "erase the old stuff" */
if (!fmt) {
move(OnVTY ? VTY_STATLINE : TTY_STATLINE, 0);
attrset(A_REVERSE);
attrset(A_NORMAL);
clrtoeol();
attrset(attrs);
return;
@ -99,16 +99,11 @@ msgInfo(char *fmt, ...)
break;
}
line[80] = '\0';
attrset(A_REVERSE);
attrset(item_attr);
mvaddstr(OnVTY ? VTY_STATLINE : TTY_STATLINE, 0, line);
attrset(attrs);
move(OnVTY ? VTY_STATLINE : TTY_STATLINE, 79);
refresh();
if (OnVTY) {
if (isDebug())
msgDebug("Information: `%s'\n", errstr);
msgInfo(NULL);
}
}
/* Whack up a warning on the status line */

View File

@ -55,7 +55,6 @@ set_termcap(void)
on = 1;
i = ioctl(DebugFD, TIOCCONS, (char *)&on);
msgDebug("ioctl(%d, TIOCCONS, NULL) = %d (%s)\n", DebugFD, i, !i ? "success" : strerror(errno));
OnVTY = TRUE;
}
if (ColorDisplay) {
if (!term) {
@ -73,6 +72,7 @@ set_termcap(void)
return -1;
}
}
OnVTY = TRUE;
}
return 0;
}

View File

@ -1,7 +1,7 @@
PROG= sysinstall
NOMAN= yes
CLEANFILES= makedevs.c rtermcap
#DEBUG_FLAGS+= -g3
DEBUG_FLAGS+= -g3
.PATH: ${.CURDIR}/../disklabel ${.CURDIR}/../../usr.bin/cksum

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: config.c,v 1.30 1996/04/29 18:06:06 jkh Exp $
* $Id: config.c,v 1.31 1996/05/16 11:47:26 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -460,7 +460,7 @@ configPackages(dialogMenuItem *self)
pos = scroll = 0;
index_menu(&top, &plist, &pos, &scroll);
if (plist.kids) {
if (plist.kids && plist.kids->name) {
/* Now show the packing list menu */
pos = scroll = 0;
ret = index_menu(&plist, NULL, &pos, &scroll);

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: dist.c,v 1.51 1996/05/16 13:30:22 jkh Exp $
* $Id: dist.c,v 1.52 1996/05/16 13:39:06 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -34,6 +34,7 @@
*
*/
#include <sys/time.h>
#include "sysinstall.h"
unsigned int Dists;
@ -295,12 +296,13 @@ distSetXF86(dialogMenuItem *self)
static Boolean
distExtract(char *parent, Distribution *me)
{
int i, status;
int i, status, total;
int cpid, zpid, fd, fd2, chunk, numchunks;
char *path, *dist, buf[10240];
const char *tmp;
Attribs *dist_attr;
WINDOW *w = savescr();
struct timeval start, stop;
status = TRUE;
dialog_clear();
@ -322,9 +324,10 @@ distExtract(char *parent, Distribution *me)
continue;
}
/* Recurse if actually have a sub-distribution */
/* Recurse if we actually have a sub-distribution */
if (me[i].my_dist) {
status = distExtract(dist, me[i].my_dist);
if ((status = distExtract(dist, me[i].my_dist)) == TRUE)
*(me[i].my_mask) &= ~(me[i].my_bit);
goto done;
}
@ -332,6 +335,10 @@ distExtract(char *parent, Distribution *me)
snprintf(buf, 512, "%s/%s.tgz", path, dist);
if (isDebug())
msgDebug("Trying to get large piece: %s\n", buf);
/*
* Passing TRUE as 3rd parm to get routine makes this a "probing" get, for which errors
* are not considered too significant.
*/
fd = mediaDevice->get(mediaDevice, buf, TRUE);
if (fd >= 0) {
msgNotify("Extracting %s into %s directory...", me[i].my_name, me[i].my_dir);
@ -378,6 +385,8 @@ distExtract(char *parent, Distribution *me)
/* We have one or more chunks, go pick them up */
mediaExtractDistBegin(me[i].my_dir, &fd2, &zpid, &cpid);
total = 0;
(void)gettimeofday(&start, (struct timezone *)0);
for (chunk = 0; chunk < numchunks; chunk++) {
int n, retval;
char prompt[80];
@ -387,13 +396,31 @@ distExtract(char *parent, Distribution *me)
msgDebug("trying for piece %d of %d: %s\n", chunk + 1, numchunks, buf);
fd = mediaDevice->get(mediaDevice, buf, FALSE);
if (fd < 0) {
msgConfirm("failed to retreive piece file %s!\nAborting the transfer", buf);
msgConfirm("failed to retreive piece file %s!\n"
"Aborting the transfer", buf);
goto punt;
}
snprintf(prompt, 80, "Extracting %s into %s directory...", me[i].my_name, me[i].my_dir);
dialog_gauge("Progress", prompt, 8, 15, 6, 50, (int)((float)(chunk + 1) / numchunks * 100));
move(0, 0); /* Get cursor out of the way - it makes gauges look strange */
while ((n = read(fd, buf, sizeof buf)) > 0) {
while (1) {
int seconds;
n = read(fd, buf, sizeof buf);
if (n <= 0)
break;
total += n;
/* Print statistics about how we're doing */
(void) gettimeofday(&stop, (struct timezone *)0);
stop.tv_sec = stop.tv_sec - start.tv_sec;
stop.tv_usec = stop.tv_usec - start.tv_usec;
if (stop.tv_usec < 0)
stop.tv_sec--, stop.tv_usec += 1000000;
seconds = stop.tv_sec + (stop.tv_usec / 1000000.0);
if (!seconds)
seconds = 1;
msgInfo("%d bytes read from distribution chunk %d of %d, %d KBytes/second",
total, chunk + 1, numchunks, (total / seconds) / 1024);
retval = write(fd2, buf, n);
if (retval != n) {
mediaDevice->close(mediaDevice, fd);

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: index.c,v 1.28 1996/05/01 09:31:50 jkh Exp $
* $Id: index.c,v 1.29 1996/05/16 11:47:29 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -518,7 +518,7 @@ index_extract(Device *dev, PkgNodePtr top, PkgNodePtr plist)
PkgNodePtr tmp;
int status = DITEM_SUCCESS;
for (tmp = plist->kids; tmp; tmp = tmp->next)
for (tmp = plist->kids; tmp && tmp->name; tmp = tmp->next)
status = index_extract_one(dev, top, tmp, FALSE);
return status;
}

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: msg.c,v 1.32 1996/04/28 00:37:36 jkh Exp $
* $Id: msg.c,v 1.33 1996/05/16 11:47:40 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -82,7 +82,7 @@ msgInfo(char *fmt, ...)
/* NULL is a special convention meaning "erase the old stuff" */
if (!fmt) {
move(OnVTY ? VTY_STATLINE : TTY_STATLINE, 0);
attrset(A_REVERSE);
attrset(A_NORMAL);
clrtoeol();
attrset(attrs);
return;
@ -99,16 +99,11 @@ msgInfo(char *fmt, ...)
break;
}
line[80] = '\0';
attrset(A_REVERSE);
attrset(item_attr);
mvaddstr(OnVTY ? VTY_STATLINE : TTY_STATLINE, 0, line);
attrset(attrs);
move(OnVTY ? VTY_STATLINE : TTY_STATLINE, 79);
refresh();
if (OnVTY) {
if (isDebug())
msgDebug("Information: `%s'\n", errstr);
msgInfo(NULL);
}
}
/* Whack up a warning on the status line */

View File

@ -4,7 +4,7 @@
* This is probably the last program in the `sysinstall' line - the next
* generation being essentially a complete rewrite.
*
* $Id: package.c,v 1.35 1996/04/30 06:13:50 jkh Exp $
* $Id: package.c,v 1.36 1996/05/16 11:47:42 jkh Exp $
*
* Copyright (c) 1995
* Jordan Hubbard. All rights reserved.
@ -38,6 +38,7 @@
#include <string.h>
#include <stdlib.h>
#include <sys/errno.h>
#include <sys/time.h>
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/stat.h>
@ -114,27 +115,35 @@ package_extract(Device *dev, char *name, Boolean depended)
else {
char buf[BUFSIZ];
WINDOW *w = savescr();
struct timeval start, stop;
close(pfd[0]);
tot = 0;
while ((i = read(fd, buf, BUFSIZ)) > 0) {
char line[80];
int x, len;
(void)gettimeofday(&start, (struct timezone *)0);
while ((i = read(fd, buf, BUFSIZ)) > 0) {
int seconds;
write(pfd[1], buf, i);
tot += i;
sprintf(line, "%d bytes read from package %s", tot, name);
len = strlen(line);
for (x = len; x < 79; x++)
line[x] = ' ';
line[79] = '\0';
mvprintw(0, 0, line);
clrtoeol();
refresh();
/* Print statistics about how we're doing */
(void) gettimeofday(&stop, (struct timezone *)0);
stop.tv_sec = stop.tv_sec - start.tv_sec;
stop.tv_usec = stop.tv_usec - start.tv_usec;
if (stop.tv_usec < 0)
stop.tv_sec--, stop.tv_usec += 1000000;
seconds = stop.tv_sec + (stop.tv_usec / 1000000.0);
if (!seconds)
seconds = 1;
msgInfo("%d bytes read from package %s, %d KBytes/second", tot, name, (tot / seconds) / 1024);
/* Write it out */
if (write(pfd[1], buf, i) != i) {
msgInfo("Write failure to pkg_add! Package may be corrupt.");
break;
}
}
close(pfd[1]);
dev->close(dev, fd);
mvprintw(0, 0, "Package %s read successfully - waiting for pkg_add", name);
msgInfo("Package %s read successfully - waiting for pkg_add", name);
refresh();
i = waitpid(pid, &tot, 0);
if (i < 0 || WEXITSTATUS(tot)) {
@ -149,6 +158,7 @@ package_extract(Device *dev, char *name, Boolean depended)
}
else {
msgDebug("pkg_extract: get operation returned %d\n", fd);
dialog_clear();
if (variable_get(VAR_NO_CONFIRM))
msgNotify("Unable to fetch package %s from selected media.\n"
"No package add will be done.", name);

View File

@ -55,7 +55,6 @@ set_termcap(void)
on = 1;
i = ioctl(DebugFD, TIOCCONS, (char *)&on);
msgDebug("ioctl(%d, TIOCCONS, NULL) = %d (%s)\n", DebugFD, i, !i ? "success" : strerror(errno));
OnVTY = TRUE;
}
if (ColorDisplay) {
if (!term) {
@ -73,6 +72,7 @@ set_termcap(void)
return -1;
}
}
OnVTY = TRUE;
}
return 0;
}