From 6ae8373f00977cc658e762df5f1edfd9efb37c06 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Thu, 17 May 2007 22:59:04 +0200 Subject: [PATCH] contrib/migrate-3-4.px: Handle `disk' and `partition' files correctly. --- contrib/migrate-3-4.px | 61 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 56 insertions(+), 5 deletions(-) diff --git a/contrib/migrate-3-4.px b/contrib/migrate-3-4.px index 467c46bc..24a3c4ed 100755 --- a/contrib/migrate-3-4.px +++ b/contrib/migrate-3-4.px @@ -153,7 +153,11 @@ for (@Files) $OutDirs{$dest_directory} = 1; } - if (exists ($TypeSplit{$orig->{'type'}})) + if (($orig->{'type'} eq 'disk') || ($orig->{'type'} eq 'partition')) + { + special_disk ($orig_filename, $orig, $dest_filename, $dest); + } + elsif (exists ($TypeSplit{$orig->{'type'}})) { my $src_dses = $TypeSplit{$orig->{'type'}}->{'from'}; my $dst_ds = $TypeSplit{$orig->{'type'}}->{'to'}; @@ -311,11 +315,58 @@ sub find_files return (@files); } # find_files -sub special_cpu +{my $cache; +sub _special_disk_instance { - my %file_orig = @_; - my %file_dest = %file_orig; + my $orig_instance = shift; + + if (!defined ($cache)) + { + my $fh; + open ($fh, "< /proc/diskstats") or die ("open (/proc/diststats): $!"); + + $cache = {}; + while (my $line = <$fh>) + { + chomp ($line); + my @fields = split (' ', $line); + $cache->{$fields[0] . '-' . $fields[1]} = $fields[2]; + } + close ($fh); + } + + return (defined ($cache->{$orig_instance}) + ? $cache->{$orig_instance} + : $orig_instance); +}} + +sub special_disk +{ + my $orig_filename = shift; + my $orig = shift; + my $dest_filename = shift; + my $dest = shift; + + $dest->{'type_instance'} = undef; + $dest->{'plugin_instance'} = _special_disk_instance ($orig->{'type_instance'}); + if ($dest->{'plugin_instance'} eq $orig->{'type_instance'}) + { + print qq(echo "You may need to rename these files" >&2\n); + } + + $dest->{'type'} = 'disk_merged'; + $dest_filename = get_filename ($dest); + print "./extractDS.px -i '$InDir/$orig_filename' -s 'rmerged' -s 'wmerged' -o '$OutDir/$dest_filename' -d 'read' -d 'write'\n"; + + $dest->{'type'} = 'disk_octets'; + $dest_filename = get_filename ($dest); + print "./extractDS.px -i '$InDir/$orig_filename' -s 'rbytes' -s 'wbytes' -o '$OutDir/$dest_filename' -d 'read' -d 'write'\n"; - $file_dest{'plugin_instance'} = $file_dest{'type_instance'} + $dest->{'type'} = 'disk_ops'; + $dest_filename = get_filename ($dest); + print "./extractDS.px -i '$InDir/$orig_filename' -s 'rcount' -s 'wcount' -o '$OutDir/$dest_filename' -d 'read' -d 'write'\n"; + $dest->{'type'} = 'disk_time'; + $dest_filename = get_filename ($dest); + print "./extractDS.px -i '$InDir/$orig_filename' -s 'rtime' -s 'wtime' -o '$OutDir/$dest_filename' -d 'read' -d 'write'\n"; } -- 2.11.0