/[webpac2]/trunk/lib/WebPAC/Common.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/lib/WebPAC/Common.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 7 by dpavlin, Sat Jul 16 16:00:19 2005 UTC revision 9 by dpavlin, Sat Jul 16 17:14:43 2005 UTC
# Line 165  sub get_data { Line 165  sub get_data {
165  }  }
166    
167    
168    =head2 progress_bar
169    
170    Draw progress bar on STDERR.
171    
172     $webpac->progress_bar($current, $max);
173    
174    =cut
175    
176    sub progress_bar {
177            my $self = shift;
178    
179            my ($curr,$max) = @_;
180    
181            my $log = $self->_get_logger();
182    
183            $log->logconfess("no current value!") if (! $curr);
184            $log->logconfess("no maximum value!") if (! $max);
185    
186            if ($curr > $max) {
187                    $max = $curr;
188                    $log->debug("overflow to $curr");
189            }
190    
191            $self->{'last_pcnt'} ||= 1;
192            $self->{'start_t'} ||= time();
193    
194            my $p = int($curr * 100 / $max) || 1;
195    
196            # reset on re-run
197            if ($p < $self->{'last_pcnt'}) {
198                    $self->{'last_pcnt'} = $p;
199                    $self->{'start_t'} = time();
200            }
201    
202            if ($p != $self->{'last_pcnt'}) {
203    
204                    my $t = time();
205                    my $rate = ($curr / ($t - $self->{'start_t'} || 1));
206                    my $eta = ($max-$curr) / ($rate || 1);
207                    printf STDERR ("%5d [%-38s] %-5d %0.1f/s %s\r",$curr,"=" x ($p/3)."$p%>", $max, $rate, $self->fmt_time($eta));
208                    $self->{'last_pcnt'} = $p;
209                    $self->{'last_curr'} = $curr;
210            }
211            print STDERR "\n" if ($p == 100);
212    }
213    
214    =head2 fmt_time
215    
216    Format time (in seconds) for display.
217    
218     print $webpac->fmt_time(time());
219    
220    This method is called by L<progress_bar> to display remaining time.
221    
222    =cut
223    
224    sub fmt_time {
225            my $self = shift;
226    
227            my $t = shift || 0;
228            my $out = "";
229    
230            my ($ss,$mm,$hh) = gmtime($t);
231            $out .= "${hh}h" if ($hh);
232            $out .= sprintf("%02d:%02d", $mm,$ss);
233            $out .= "  " if ($hh == 0);
234            return $out;
235    }
236    
237    #
238    #
239    #
240    
241  =head1 INTERNAL METHODS  =head1 INTERNAL METHODS
242    
243  Here is a quick list of internal methods, mostly useful to turn debugging  Here is a quick list of internal methods, mostly useful to turn debugging

Legend:
Removed from v.7  
changed lines
  Added in v.9

  ViewVC Help
Powered by ViewVC 1.1.26