Check in nodestat plugin. It's not parallel yet and it doesn't work for the install time queries, to be fixed soon

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@571 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
jbjohnso 2008-02-25 22:00:46 +00:00
parent abd30586c2
commit 4bfa20583f

View File

@ -0,0 +1,95 @@
package xCAT_plugin::nodestat;
use Socket;
use Data::Dumper;
sub handled_commands {
return {
nodestat => 'nodestat',
};
}
sub pinghost {
my $node = shift;
my $rc = system("ping -q -n -c 1 -w 1 $node > /dev/null");
if ($rc == 0) {
return 1;
} else {
return 0;
}
}
sub nodesockopen {
my $node = shift;
my $port = shift;
my $socket;
my $addr = gethostbyname($node);
my $sin = sockaddr_in($port,$addr);
my $proto = getprotobyname('tcp');
socket($socket,PF_INET,SOCK_STREAM,$proto) || return 0;
connect($socket,$sin) || return 0;
return 1;
}
sub installer_query {
my $node = shift;
my $destport = 3001;
my $socket;
my $text = "";
my $proto = getprotobyname('tcp');
socket($socket,PF_INET,SOCK_STREAM,$proto) || return 0;
my $addr = gethostbyname($node);
my $sin = sockaddr_in($destport,$addr);
connect($socket,$sin) || return 0;
print $socket "stat \r";
print "stat \r";
print "here we go\n";
while (<$socket>) {
print $_."\n";
$text.=$_;
}
print "here we go\n";
return $text;
close($socket);
}
sub process_request {
my $request = shift;
my $callback = shift;
my @nodes = @{$request->{node}};
$callback->({data=>Dumper(\@nodes)});
my $node;
foreach $node (@nodes) {
my %rsp;
my $text="";
$rsp{name}=[$node];
unless (pinghost($node)) {
$rsp{data} = [ 'noping' ];
$callback->({node=>[\%rsp]});
next;
}
if (nodesockopen($node,15002)) {
$rsp{data} = [ 'pbs' ];
$callback->({node=>[\%rsp]});
next;
} elsif (nodesockopen($node,22)) {
$rsp{data} = [ 'sshd' ];
$callback->({node=>[\%rsp]});
next;
} elsif ($text = installer_query($node)) {
$rsp{data} = [ $text ];
$callback->({node=>[\%rsp]});
next;
} else {
$rsp{data} = [ 'ping' ];
$callback->({node=>[\%rsp]});
next;
}
}
}
1;