This is a perl script that creates the svg code that matches a ddrescue log file.
SVG module is required. Edit the $INPUT_FILE and $SCALE_FACTOR variables as needed.
The SVG code is outputted to standard output. The messages to standard error.
Use ddrescue-svg-log.pl > output.svg to output to file.
#!/usr/bin/perl use strict; use warnings; use SVG; use Math::BigInt; ############################## my $SCALE_FACTOR = 10240000; my $SCALE_FACTOR_LABEL = 1024 * 1024 * 1024; #giga my $INPUT_FILE = "sda-80gb-log.txt"; ############################## my $ddlogfile; open $ddlogfile, "<$INPUT_FILE"; my $svg = SVG->new(width=>1000,height=>200); # use explicit element constructor to generate a group element my $svg_disc_group=$svg->group(id => 'disc_group'); while (<$ddlogfile>) { my $row = $_; chomp $row; # STATUS CHARACTERS: +,-,/,*,? if($row =~ m/^(0x[0-9A-z]*)\s*(0x[0-9A-z]*)\s*(\+|-|\/|\*|\?)/) { my $start = $1; my $size = $2; my $status = $3; print STDERR $row; #CALCULATE SVG COORDINATES USING $SCALE_FACTOR my $bigint_start_scaled = Math::BigInt->new($1); my $bigint_size_scaled = Math::BigInt->new($2); my ($_qx, $_rx) = $bigint_start_scaled->bdiv($SCALE_FACTOR); my ($_qw, $_rw) = $bigint_size_scaled->bdiv($SCALE_FACTOR); my $x = $_qx->numify() + ( $_rx->numify() / $SCALE_FACTOR ) ; my $w = $_qw->numify() + ( $_rw->numify() / $SCALE_FACTOR ) ; #LABEL VALUES my $bigint_start_label = Math::BigInt->new($1); my $bigint_size_label = Math::BigInt->new($2); my ($_q_start_lbl, $_r_start_lbl) = $bigint_start_label->bdiv($SCALE_FACTOR_LABEL); my ($_q_size_lbl, $_r_size_lbl) = $bigint_size_label->bdiv($SCALE_FACTOR_LABEL); my $start_lbl = $_q_start_lbl->numify() + ( $_r_start_lbl->numify() / $SCALE_FACTOR_LABEL ) ; my $size_lbl = $_q_size_lbl->numify() + ( $_r_size_lbl->numify() / $SCALE_FACTOR_LABEL ) ; my $rect_label = sprintf("%.2f", $start_lbl) . "[" . sprintf("%.2f", $size_lbl) . "]($status)"; my $svg_sector_group = $svg_disc_group->group(); my $rect_style = ($status eq '+')?{ fill=>"green" }:{ fill=>"red", stroke=>"red" }; # add a rectangle to the group $svg_sector_group->rectangle( x => $x, width => $w, y => 0, height => 30, style => $rect_style ); $svg_sector_group->text(x=>$x, y=>40, -cdata=> $rect_label, style=>'font-size: 2px'); print STDERR ("START: $start, SIZE: $size, STATUS: $status\n"); } } # now render the SVG object, implicitly use svg namespace print $svg->xmlify;