WebshopApi: falsche sql update Abhängigkeit
[kivitendo-erp.git] / SL / LXDebug.pm
index 2c06b8b..7dddf2a 100644 (file)
@@ -157,51 +157,49 @@ sub warn {
   $self->message(WARN, $message);
 }
 
-sub dump {
-  my ($self, $level, $name, $variable, %options) = @_;
-
-  my %dumped;
-
-  my $clone_for_dump;
-  $clone_for_dump = sub {
-    my ($src) = @_;
+sub clone_for_dump {
+  my ($src, $dumped) = @_;
 
-    return undef if !defined($src);
+  return undef if !defined($src);
 
-    my $addr = refaddr($src);
+  $dumped ||= {};
+  my $addr  = refaddr($src);
 
-    return $dumped{$addr} if $dumped{$addr // ''};
+  return $dumped->{$addr} if $dumped->{$addr // ''};
 
 
-    if (blessed($src) && $src->can('as_debug_info')) {
-      $dumped{$addr} = $src->as_debug_info;
+  if (blessed($src) && $src->can('as_debug_info')) {
+    $dumped->{$addr} = $src->as_debug_info;
 
-    } elsif (ref($src) eq 'ARRAY') {
-      $dumped{$addr} = [];
+  } elsif (ref($src) eq 'ARRAY') {
+    $dumped->{$addr} = [];
 
-      foreach my $entry (@{ $src }) {
-        my $exists = !!$dumped{refaddr($entry) // ''};
-        push @{ $dumped{$addr} }, $clone_for_dump->($entry);
+    foreach my $entry (@{ $src }) {
+      my $exists = !!$dumped->{refaddr($entry) // ''};
+      push @{ $dumped->{$addr} }, clone_for_dump($entry, $dumped);
 
-        weaken($dumped{$addr}->[-1]) if $exists;
+      weaken($dumped->{$addr}->[-1]) if $exists;
 
-      }
+    }
 
-    } elsif (ref($src) =~ m{^(?:HASH|Form)$}) {
-      $dumped{$addr} = {};
+  } elsif (ref($src) =~ m{^(?:HASH|Form|SL::.+)$}) {
+    $dumped->{$addr} = {};
 
-      foreach my $key (keys %{ $src }) {
-        my $exists             = !!$dumped{refaddr($src->{$key}) // ''};
-        $dumped{$addr}->{$key} = $clone_for_dump->($src->{$key});
+    foreach my $key (keys %{ $src }) {
+      my $exists             = !!$dumped->{refaddr($src->{$key}) // ''};
+      $dumped->{$addr}->{$key} = clone_for_dump($src->{$key}, $dumped);
 
-        weaken($dumped{$addr}->{$key}) if $exists;
-      }
+      weaken($dumped->{$addr}->{$key}) if $exists;
     }
+  }
 
-    return $dumped{$addr} // "$src";
-  };
+  return $dumped->{$addr} // "$src";
+}
 
-  $variable  = $clone_for_dump->($variable);
+sub dump {
+  my ($self, $level, $name, $variable, %options) = @_;
+
+  $variable  = clone_for_dump($variable);
   my $dumper = Data::Dumper->new([$variable]);
   $dumper->Sortkeys(1);
   $dumper->Indent(2);
@@ -350,7 +348,10 @@ sub log_time {
   return 1 unless want_request_timer();
 
   my $now                    = $self->get_request_time;
-  my $diff                   = int((($now - ($self->{previous_log_time} // 0)) * 10_000 + 5) / 10);
+
+  return 1 unless $now;
+
+  my $diff                   = $self->{previous_log_time} ? int((($now - ($self->{previous_log_time} // 0)) * 10_000 + 5) / 10) : $now * 10_0000 + 5;
   $self->{previous_log_time} = $now;
 
   $self->_write("time", "${now}s Δ ${diff}ms" . (@slurp ? " (@slurp)" : ''));