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:
		
							
								
								
									
										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;
 | 
			
		||||
		Reference in New Issue
	
	Block a user