report error without nmap output
[pxelator] / lib / PXElator / progress_bar.pm
1 package progress_bar;
2
3 use warnings;
4 use strict;
5
6 use Time::HiRes qw/time/;
7 use Data::Dump qw/dump/;
8
9 our $start_t;
10 our $last_t;
11
12 sub start {
13         $start_t = $last_t = time();
14 }
15
16 sub tick {
17         die "arguments wrong: ",dump( @_ ) unless $#_ == 2;
18         my ($file, $pos, $size) = @_;
19
20         return unless $size;
21
22         my $t = time();
23         return unless   $start_t == $last_t
24                                 ||      $pos == $size
25                                 ||      $t - $last_t > 0.75 # s
26                                 ;
27
28         $last_t = $t;
29         $t -= $start_t;
30         return unless $t;
31
32         my $speed = $pos / $t;
33         return unless $speed;
34
35         printf STDERR "%s %d/%d %.2f%% %.2f K/s ETA %.1fs   \r"
36                 , $file, $pos, $size
37                 , $pos * 100 / $size
38                 , $speed / 1024
39                 , ( $size - $pos ) / $speed
40                 ;
41 }
42
43 1;