mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-31 11:22:27 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			125 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl
 | |
| #!/usr/bin/env perl
 | |
| # IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
 | |
| BEGIN
 | |
| {
 | |
|     $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
 | |
| }
 | |
| use lib "$::XCATROOT/lib/perl";
 | |
| 
 | |
| use strict;
 | |
| use xCAT::Table;
 | |
| use xCAT::Utils;
 | |
| use xCAT::TableUtils;
 | |
| use xCAT::NetworkUtils;
 | |
| use xCAT::MsgUtils;
 | |
| use Getopt::Long;
 | |
| 
 | |
| my $usage_string =
 | |
|   "Usage:
 | |
|   replaycons node [bps] [tail]
 | |
|   replaycons -h|--help
 | |
|   replaycons -v|--version
 | |
|     bps          Specifies the display rate.
 | |
|                  The default is 19200.
 | |
|     tail         Specifies the number of bytes to be displayed.
 | |
|                  The default displays all.
 | |
|     -h|--help    Display this usage statement.
 | |
|     -v|--version Display the version number.";
 | |
| 
 | |
| my $version_string = "Version 2.0";
 | |
| 
 | |
| $Getopt::Long::ignorecase = 0;
 | |
| if (!GetOptions(
 | |
|         'h|help'    => \$::HELP,
 | |
|         'v|version' => \$::VERSION)) {
 | |
|     exit(1);
 | |
| }
 | |
| if ($::HELP) {
 | |
|     print "$usage_string\n";
 | |
|     exit(0);
 | |
| }
 | |
| if ($::VERSION) {
 | |
|     print "$version_string\n";
 | |
|     exit(0);
 | |
| }
 | |
| 
 | |
| if (@ARGV < 1) {
 | |
|     print "Please specify a node name.\n";
 | |
|     exit(1);
 | |
| }
 | |
| 
 | |
| my $node = @ARGV[0];
 | |
| my $bps  = 19200;
 | |
| if (@ARGV > 1) {
 | |
|     $bps = @ARGV[1];
 | |
|     if ($bps == 0) { $bps = 19200; }
 | |
| }
 | |
| my $tail = 0;
 | |
| if (@ARGV > 2) { $tail = @ARGV[2]; }
 | |
| print "node=$node, bps=$bps, tail=$tail\n";
 | |
| 
 | |
| # get the conserver for the node
 | |
| my $conserver;
 | |
| my $hmtab = xCAT::Table->new('nodehm');
 | |
| if ($hmtab) {
 | |
|     my $ent = $hmtab->getNodeAttribs($node, [ 'node', 'conserver' ]);
 | |
|     if ($ent->{conserver}) { $conserver = $ent->{conserver}; }
 | |
| } else {
 | |
|     print "nodehm table cannot be opened\n";
 | |
|     exit(1);
 | |
| }
 | |
| my $file = "/var/log/consoles/$node";
 | |
| 
 | |
| #use confluent if it is there
 | |
| if ((-x "/opt/confluent/bin/confetty") || (-x "/usr/bin/confetty")) {
 | |
|     $file = "/var/log/confluent/consoles/$node";
 | |
| }
 | |
| 
 | |
| #print "file=$file\n";
 | |
| 
 | |
| #if has conserver, goto conserver the execute replaycons command
 | |
| my @hostinfo = xCAT::NetworkUtils->determinehostname();
 | |
| my %iphash   = ();
 | |
| foreach (@hostinfo) { $iphash{$_} = 1; }
 | |
| if (($conserver) && ($iphash{$conserver} != 1)) {
 | |
|     system("ssh -o BatchMode=yes $conserver $::XCATROOT/bin/replaycons $node $bps $tail 2>&1");
 | |
|     exit(0);
 | |
| }
 | |
| 
 | |
| 
 | |
| my $cps   = $bps / 8;
 | |
| my $ms    = 1 / $cps;
 | |
| my $msc   = 0;
 | |
| my $debug = 0;
 | |
| my @c;
 | |
| 
 | |
| select(STDOUT);
 | |
| $| = 1;
 | |
| 
 | |
| if (!open(FILE, $file)) {
 | |
|     print "replaycons: cannot open $file\n";
 | |
|     exit(1);
 | |
| }
 | |
| 
 | |
| if ($tail > 0) {
 | |
|     seek(FILE, -$tail, 2);
 | |
| }
 | |
| 
 | |
| while (<FILE>) {
 | |
|     @c = split(//);
 | |
|     foreach (@c) {
 | |
|         print $_;
 | |
|         $msc += $ms;
 | |
|         if ($msc > .1) {
 | |
|             select(undef, undef, undef, $msc);
 | |
|             $msc = 0;
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| close(FILE);
 | |
| 
 | |
| exit(0);
 | |
| 
 |