Fixed bug in parsing snapshot total logs
[zfs-ubuntu/.git] / zfs-log-parser
index d43e650e1d64d328d17e7f8ee407ec43662ed978..dbb3c15a88a8e533a05ad30593c35755d84a0c7b 100755 (executable)
@@ -37,9 +37,9 @@ sub adjust_duration {
 
 sub adjust_data {
     my ($data) = @_;
-    if($data > ($giga)) { $data = $data / $giga; $data = sprintf("%2.2fGb",$data); }
-    elsif($data > ($mega)) { $data = int($data / $mega); $data = "$data"."Mb"; }
-    elsif($data > ($kilo)) { $data = int($data / $kilo); $data = "$data"."Kb"; }
+    if(abs($data) > ($giga)) { $data = $data / $giga; $data = sprintf("%2.2fGb",$data); }
+    elsif(abs($data) > ($mega)) { $data = int($data / $mega); $data = "$data"."Mb"; }
+    elsif(abs($data) > ($kilo)) { $data = int($data / $kilo); $data = "$data"."Kb"; }
     return $data;
 }
 
@@ -94,19 +94,20 @@ sub parse_snapshot_totals_logfile {
     $header="";
     while(<FILE>) {
        $line = $_;
+        if($line =~ /logfile turned over/) { next; }
        if(($in_totals == 0) && ($line =~ /(\S+)\s+(\S+)\s+(\d+)\s+(\d+):(\d+):(\d+)\s+(\S+)\s+(\S+)/)) {
            $dayname=$1; $month=$2; $daynum=$3; $hour=$4; $minute=$5; $sec=$6; $year=$8;
            $in_totals = 1;
            $month = $month2num{$month};
            if($daynum < 10) { $daynum = "0".$daynum; }
            $date="$month-$daynum-$year";
-           if(!defined $dates{$date}) { $header .= $date . " "; }
-           $dates{$date} = 1;
+           if(!defined $founddates{$date}) { $header .= $date . " "; }
+           $founddates{$date} = 1;
        }
-       if(($in_totals == 1) && ($line =~ /^\s+$/)) {
+       elsif(($in_totals == 1) && ($line =~ /^\s+$/)) {
            $in_totals = 0;
        }
-       if(($in_totals == 1) && ($line =~ /(\S+)\s+([\d\.]+)(\w+)\s+(\d+)/)) {
+       elsif(($in_totals == 1) && ($line =~ /(\S+)\s+([\d\.]+)(\w+)\s+(\d+)/)) {
            $filesystem = $1; $data = $2; $size = $3; $num_snaps = $4;
            if($filesystem =~ /Snapshots/) { next; }
            if($filesystem =~ /$backup_pool/) { next; }
@@ -129,15 +130,21 @@ sub parse_snapshot_totals_logfile {
            if($date !~ /(\d+)-(\d+)-(\d+)/) { next; }
            $date_data=adjust_data($totals{$filesystem}{$date}{data});
            $data .= sprintf("%10s",$date_data). " ";
+           $date_totals{$date}{data} += $totals{$filesystem}{$date}{data};
        }
        $data_total=adjust_data($data_total);
        $total_delta+=$totals{$filesystem}{delta};
        $delta=adjust_data($totals{$filesystem}{delta});
        printf("%-${maxlen}s %s %10s\n",$filesystem,$data,$delta);
     }
+    $data="";
     $data_len=length($data);
     $total_delta=adjust_data($total_delta);
-    printf("%-${maxlen}s %-${data_len}s %10s\n","Totals:","",$total_delta);
+    foreach $date (sort keys %date_totals) {
+       $date_data=adjust_data($date_totals{$date}{data});
+       $data .= sprintf("%10s",$date_data). " ";
+    }
+    printf("%-${maxlen}s %-${data_len}s %10s\n","Totals:",$data,$total_delta);
 }
 
 #########