mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-31 03:12:30 +00:00 
			
		
		
		
	git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@3696 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			158 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env perl
 | |
| use Getopt::Long;
 | |
| BEGIN
 | |
| {
 | |
|   $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
 | |
| }
 | |
| #Modules to use
 | |
| use lib "$::XCATROOT/lib/perl";
 | |
| use xCAT::Utils;
 | |
| use xCAT_monitoring::rrdutil;
 | |
| use xCAT_monitoring::rmcmetrix;
 | |
| 
 | |
| ###############################################################
 | |
| #Error handle
 | |
| #Input:
 | |
| #	$c	error code
 | |
| #	$m	error msg
 | |
| #return:
 | |
| #	None;
 | |
| ##############################################################
 | |
| sub err_handle
 | |
| {
 | |
| 	my ($c, $m) = @_;
 | |
| 	if($c != 0){
 | |
| 		print "ERROR: $m\n";
 | |
| 		exit($c);
 | |
| 	}
 | |
| }
 | |
| ###############################################################
 | |
| #sub getcrontime
 | |
| #Input:
 | |
| #	$minute	interval in minute
 | |
| #return:
 | |
| #	string whose format is "MIN HOUR DAY MONTH *"
 | |
| ##############################################################
 | |
| sub getcrontime
 | |
| {
 | |
| 	my $minute = shift @_;
 | |
| 	my ($min, $hour, $day, $month);
 | |
| 	my $temp = undef;
 | |
| 	my $temp1 = undef;
 | |
| 	$temp =  $minute % 60 ;
 | |
| 	if($temp < 2){
 | |
| 		$min = '*';
 | |
| 	} else {
 | |
| 		$temp1 = $temp;
 | |
| 		$min = '0';
 | |
| 		while($temp1 < 60){
 | |
| 			$min = $min.",$temp1";
 | |
| 			$temp1 = $temp1 + $temp;
 | |
| 		}
 | |
| 	}
 | |
| 	$minute = int $minute/60;
 | |
| 	$temp = $minute % 24;
 | |
| 	if($temp < 2){
 | |
| 		$hour = '*';
 | |
| 	} else {
 | |
| 		$temp1 = $temp;
 | |
| 		$hour = '0';
 | |
| 		while($temp1 < 24){
 | |
| 			$hour = $hour.",$temp1";
 | |
| 			$temp1 = $temp1 + $temp;
 | |
| 		}
 | |
| 	}
 | |
| 	$minute = int $minute/24;
 | |
| 	$temp = $minute % 31;
 | |
| 	if($temp < 2){
 | |
| 		$day = '*';
 | |
| 	} else {
 | |
| 		$temp1 = $temp;
 | |
| 		$day = '0';
 | |
| 		while($day < 31){
 | |
| 			$day = $day.",$temp1";
 | |
| 			$temp1 = $temp1 + $temp;
 | |
| 		}
 | |
| 	}
 | |
| 	$minute = int $minute/31;
 | |
| 	$temp = $minute % 12;
 | |
| 	if($temp < 2){
 | |
| 		$month = '*';
 | |
| 	} else {
 | |
| 		$month = '0';
 | |
| 		while($month < 12){
 | |
| 			$month = $month.",$temp1";
 | |
| 			$temp1 = $temp1 + $temp;
 | |
| 		}
 | |
| 	}
 | |
| 	return "$min $hour $day $month *";
 | |
| 
 | |
| }
 | |
| ################################################################
 | |
| #Usage:
 | |
| #	1. To start RRD server
 | |
| #	./rmcmetrixmon init rrdserver
 | |
| #	2. To stop RRD server
 | |
| #	./rmcmetrixmon clean rrdserver
 | |
| #	3. To start a data collector
 | |
| #	./rmcmetrixmon init resourceclass resoucename attr0, attr1, attr2, ... minute
 | |
| #	4. To stop all data collectors and data consolidators
 | |
| #	./rmcmetrixmon clean 
 | |
| #	5. To work as a data collector 
 | |
| #	./rmcmetrixmon data resourceclass resourcename attr0, attr1, attr2, ... minute
 | |
| #	6. To work as a data consolidator 
 | |
| #	./rmcmetrixmon sum resourceclass attr0, attr1, attr2, ... minute
 | |
| #################################################################	
 | |
| 
 | |
| my $cmd = $ARGV[0];
 | |
| my @tabs = ();
 | |
| my $entry = undef;
 | |
| my $minute = undef;
 | |
| my $crontime = undef;
 | |
| my $code = 0;
 | |
| my $msg = undef;
 | |
| if($cmd eq 'init'){
 | |
| 	if ($ARGV[1] eq 'rrdserver'){
 | |
| 		$code = xCAT_monitoring::rrdutil::start_RRD_server('13900', "/var/rrd/");
 | |
| 		&err_handle($code, "can't start RRD server");
 | |
| 		exit 0;
 | |
| 	}
 | |
| 	$minute = $ARGV[4];
 | |
| 	$crontime = &getcrontime($minute);
 | |
| 	($code, $msg) = xCAT::Utils->add_cron_job("$crontime /opt/xcat/sbin/rmcmon/rmcmetrixmon data $ARGV[1] $ARGV[2] $ARGV[3] $ARGV[4] > /dev/null");
 | |
| 	&err_handle($code, $msg);
 | |
| 	if(xCAT::Utils->isMN()){
 | |
| 		$minute = $minute * 5;
 | |
| 		$crontime = &getcrontime($minute);
 | |
| 		($code, $msg) = xCAT::Utils->add_cron_job("$crontime /opt/xcat/sbin/rmcmon/rmcmetrixmon sum $ARGV[1] $ARGV[3] $ARGV[4] > /dev/null");
 | |
| 		&err_handle($code, $msg);
 | |
| 	}
 | |
| } elsif ($cmd eq 'clean'){
 | |
| 	if ($ARGV[1] eq 'rrdserver'){
 | |
| 		$code = xCAT_monitoring::rrdutil::stop_RRD_server();
 | |
| 		&err_handle($code, "can't stop RRD server");
 | |
| 		exit 0;
 | |
| 	}
 | |
| 
 | |
| 	$msg = `rm -rf /var/rrd/*`; 
 | |
| 	&err_handle($?, $msg);
 | |
| 	@tabs = `/usr/bin/crontab -l 2>/dev/null;`;
 | |
| 	foreach $entry (@tabs){
 | |
| 		chomp($entry);
 | |
| 		if($entry =~ /rmcmetrixmon/){
 | |
| 			($code, $msg) = xCAT::Utils->remove_cron_job($entry);
 | |
| 			&err_handle($code, $msg);
 | |
| 		}
 | |
| 	}
 | |
| } elsif ($cmd eq 'data'){
 | |
| 	($code, $msg) = &xCAT_monitoring::rmcmetrix::getmetrix($ARGV[1], $ARGV[2], $ARGV[3], $ARGV[4]);
 | |
| 	&err_handle($code, $msg);
 | |
| } elsif ($cmd eq 'sum'){
 | |
| 	($code, $msg) = &xCAT_monitoring::rmcmetrix::get_sum_metrix($ARGV[2], $ARGV[3]);
 | |
| 	&err_handle($code, $msg);
 | |
| } else {
 | |
| 	print "ERROR:Invalid parameter\n";
 | |
| }
 | |
| 
 | |
| 1;
 |