On 10/31/18 2:04 PM, Tim Marx wrote:
Signed-off-by: Tim Marx <[email protected]>
---

changes since v1:
* changed regex matching groups
* changed $lvl back to int from float
* set vdev keys only if defined

  PVE/API2/Disks/ZFS.pm | 26 ++++++++++++--------------
  1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/PVE/API2/Disks/ZFS.pm b/PVE/API2/Disks/ZFS.pm
index 58a498d..4780bcd 100644
--- a/PVE/API2/Disks/ZFS.pm
+++ b/PVE/API2/Disks/ZFS.pm
@@ -233,39 +233,37 @@ __PACKAGE__->register_method ({
                $pool->{$curfield} .= " " . $1;
            } elsif (!$config && $line =~ m/^\s*config:/) {
                $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*(.*)$/) {

mhmm works, but not exactly what i had in mind, more like:

(\s+)(\S+)(?:\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+))?\s*(.*)

this makes it so that state,read,write,cksum are all there, or none

any regex experts here (regarding performance/pitfalls/etc.) ? @all

                my ($space, $name, $state, $read, $write, $cksum, $msg) = ($1, 
$2, $3, $4, $5, $6, $7);
-               if ($space  =~ m/^\t(\s+)$/) {
-                   my $lvl= length($1)/2; # two spaces per level
+               if ($name ne "NAME" and $name ne $param->{name}) {
+                   my $lvl= length($space)+2/2; # two spaces per level

mhmm, i dont think it does what it you think it does (operator order)
it now adds 1 to the length of the string

eg. "aaa" => 4

but even disegarding operator order it would mean that we get
"aaa" => 5/2 => 2.5

rest looks good

                    my $vdev = {
                        name => $name,
-                       state => $state,
-                       read => $read + 0,
-                       write => $write + 0,
-                       cksum => $cksum + 0,
                        msg => $msg,
                        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;
if ($lvl > $curlvl) {
                        $cur->{children} = [ $vdev ];
-                       push @$stack, $cur;
-                       push @$stack, $vdev;
                    } elsif ($lvl == $curlvl) {
                        $cur = pop @$stack;
                        push @{$cur->{children}}, $vdev;
-                       push @$stack, $cur;
-                       push @$stack, $vdev;
                    } else {
                        while ($lvl <= $cur->{lvl}) {
                            $cur = pop @$stack;
                        }
                        push @{$cur->{children}}, $vdev;
-                       push @$stack, $cur;
-                       push @$stack, $vdev;
                    }
+               
+                   push @$stack, $cur;
+                   push @$stack, $vdev;
                    $curlvl = $lvl;
                }
            }



_______________________________________________
pve-devel mailing list
[email protected]
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to