Patch for progressmeter.c

This is a discussion on Patch for progressmeter.c within the OpenSSH Development forums, part of the Networking and Network Related category; This is a small patch to progressmeter.c that provides peak throughput information. It adds a new field on the ...


Go Back   Usenet Forums > Networking and Network Related > OpenSSH Development

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 11-09-2007
Chris Rapier
 
Posts: n/a
Default Patch for progressmeter.c

This is a small patch to progressmeter.c that provides peak throughput
information. It adds a new field on the progress bar line that displays
the 1sec throughput for the connection. At the end of the transfer it
spits out the peak throughput seen.

I found it useful in some testing situations and maybe someone else
might find it handy.

--- ../openssh-4.7p1.logging_features/progressmeter.c 2006-08-04
22:39:40.000000000 -0400
+++ progressmeter.c 2007-10-22 13:19:11.000000000 -0400
@@ -68,7 +68,9 @@ static time_t last_update; /* last progr
static char *file; /* name of the file being transferred */
static off_t end_pos; /* ending position of transfer */
static off_t cur_pos; /* transfer position as of last refresh */
-static volatile off_t *counter; /* progress counter */
+static off_t last_pos;
+static off_t max_delta_pos = 0;
+static volatile off_t *counter; /* progress counter */
static long stalled; /* how long we have been stalled */
static int bytes_per_second; /* current speed in bytes per second */
static int win_size; /* terminal window size */
@@ -128,11 +130,16 @@ refresh_progress_meter(void)
int hours, minutes, seconds;
int i, len;
int file_len;
+ off_t delta_pos;

transferred = *counter - cur_pos;
cur_pos = *counter;
now = time(NULL);
bytes_left = end_pos - cur_pos;
+
+ delta_pos = cur_pos - last_pos;
+ if (delta_pos > max_delta_pos)
+ max_delta_pos = delta_pos;

if (bytes_left > 0)
elapsed = now - last_update;
@@ -158,7 +165,7 @@ refresh_progress_meter(void)

/* filename */
buf[0] = '\0';
- file_len = win_size - 35;
+ file_len = win_size - 45;
if (file_len > 0) {
len = snprintf(buf, file_len + 1, "\r%s", file);
if (len < 0)
@@ -175,7 +182,8 @@ refresh_progress_meter(void)
percent = ((float)cur_pos / end_pos) * 100;
else
percent = 100;
- snprintf(buf + strlen(buf), win_size - strlen(buf),
+
+ snprintf(buf + strlen(buf), win_size - strlen(buf-8),
" %3d%% ", percent);

/* amount transferred */
@@ -188,6 +196,11 @@ refresh_progress_meter(void)
(off_t)bytes_per_second);
strlcat(buf, "/s ", win_size);

+ /* instantaneous rate */
+ format_rate(buf + strlen(buf), win_size - strlen(buf),
+ delta_pos);
+ strlcat(buf, "/s ", win_size);
+
/* ETA */
if (!transferred)
stalled += elapsed;
@@ -224,6 +237,7 @@ refresh_progress_meter(void)

atomicio(vwrite, STDOUT_FILENO, buf, win_size - 1);
last_update = now;
+ last_pos = cur_pos;
}

/*ARGSUSED*/
@@ -270,6 +284,7 @@ void
stop_progress_meter(void)
{
alarm(0);
+ char lbuf[10];

if (!can_output())
return;
@@ -277,7 +292,9 @@ stop_progress_meter(void)
/* Ensure we complete the progress */
if (cur_pos != end_pos)
refresh_progress_meter();
-
+
+ format_rate(lbuf, sizeof(lbuf), max_delta_pos);
+ printf("\nMax throughput: %s/s\n", lbuf);
atomicio(vwrite, STDOUT_FILENO, "\n", 1);
}
_______________________________________________
openssh-unix-dev mailing list
openssh-unix-dev@mindrot.org
https://lists.mindrot.org/mailman/li...enssh-unix-dev
Reply With Quote
Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



All times are GMT +1. The time now is 09:21 AM.


Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.0.0