X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXProt.pm;h=4940c9102116050b86eae9604fafc732b34d849b;hb=f11237c455a6440b5158206dcb2d03850ed1b7b0;hp=78c5526b4ce4fd67f73d4d168a6f0c6bdb00b316;hpb=772dc67533220a11f5ff6962abff8ea46d247ece;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 78c5526b..4940c910 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -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; } @@ -1119,7 +1120,6 @@ sub process_rcmd { my ($self, $tonode, $fromnode, $user, $cmd) = @_; - Log('rcmd', 'in', ($ref->{priv}||0), $fromnode, $cmd); if ($tonode eq $main::mycall) { my $ref = DXUser::get_current($fromnode); unless ($ref && UNIVERSAL::isa($ref, 'DXUser')) { @@ -1127,6 +1127,7 @@ sub process_rcmd $self->send_rcmd_reply($main::mycall, $fromnode, $user, "sorry...!"); return; } + Log('rcmd', 'in', ($ref->{priv}||0), $fromnode, $cmd, $user); my $cref = Route::Node::get($fromnode); unless ($cref && UNIVERSAL::isa($cref, 'Route')) { dbg("DXProt process_rcmd: Route $fromnode isn't a reference (tell G1TLH)"); @@ -1174,7 +1175,7 @@ sub send_rcmd_reply while (@_) { my $line = shift; $line =~ s/\s*$//; - Log('rcmd', 'out', $fromnode, $line); + Log('rcmd', 'out', $fromnode, $line, $user); if ($self->is_clx) { $self->send(pc85($main::mycall, $fromnode, $user, "$main::mycall:$line")); } else { @@ -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;