/[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 10 by dpavlin, Sat Jul 16 20:35:30 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
# Line 242  This function will init C<Log::Log4perl> Line 315  This function will init C<Log::Log4perl>
315    $webpac->_init_logger('/path/to/log.conf');    $webpac->_init_logger('/path/to/log.conf');
316    
317  If no path to configuration file is given, dummy empty configuration  If no path to configuration file is given, dummy empty configuration
318  will be create.  will be created. If any mode which inherits from this one is called
319    with C<debug> flag, it will turn logging to debug level.
320    
321  =cut  =cut
322    
# Line 253  sub _init_logger { Line 327  sub _init_logger {
327                  Log::Log4perl->init($file);                  Log::Log4perl->init($file);
328          } else {          } else {
329                  my $conf = q( );                  my $conf = q( );
330                    if ($self->{'debug'}) {
331                            $conf = << '_log4perl_';
332    
333    log4perl.rootLogger=INFO, SCREEN
334    
335    log4perl.logger.WebPAC.=DEBUG
336    
337    log4perl.appender.SCREEN=Log::Log4perl::Appender::Screen
338    log4perl.appender.SCREEN.layout=PatternLayout
339    log4perl.appender.SCREEN.layout.ConversionPattern=%d %p> %F{1}:%L %M - %m%n
340    
341    _log4perl_
342                    }
343                  Log::Log4perl->init( \$conf );                  Log::Log4perl->init( \$conf );
344          }          }
345  }  }

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

  ViewVC Help
Powered by ViewVC 1.1.26