close #1949: storage zfs: changed zpool command parser
Signed-off-by: Tim Marx <t.marx@proxmox.com>
This commit is contained in:
committed by
Thomas Lamprecht
parent
b005f2f483
commit
a49fc735e5
@ -233,39 +233,37 @@ __PACKAGE__->register_method ({
|
|||||||
$pool->{$curfield} .= " " . $1;
|
$pool->{$curfield} .= " " . $1;
|
||||||
} elsif (!$config && $line =~ m/^\s*config:/) {
|
} elsif (!$config && $line =~ m/^\s*config:/) {
|
||||||
$config = 1;
|
$config = 1;
|
||||||
} elsif ($config && $line =~ m/^(\s+)(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s*(.*)$/) {
|
} elsif ($config && $line =~ m/^(\s+)(\S+)\s*(\S+)?(?:\s+(\S+)\s+(\S+)\s+(\S+))?\s*(.*)$/) {
|
||||||
my ($space, $name, $state, $read, $write, $cksum, $msg) = ($1, $2, $3, $4, $5, $6, $7);
|
my ($space, $name, $state, $read, $write, $cksum, $msg) = ($1, $2, $3, $4, $5, $6, $7);
|
||||||
if ($space =~ m/^\t(\s+)$/) {
|
if ($name ne "NAME" and $name ne $param->{name}) {
|
||||||
my $lvl= length($1)/2; # two spaces per level
|
my $lvl= int(length($space)/2); # two spaces per level
|
||||||
my $vdev = {
|
my $vdev = {
|
||||||
name => $name,
|
name => $name,
|
||||||
state => $state,
|
|
||||||
read => $read + 0,
|
|
||||||
write => $write + 0,
|
|
||||||
cksum => $cksum + 0,
|
|
||||||
msg => $msg,
|
msg => $msg,
|
||||||
lvl => $lvl,
|
lvl => $lvl,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$vdev->{state} = $state if defined($state);
|
||||||
|
$vdev->{read} = $read + 0 if defined($read);
|
||||||
|
$vdev->{write} = $write + 0 if defined($write);
|
||||||
|
$vdev->{cksum} = $cksum + 0 if defined($cksum);
|
||||||
|
|
||||||
my $cur = pop @$stack;
|
my $cur = pop @$stack;
|
||||||
|
|
||||||
if ($lvl > $curlvl) {
|
if ($lvl > $curlvl) {
|
||||||
$cur->{children} = [ $vdev ];
|
$cur->{children} = [ $vdev ];
|
||||||
push @$stack, $cur;
|
|
||||||
push @$stack, $vdev;
|
|
||||||
} elsif ($lvl == $curlvl) {
|
} elsif ($lvl == $curlvl) {
|
||||||
$cur = pop @$stack;
|
$cur = pop @$stack;
|
||||||
push @{$cur->{children}}, $vdev;
|
push @{$cur->{children}}, $vdev;
|
||||||
push @$stack, $cur;
|
|
||||||
push @$stack, $vdev;
|
|
||||||
} else {
|
} else {
|
||||||
while ($lvl <= $cur->{lvl}) {
|
while ($lvl <= $cur->{lvl} and $cur->{lvl} != 0) {
|
||||||
$cur = pop @$stack;
|
$cur = pop @$stack;
|
||||||
}
|
}
|
||||||
push @{$cur->{children}}, $vdev;
|
push @{$cur->{children}}, $vdev;
|
||||||
push @$stack, $cur;
|
|
||||||
push @$stack, $vdev;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
push @$stack, $cur;
|
||||||
|
push @$stack, $vdev;
|
||||||
$curlvl = $lvl;
|
$curlvl = $lvl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user