bug-wget
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-wget] Fwd: [PATCH] [wget-bug #33210], Add an option to output


From: Giuseppe Scrivano
Subject: Re: [Bug-wget] Fwd: [PATCH] [wget-bug #33210], Add an option to output bandwidth in bits
Date: Sat, 28 Jan 2012 14:14:10 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.3 (gnu/linux)

hi,

I will take a deeper look after your copyright assignment process is
completed.  As a suggestion for the futur: it will be better if you ask
on the mailing list before start working on a task next time (unless it
is a bug).  Not all new feature requests can be accepted into wget.

Cheers,
Giuseppe



Sasikanth <address@hidden> writes:

>   Modified the calc_rate function to calculate bandwidth in powers of ten 
> (SI-prefix format)
>   for --bits option.
>
>  Please review the changes
>
>   Thanks
>   Sasi
>
> ---------- Forwarded message ----------
> From: Sasikanth <address@hidden>
> Date: Wed, Jan 18, 2012 at 5:43 PM
> Subject: Re: [Bug-wget] [PATCH] [wget-bug #33210], Add an option to output 
> bandwidth in bits
> To: Hrvoje Niksic <address@hidden>
> Cc: address@hidden
>
> On Sun, Jan 15, 2012 at 8:51 PM, Hrvoje Niksic <address@hidden> wrote:
>
>     Sasikanth <address@hidden> writes:
>    
>     > No one asked. i had just thought it will be good to display all the 
> output
>     > in either bits or bytes to avoid confusion to the user (I had
>     > confused).
>    
>     I understand that, but I have never seen a downloading agent output data
>     length in bits, so displaying the data in bits would likely cause much
>     more confusion and/or be less useful.  (Data throughput in bits, on the
>     other hand, is quite common.)  With the original implementation of
>     --bits I expect that someone would soon ask for
>     --bits-for-bandwidth-only.
>    
>     > Anyhow thanks I will modify the patch.
>    
>     Thanks.
>    
>     Note that the patch has another problem: while Wget's "K", "M", and "G"
>     refer to (what is now known as) kibibytes, mebibytes, and gibibytes,
>     bandwidth is measured in kilobits, megabits, and gigabits per second.
>     Bandwidth units all refer to powers of ten, not to powers of two, so it
>     is incorrect for calc_rate to simply increase the byte multipliers by 8.
>    
>     Hrvoje
>
>   
>   Modified the calc_rate function to calculate bandwidth in powers of ten 
> (SI-prefix format)
>   for --bits option.
>
>  Please review the changes
>
>   Thanks
>   Sasi
>
>
> diff -ur orig/wget-1.13.4/src/init.c wget-1.13.4/src/init.c
> --- orig/wget-1.13.4/src/init.c       2011-08-19 15:36:20.000000000 +0530
> +++ wget-1.13.4/src/init.c    2012-01-18 14:42:56.240973950 +0530
> @@ -126,6 +126,7 @@
>    { "backups",          &opt.backups,           cmd_number },
>    { "base",             &opt.base_href,         cmd_string },
>    { "bindaddress",      &opt.bind_address,      cmd_string },
> +  { "bits",             &opt.bits_fmt,          cmd_boolean},
>  #ifdef HAVE_SSL
>    { "cacertificate",    &opt.ca_cert,           cmd_file },
>  #endif
> diff -ur orig/wget-1.13.4/src/main.c wget-1.13.4/src/main.c
> --- orig/wget-1.13.4/src/main.c       2011-09-06 19:20:11.000000000 +0530
> +++ wget-1.13.4/src/main.c    2012-01-18 14:42:56.241973599 +0530
> @@ -166,6 +166,7 @@
>      { "backups", 0, OPT_BOOLEAN, "backups", -1 },
>      { "base", 'B', OPT_VALUE, "base", -1 },
>      { "bind-address", 0, OPT_VALUE, "bindaddress", -1 },
> +    { "bits", 0, OPT_BOOLEAN, "bits", -1 },
>      { IF_SSL ("ca-certificate"), 0, OPT_VALUE, "cacertificate", -1 },
>      { IF_SSL ("ca-directory"), 0, OPT_VALUE, "cadirectory", -1 },
>      { "cache", 0, OPT_BOOLEAN, "cache", -1 },
> @@ -704,6 +705,11 @@
>    -np, --no-parent                 don't ascend to the parent directory.\n"),
>      "\n",
>  
> +    N_("\
> +Output format:\n"),
> +    N_("\
> +       --bits                      Output bandwidth in bits.\n"),
> +    "\n",
>      N_("Mail bug reports and suggestions to <address@hidden>.\n")
>    };
>  
> diff -ur orig/wget-1.13.4/src/options.h wget-1.13.4/src/options.h
> --- orig/wget-1.13.4/src/options.h    2011-08-06 15:54:32.000000000 +0530
> +++ wget-1.13.4/src/options.h 2012-01-18 14:42:56.247982676 +0530
> @@ -255,6 +255,7 @@
>  
>    bool show_all_dns_entries; /* Show all the DNS entries when resolving a
>                                  name. */
> +  bool bits_fmt;              /*Output bandwidth in bits format*/
>  };
>  
>  extern struct options opt;
> diff -ur orig/wget-1.13.4/src/progress.c wget-1.13.4/src/progress.c
> --- orig/wget-1.13.4/src/progress.c   2011-01-01 17:42:35.000000000 +0530
> +++ wget-1.13.4/src/progress.c        2012-01-18 14:42:56.249098685 +0530
> @@ -861,7 +861,7 @@
>    struct bar_progress_hist *hist = &bp->hist;
>  
>    /* The progress bar should look like this:
> -     xx% [=======>             ] nn,nnn 12.34K/s  eta 36m 51s
> +     xx% [=======>             ] nn,nnn 12.34KB/s  eta 36m 51s
>  
>       Calculate the geometry.  The idea is to assign as much room as
>       possible to the progress bar.  The other idea is to never let
> @@ -873,7 +873,7 @@
>       "xx% " or "100%"  - percentage               - 4 chars
>       "[]"              - progress bar decorations - 2 chars
>       " nnn,nnn,nnn"    - downloaded bytes         - 12 chars or very rarely 
> more
> -     " 12.5K/s"        - download rate             - 8 chars
> +     " 12.5KB/s"        - download rate           - 9 chars
>       "  eta 36m 51s"   - ETA                      - 14 chars
>  
>       "=====>..."       - progress bar             - the rest
> @@ -977,10 +977,11 @@
>        *p++ = ' ';
>      }
>  
> -  /* " 12.52K/s" */
> +  /* " 12.52Kb/s or 12.52KB/s" */
>    if (hist->total_time > 0 && hist->total_bytes)
>      {
> -      static const char *short_units[] = { "B/s", "K/s", "M/s", "G/s" };
> +      static const char *short_units[] = { "B/s", "KB/s", "MB/s", "GB/s" };
> +      static const char *short_units_bits[] = { "b/s", "Kb/s", "Mb/s", 
> "Gb/s" };
>        int units = 0;
>        /* Calculate the download speed using the history ring and
>           recent data that hasn't made it to the ring yet.  */
> @@ -988,7 +989,7 @@
>        double dltime = hist->total_time + (dl_total_time - bp->recent_start);
>        double dlspeed = calc_rate (dlquant, dltime, &units);
>        sprintf (p, " %4.*f%s", dlspeed >= 99.95 ? 0 : dlspeed >= 9.995 ? 1 : 
> 2,
> -               dlspeed, short_units[units]);
> +               dlspeed,  
> !opt.bits_fmt?short_units[units]:short_units_bits[units]);
>        move_to_end (p);
>      }
>    else
> diff -ur orig/wget-1.13.4/src/retr.c wget-1.13.4/src/retr.c
> --- orig/wget-1.13.4/src/retr.c       2011-08-30 19:17:33.000000000 +0530
> +++ wget-1.13.4/src/retr.c    2012-01-18 17:27:18.383987006 +0530
> @@ -578,6 +578,7 @@
>  {
>    static char res[20];
>    static const char *rate_names[] = {"B/s", "KB/s", "MB/s", "GB/s" };
> +  static const char *rate_names_bits[] = {"b/s", "Kb/s", "Mb/s", "Gb/s" };
>    int units;
>  
>    double dlrate = calc_rate (bytes, secs, &units);
> @@ -585,7 +586,7 @@
>       e.g. "1022", "247", "12.5", "2.38".  */
>    sprintf (res, "%.*f %s",
>             dlrate >= 99.95 ? 0 : dlrate >= 9.995 ? 1 : 2,
> -           dlrate, rate_names[units]);
> +           dlrate, !opt.bits_fmt? rate_names[units]: rate_names_bits[units]);
>  
>    return res;
>  }
> @@ -602,6 +603,13 @@
>  calc_rate (wgint bytes, double secs, int *units)
>  {
>    double dlrate;
> +  double bibyte = 1000.0;
> + 
> +  if (!opt.bits_fmt)
> +    {
> +      bibyte = 1024.0;
> +    }
> +
>  
>    assert (secs >= 0);
>    assert (bytes >= 0);
> @@ -613,16 +621,17 @@
>         0 and the timer's resolution, assume half the resolution.  */
>      secs = ptimer_resolution () / 2.0;
>  
> -  dlrate = bytes / secs;
> -  if (dlrate < 1024.0)
> +  dlrate = convert_to_bits (bytes) / secs;
> +  if (dlrate < bibyte)
>      *units = 0;
> -  else if (dlrate < 1024.0 * 1024.0)
> -    *units = 1, dlrate /= 1024.0;
> -  else if (dlrate < 1024.0 * 1024.0 * 1024.0)
> -    *units = 2, dlrate /= (1024.0 * 1024.0);
> +  else if (dlrate < (bibyte * bibyte))
> +    *units = 1, dlrate /= bibyte;
> +  else if (dlrate < (bibyte * bibyte * bibyte))
> +    *units = 2, dlrate /= (bibyte * bibyte);
> +
>    else
>      /* Maybe someone will need this, one day. */
> -    *units = 3, dlrate /= (1024.0 * 1024.0 * 1024.0);
> +    *units = 3, dlrate /= (bibyte * bibyte * bibyte);
>  
>    return dlrate;
>  }
> diff -ur orig/wget-1.13.4/src/utils.c wget-1.13.4/src/utils.c
> --- orig/wget-1.13.4/src/utils.c      2011-08-29 13:31:24.000000000 +0530
> +++ wget-1.13.4/src/utils.c   2012-01-18 14:42:56.253098685 +0530
> @@ -1826,6 +1826,17 @@
>    ringpos = (ringpos + 1) % RING_SIZE;
>    return buf;
>  }
> +
> +/* Converts the byte to bits format if --bits option is enabled
> + */
> +wgint
> +convert_to_bits (wgint num)
> +{
> +  if (opt.bits_fmt)
> +    return num * 8;
> +  return num;
> +}
> +
>
>  /* Determine the width of the terminal we're running on.  If that's
>     not possible, return 0.  */



reply via email to

[Prev in Thread] Current Thread [Next in Thread]