Added -m, --eta-window option: set time window for average rate computation (default 30s)

This commit is contained in:
lemonsqueeze
2023-05-29 15:11:37 +02:00
parent 06824aee2d
commit 6bdb951af4
7 changed files with 31 additions and 6 deletions
+6 -1
View File
@@ -143,7 +143,7 @@ transfer.
.TP
.B \-a, \-\-average\-rate
Turn the average rate counter on. This will display the current average
rate of data transfer (default: last 30s).
rate of data transfer (default: last 30s, see --eta-window).
.TP
.B \-b, \-\-bytes
Turn the total byte counter on. This will display the total amount of
@@ -265,6 +265,11 @@ Wait
seconds between updates. The default is to update every second.
Note that this can be a decimal such as 0.1.
.TP
.B \-m SEC, \-\-eta-window SEC
Compute current average rate over a
.B SEC
seconds window for ETA calculation (default 30s).
.TP
.B \-w WIDTH, \-\-width WIDTH
Assume the terminal is
.B WIDTH
+1
View File
@@ -42,6 +42,7 @@ struct opts_s { /* structure describing run-time options */
double delay_start; /* delay before first display */
unsigned int watch_pid; /* process to watch fds of */
int watch_fd; /* fd to watch */
unsigned int eta_window; /* time window in seconds for eta calculations */
unsigned int width; /* screen width */
unsigned int height; /* screen height */
char *name; /* process name, if any */
+1
View File
@@ -93,6 +93,7 @@ extern void pv_state_name_set(pvstate_t, const char *);
extern void pv_state_format_string_set(pvstate_t, const char *);
extern void pv_state_watch_pid_set(pvstate_t, unsigned int);
extern void pv_state_watch_fd_set(pvstate_t, int);
extern void pv_state_eta_window_set(pvstate_t, int);
extern void pv_state_inputfiles(pvstate_t, int, const char **);
+2
View File
@@ -40,6 +40,8 @@ void display_help(void)
N_("show data transfer rate counter")},
{"-a", "--average-rate", 0,
N_("show data transfer average rate counter")},
{"-m", "--eta-window", N_("SEC"),
N_("compute current average rate over a SEC seconds window for ETA (default 30s)")},
{"-b", "--bytes", 0,
N_("show number of bytes transferred")},
{"-T", "--buffer-percent", 0,
+1
View File
@@ -206,6 +206,7 @@ int main(int argc, char **argv)
pv_state_format_string_set(state, opts->format);
pv_state_watch_pid_set(state, opts->watch_pid);
pv_state_watch_fd_set(state, opts->watch_fd);
pv_state_eta_window_set(state, opts->eta_window);
pv_state_set_format(state, opts->progress, opts->timer, opts->eta,
opts->fineta, opts->rate, opts->average_rate,
+7 -1
View File
@@ -80,12 +80,13 @@ opts_t opts_parse(int argc, char **argv)
{"remote", 1, NULL, (int) 'R'},
{"pidfile", 1, NULL, (int) 'P'},
{"watchfd", 1, NULL, (int) 'd'},
{"eta-window", 1, NULL, (int) 'm'},
{NULL, 0, NULL, 0}
};
int option_index = 0;
#endif
char *short_options =
"hVpteIrabTA:fnqcWD:s:l0i:w:H:N:F:L:B:CESR:P:d:";
"hVpteIrabTA:fnqcWD:s:l0i:w:H:N:F:L:B:CESR:P:d:m:";
int c, numopts;
unsigned int check_pid;
int check_fd;
@@ -121,6 +122,7 @@ opts_t opts_parse(int argc, char **argv)
opts->delay_start = 0;
opts->watch_pid = 0;
opts->watch_fd = -1;
opts->eta_window = 30;
do {
#ifdef HAVE_GETOPT_LONG
@@ -144,6 +146,7 @@ opts_t opts_parse(int argc, char **argv)
case 'L':
case 'B':
case 'R':
case 'm':
if (pv_getnum_check(optarg, PV_NUMTYPE_INTEGER) !=
0) {
fprintf(stderr, "%s: -%c: %s\n",
@@ -310,6 +313,9 @@ opts_t opts_parse(int argc, char **argv)
(void) sscanf(optarg, "%u:%d", &(opts->watch_pid),
&(opts->watch_fd));
break;
case 'm':
opts->eta_window = pv_getnum_ui(optarg);
break;
default:
#ifdef HAVE_GETOPT_LONG
fprintf(stderr,
+13 -4
View File
@@ -51,10 +51,6 @@ pvstate_t pv_state_alloc(const char *program_name)
#endif /* HAVE_SPLICE */
state->display_visible = false;
state->history_len = 30+1; /* default history for current avg rate */
state->history_interval = 1;
pv_alloc_history(state);
return state;
}
@@ -234,6 +230,19 @@ void pv_state_watch_fd_set(pvstate_t state, int val)
state->watch_fd = val;
};
void pv_state_eta_window_set(pvstate_t state, int val)
{
if (val >= 20) {
state->history_len = val / 5 + 1;
state->history_interval = 5;
}
else {
state->history_len = val + 1;
state->history_interval = 1;
}
pv_alloc_history(state);
};
/*
* Set the array of input files.