projects
/
spider.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
remove redundant wpxloc.dat
[spider.git]
/
perl
/
DXCommandmode.pm
diff --git
a/perl/DXCommandmode.pm
b/perl/DXCommandmode.pm
index 3d5ce0c9f6fb5fa9744939c7e121b8429b06b706..6306b7fbed905902abea96f23d9a14c219e98e31 100644
(file)
--- a/
perl/DXCommandmode.pm
+++ b/
perl/DXCommandmode.pm
@@
-48,7
+48,7
@@
use Mojo::UserAgent;
use strict;
use vars qw(%Cache %cmd_cache $errstr %aliases $scriptbase %nothereslug
use strict;
use vars qw(%Cache %cmd_cache $errstr %aliases $scriptbase %nothereslug
- $maxbadcount $msgpolltime $default_pagelth $cmdimportdir);
+ $maxbadcount $msgpolltime $default_pagelth $cmdimportdir
$users $maxusers
);
%Cache = (); # cache of dynamically loaded routine's mod times
%cmd_cache = (); # cache of short names
%Cache = (); # cache of dynamically loaded routine's mod times
%cmd_cache = (); # cache of short names
@@
-59,7
+59,8
@@
$maxbadcount = 3; # no of bad words allowed before disconnection
$msgpolltime = 3600; # the time between polls for new messages
$cmdimportdir = "$main::root/cmd_import"; # the base directory for importing command scripts
# this does not exist as default, you need to create it manually
$msgpolltime = 3600; # the time between polls for new messages
$cmdimportdir = "$main::root/cmd_import"; # the base directory for importing command scripts
# this does not exist as default, you need to create it manually
-#
+$users = 0; # no of users on this node currently
+$maxusers = 0; # max no users on this node for this run
#
# obtain a new connection this is derived from dxchannel
#
# obtain a new connection this is derived from dxchannel
@@
-544,8
+545,20
@@
sub run_cmd
if ($package && $self->can("${package}::handle")) {
no strict 'refs';
dbg("cmd: package $package") if isdbg('command');
if ($package && $self->can("${package}::handle")) {
no strict 'refs';
dbg("cmd: package $package") if isdbg('command');
+ if (isdbg('progress')) {
+ my $s = "CMD: '$cmd' by $call ip $self->{hostname}";
+ }
+ my $t0 = [gettimeofday];
eval { @ans = &{"${package}::handle"}($self, $args) };
eval { @ans = &{"${package}::handle"}($self, $args) };
- return (DXDebug::shortmess($@)) if $@;
+ if ($@) {
+ dbgprintring(25);
+ return (DXDebug::shortmess($@));
+ }
+ if (isdbg('progress')) {
+ my $msecs = _diffms($t0);
+ my $s = "CMD: '$cmd $args' by $call ip: $self->{hostname} ${msecs}mS";
+ dbg($s);
+ }
} else {
dbg("cmd: $package not present") if isdbg('command');
return $self->_error_out('e1');
} else {
dbg("cmd: $package not present") if isdbg('command');
return $self->_error_out('e1');
@@
-578,7
+591,8
@@
sub process
my $t = time;
my @dxchan = DXChannel::get_all();
my $dxchan;
my $t = time;
my @dxchan = DXChannel::get_all();
my $dxchan;
-
+
+ $users = 0;
foreach $dxchan (@dxchan) {
next unless $dxchan->is_user;
foreach $dxchan (@dxchan) {
next unless $dxchan->is_user;
@@
-593,6
+607,8
@@
sub process
$dxchan->prompt() if $dxchan->{state} =~ /^prompt/o;
$dxchan->t($t);
}
$dxchan->prompt() if $dxchan->{state} =~ /^prompt/o;
$dxchan->t($t);
}
+ ++$users;
+ $maxusers = $users if $users > $maxusers;
}
while (my ($k, $v) = each %nothereslug) {
}
while (my ($k, $v) = each %nothereslug) {
@@
-683,7
+699,7
@@
sub broadcast
# gimme all the users
sub get_all
{
# gimme all the users
sub get_all
{
-
return grep {$_->is_user} DXChannel::get_all()
;
+
goto &DXChannel::get_all_users
;
}
# run a script for this user
}
# run a script for this user
@@
-1295,7
+1311,14
@@
sub spawn_cmd
no strict 'refs';
# just behave normally if something has set the "one-shot" _nospawn in the channel
no strict 'refs';
# 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;
+ }
my $fc = Mojo::IOLoop::Subprocess->new;
# $fc->serializer(\&encode_json);
my $fc = Mojo::IOLoop::Subprocess->new;
# $fc->serializer(\&encode_json);
@@
-1303,13
+1326,17
@@
sub spawn_cmd
$fc->run(
sub {
my $subpro = shift;
$fc->run(
sub {
my $subpro = shift;
- if (isdbg('
spawn_cmd
')) {
+ if (isdbg('
progress
')) {
my $s = "line: $line";
$s .= ", args: " . join(', ', @$args) if $args && @$args;
my $s = "line: $line";
$s .= ", args: " . join(', ', @$args) if $args && @$args;
+ dbg($s);
}
}
- my @res = $cmdref->(@$args);
-# diffms("rcmd from $call 1", $line, $t0, scalar @res) if isdbg('chan');
- return @res;
+ eval { @out = $cmdref->(@$args); };
+ if ($@) {
+ DXDebug::dbgprintring(25);
+ push @out, DXDebug::shortmess($@);
+ }
+ return @out;
},
# $args,
sub {
},
# $args,
sub {
@@
-1334,11
+1361,15
@@
sub spawn_cmd
$dxchan->send(@res);
}
}
$dxchan->send(@res);
}
}
- diffms("by $call", $line, $t0, scalar @res) if isdbg('
chan
');
+ diffms("by $call", $line, $t0, scalar @res) if isdbg('
progress
');
});
return @out;
}
});
return @out;
}
+sub user_count
+{
+ return ($users, $maxusers);
+}
1;
__END__
1;
__END__