improve node initialisation debugging
[spider.git] / perl / DXProt.pm
index 9493637a87aef29912c66ebb217752b0fd543a02..dc5dc0b99e5bc08198e96831a7853db07dea0807 100644 (file)
@@ -254,6 +254,7 @@ sub init
        $main::me->{version} = $main::version;
        $main::me->{build} = $main::build;
        $main::me->{do_pc9x} = 1;
+       $main::me->{hostname} = $main::clusteraddr;
        $main::me->update_pc92_next($pc92_short_update_period);
        $main::me->update_pc92_keepalive;
 }
@@ -865,11 +866,11 @@ sub send_local_config
        my @remotenodes;
 
        if ($self->{isolate}) {
-               dbg("send_local_config: isolated");
+               dbg("$self->{call} send_local_config: isolated");
                @localnodes = ( $main::routeroot );
                $self->send_route($main::mycall, \&pc19, 1, $main::routeroot);
        } elsif ($self->{do_pc9x}) {
-               dbg("send_local_config: doing pc9x");
+               dbg("$self->{call} send_local_config: doing pc9x");
                my $node = Route::Node::get($self->{call});
 #              $self->send_last_pc92_config($main::routeroot);
 #              $self->send(pc92a($main::routeroot, $node)) unless $main::routeroot->last_PC92C =~ /$self->{call}/;
@@ -880,7 +881,7 @@ sub send_local_config
                # and are not themselves isolated, this to make sure that isolated nodes
                # don't appear outside of this node
 
-               dbg("send_local_config: traditional");
+               dbg("$self->{call} send_local_config: traditional");
 
                # send locally connected nodes
                my @dxchan = grep { $_->call ne $main::mycall && $_ != $self && !$_->{isolate} } DXChannel::get_all_nodes();
@@ -1218,20 +1219,31 @@ sub spawn_cmd
        my $fc = Mojo::IOLoop::Subprocess->new;
 
        # just behave normally if something has set the "one-shot" _nospawn in the channel
-       return ($cmdref->(@$args)) if $self->{_nospawn};
+       if ($self->{_nospawn}) {
+               eval { @out = $cmdref->(@$args); };
+               if ($@) {
+                       DXDebug::dbgprintring(25);
+                       push @out, DXDebug::shortmess($@);
+               }
+               return @out;
+       }
 
        #       $fc->serializer(\&encode_json);
 #      $fc->deserializer(\&decode_json);
        $fc->run(
                         sub {
                                 my $subpro = shift;
-                                if (isdbg('chan')) {
-                                        my $s = "line: $line";
-                                        $s .= ", args: " . join(', ', @$args) if $args && @$args;
+                                if (isdbg('progress')) {
+                                        my $s = qq{line: "$line"};
+                                        $s .= ", args: " . join(', ', map { defined $_ ? qq{'$_'} : q{'undef'} } @$args) if $args && @$args;
+                                        dbg($s);
                                 }
-
-                                my @res = $cmdref->(@$args);
-                                return @res;
+                                eval { @out = $cmdref->(@$args); };
+                                if ($@) {
+                                        DXDebug::dbgprintring(25);
+                                        push @out, DXDebug::shortmess($@);
+                                }
+                                return @out;
                         },
 #                       $args,
                         sub {
@@ -1260,7 +1272,7 @@ sub spawn_cmd
                                                 $self->send(@res);
                                         }
                                 }
-                                DXCommandmode::_diffms($call, $line, $t0);
+                                diffms("rcmd from $user on $call", $line, $t0, scalar @res) if isdbg('progress');
                         });
        
        return @out;