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:
parent
abd30586c2
commit
4bfa20583f
95
xCAT-server-2.0/lib/xcat/plugins/nodestat.pm
Normal file
95
xCAT-server-2.0/lib/xcat/plugins/nodestat.pm
Normal 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;
|
Loading…
x
Reference in New Issue
Block a user