⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getrouterinfociscocrs.pl

📁 Cisco CRS路由器性能采集程序C isco CRS路由器性能采集程序Cisco CRS路由器性能采集程序
💻 PL
字号:
#!/usr/local/bin/perl######################### GetRouterInfoCiscoCRS.pl ######################### file type: perl                                                         ## basic property: gather cisco CRS performance data                       ## develop plain: SUN Solaris                                              ## creator: matao <mat@zhong-ying.com>                                     ## date: 2006/01/05                                                        ## modifer: matao <mat@zhong-ying.com>                                     ## content: add CPU use ratio                                              ## date: 2006/01/10                                                        ##                                                                         ############################################################################use strict;use DBI;use SNMP::MIB::Compiler;use Net::SNMP;use WriteErrLog;use GetSHDir;use TelnetUtil;my $dbh;my $SNMPSess;my @Result;my %DeltaValue;my $i;my $k;my $j;my $Error;my $GatherFileName = "GetRouterInfoCiscoCRS.pl";my $DeviceModelCode = "'DEV_IP_R_CI_CRS'";my $ConItemName = 'B_DEV_RValid';#获取系统安装目录my $SetupDir = GetSHDir('SetupDir');if ( $SetupDir < 0 ) {	my $Detail = "Can not open properties file for get SetupDir\n";	WriteErrLog('alarmlog.txt',$dbh,'RES3000',$GatherFileName,'GetSHDir Error',$Detail, "ResPerfLogDir");	$SetupDir = "/slview/nms/";}#功能函数所在文件unshift (@INC,"$SetupDir/lib");require ("OraPub.pl");require ("PerfPub.pl");require ("SnmpUtil.pl");require ("CommonPub.pl");require ("Debug.pl");&Debug("Begin $GatherFileName\n",0);#初始化运行环境,其中关于MIB路径部分需要有改动my ($dbh,$DevTime,$Mib,$GroupNo,	$DeviceNum,$DevColInfoRef,				#$DeviceIDRef,$LoopAddressRef,$ROCommunityRef,	$ExtItemCodesRef,$ExtOidsRef,$ParaOidRef,$ItemTypeRef,$GatherTypeRef,	$CurValueRef,$PreValueRef,$PerfRef,$PrePerfRef,	$SnmpTimeOut,$SnmpRetry,$PingTimeOut,	$DevBPFile,$DevDataFile,$DevAlarmFile,$DevBakFile,$TelnetTimeOut) = PrepareGather($SetupDir,$GatherFileName,$DeviceModelCode,@ARGV);#here list all the oid name needed to getmy @CPUOids = (	'1.3.6.1.4.1.9.9.109.1.1.1.1.8'			#CPU Use Ratio);my @MemOids = (	'1.3.6.1.4.1.9.9.48.1.1.1.5',   #mem used	'1.3.6.1.4.1.9.9.48.1.1.1.6',   #mem free);for ( $i = 0; $i < $DeviceNum; $i ++ ) {    my %SDevCol = %{$DevColInfoRef->[$i]};	&Debug("Begin $SDevCol{'DeviceID'} $SDevCol{'LoopAddress'} $SDevCol{'SNMPCommunity'}...\n",1);		#get ping status and calculate down occur time.	my $PingStatus = &GetPingStatus($SDevCol{'LoopAddress'},$PingTimeOut);	$PerfRef->{$SDevCol{'DeviceID'}}{'-1'}{'B_PingStatus'} = $PingStatus;	if($SDevCol{'ColItems'}{$ConItemName}==1 || $SDevCol{'ColItems'}{'ALL'}==1)	{		$PerfRef->{$SDevCol{'DeviceID'}}{'-1'}{$ConItemName} = $PingStatus;	}	$PerfRef->{$SDevCol{'DeviceID'}}{'-1'}{'B_SnmpStatus'} = 0;			#通过snmp获得数据	$SNMPSess = &CreateSnmpSession_ext($Mib,\%SDevCol,$SnmpTimeOut,$SnmpRetry,$CurValueRef);	if ( !defined($SNMPSess) ) {		if ( defined $PrePerfRef->{$SDevCol{'DeviceID'}} ) {			%{$PerfRef->{$SDevCol{'DeviceID'}}} = %{$PrePerfRef->{$SDevCol{'DeviceID'}}};		}		if ( $PrePerfRef->{$SDevCol{'DeviceID'}}{'-1'}{'B_DownOccurTime'} == 0 ) {			$PerfRef->{$SDevCol{'DeviceID'}}{'-1'}{'B_DownOccurTime'} = $DevTime;		}		$PerfRef->{$SDevCol{'DeviceID'}}{'-1'}{'B_SnmpStatus'} = 0;		$PerfRef->{$SDevCol{'DeviceID'}}{'-1'}{'B_PingStatus'} = $PingStatus;		if($SDevCol{'ColItems'}{$ConItemName}==1 || $SDevCol{'ColItems'}{'ALL'}==1)		{			$PerfRef->{$SDevCol{'DeviceID'}}{'-1'}{$ConItemName} = $PingStatus;		}				my $Detail="Can not get info of $SDevCol{'DeviceID'}: create SNMP session failed,$Error\n";		&Debug($Detail,2);		&WriteErrLog('alarmlog.txt',$dbh,'PER0405',$GatherFileName,'SNMP Session Error', $Detail, 'ResLogDir');		$SNMPSess = '';#		next;	}	else {		#judge if the device has downed by 		my $Downed = &DetectDeviceDown($SNMPSess,$Mib,$SDevCol{'DeviceID'},$CurValueRef,$PreValueRef);				#get by snmp		#get device status ,CPU use ratio		if($SDevCol{'ColItems'}{'B_RCPUUseRatio'}==1 || $SDevCol{'ColItems'}{'ALL'}==1)		{			&Debug("get device status ,CPU use ratio\n", 2);			my @Index = ();			($Error, @Result) = &SnmpGetTable($SNMPSess, $Mib, \@Index, @CPUOids);			if ( $Error ) {				if ( defined $PrePerfRef->{$SDevCol{'DeviceID'}}{'-1'}{'B_RCPUUseRatio'} ) {					$PerfRef->{$SDevCol{'DeviceID'}}{'-1'}{'B_RCPUUseRatio'} = $PrePerfRef->{$SDevCol{'DeviceID'}}{'-1'}{'B_RCPUUseRatio'};				}				my $Detail = "Can not get info of $SDevCol{'DeviceID'}:$Error\n";				&Debug($Detail, 2);				&WriteErrLog('alarmlog.txt', $dbh, 'RES3000', $GatherFileName, 'SNMP Error', $Detail, 'ResLogDir');			}			else {				$PerfRef->{$SDevCol{'DeviceID'}}{'-1'}{'B_SnmpStatus'} = 1;				my $CPURatio = 0;				for ( $k = 0; $k < @Index; $k ++ ) {				    #&Debug ("Result[$k]=$Result[$k].\n", 2);					$CPURatio += $Result[0][$k];				}				$CPURatio = sprintf("%.2f", $CPURatio);				$PerfRef->{$SDevCol{'DeviceID'}}{'-1'}{'B_RCPUUseRatio'} = $CPURatio;				&Debug ("CPURatio=$PerfRef->{$SDevCol{'DeviceID'}}{'-1'}{'B_RCPUUseRatio'}\n", 2);			}		}			#get device status ,MEM use ratio		if($SDevCol{'ColItems'}{'B_RMEMUseRatio'}==1 || $SDevCol{'ColItems'}{'ALL'}==1)		{			&Debug("get device status ,MEM use ratio\n", 2);			my @Index = ();			($Error,@Result) = &SnmpGetTable($SNMPSess,$Mib,\@Index,@MemOids);			if ( $Error ) {				if ( defined $PrePerfRef->{$SDevCol{'DeviceID'}}{'-1'}{'B_RMEMUseRatio'} ) {					$PerfRef->{$SDevCol{'DeviceID'}}{'-1'}{'B_RMEMUseRatio'} = $PrePerfRef->{$SDevCol{'DeviceID'}}{'-1'}{'B_RMEMUseRatio'};				}				my $Detail="Can not get info of $SDevCol{'DeviceID'}:$Error\n";				&Debug($Detail,2);				&WriteErrLog('alarmlog.txt',$dbh,'PER0405',$GatherFileName,'SNMP  Error', $Detail, 'ResLogDir');			}			else {				#calculate the perfs				my $MemUsed = 0;				my $MemFree = 0;								$PerfRef->{$SDevCol{'DeviceID'}}{'-1'}{'B_SnmpStatus'} = 1;				for ( $j = 0; $j < @Index; $j ++ ) {				    $MemUsed += $Result[0][$j];				    $MemFree += $Result[1][$j];				}				my $MemRatio = ($MemUsed + $MemFree) != 0 ? $MemUsed * 100 / ($MemUsed + $MemFree) : 0;				$MemRatio = sprintf("%.2f", $MemRatio);				$PerfRef->{$SDevCol{'DeviceID'}}{'-1'}{'B_RMEMUseRatio'} = $MemRatio;				&Debug ("PerfRef->{$SDevCol{'DeviceID'}}{'-1'}{'B_RMEMUseRatio'} = $MemRatio\n", 2);			}		}		#get ext perf		&Debug("get extended perf...\n",0);		$Error = &GetExtPerf($dbh,$SDevCol{'DeviceID'},$SNMPSess,$Mib,$CurValueRef,$PreValueRef,$PerfRef,$PrePerfRef,$ExtItemCodesRef,$ExtOidsRef,$ParaOidRef,$ItemTypeRef,$GatherTypeRef);		if ( $Error ) {			my $Detail = "Can not get info of $SDevCol{'DeviceID'}:$Error\n";			&Debug($Detail,2);			&WriteErrLog('alarmlog.txt',$dbh,'PER0405',"$0",'SNMP  Error', $Detail, 'ResLogDir');		}		if($SDevCol{'ColItems'}{$ConItemName}==1 || $SDevCol{'ColItems'}{'ALL'}==1)		{			&GetDeviceStatus($SDevCol{'DeviceID'},$PerfRef,$PrePerfRef,$DevTime,$ConItemName);		}		else		{			&GetDeviceStatus($SDevCol{'DeviceID'},$PerfRef,$PrePerfRef,$DevTime,'');		}		if ($SDevCol{'ColItems'}{'B_CardCPUUseRatio'}==1 || $SDevCol{'ColItems'}{'B_CardMEMUseRatio'}==1 || $SDevCol{'ColItems'}{'ALL'}==1){#通过snmp获得数据			&Debug("get card info with snmp\n", 0);			my $ret = &GetCardInfoSnmp($SNMPSess,$Mib,$SDevCol{'DeviceID'},\%{$SDevCol{'ColItems'}},$PerfRef,$CurValueRef);			if ($ret == -1){				#性能指标取前次值				&GetPreValue($PerfRef,$PrePerfRef,$SDevCol{'DeviceID'},\%SDevCol);			}		}		if ($SNMPSess ne ''){			$SNMPSess->close();		}		#		$SNMPSess->close();	}#end of else snmpsess}&SaveGatherData($SetupDir,$GroupNo,$dbh,$DevTime,$CurValueRef,$PerfRef,$DevBPFile,$DevDataFile,$DevAlarmFile,$DevBakFile);$dbh->disconnect();&Debug("$GatherFileName succeeded!\n");exit(0);sub GetCardInfoSnmp(){	my ($sess,$mib,$DeviceID,$ColItems,$PerfRef,$CurValueRef) = @_;#	print "$ColItems->{'B_CardCPUUseRatio'}\n";	my %PhysicalName;#板卡index与物理名称对应关系	if ($ColItems->{'B_CardCPUUseRatio'} == 1 || $ColItems->{'ALL'}==1){		&Debug("getting cpu info...\n",0);		my @Index;		my %cpu;		my $cpmCPUTotalPhysicalIndex = '1.3.6.1.4.1.9.9.109.1.1.1.1.2';		my $cpmCPUTotal5minRev = '1.3.6.1.4.1.9.9.109.1.1.1.1.8';		my @CPUOids = ($cpmCPUTotalPhysicalIndex,$cpmCPUTotal5minRev);		#获取cpu利用率		my ($Error,@Result) = &SnmpGetTable($sess,$mib,\@Index,@CPUOids);		if ($Error){			my $Detail="Can not get cpu info of $DeviceID:$Error\n";			&Debug($Detail,2);			&WriteErrLog('alarmlog.txt','','PER0405',"$0",'SNMP Error', $Detail, 'ResLogDir');			return -1;		}		else {			for my $k (0..$#Index){				$cpu{$Result[0][$k]} = $Result[1][$k];			}		}				#通过index找出板卡的物理名称		my $entPhysicalName = '1.3.6.1.2.1.47.1.1.1.1.7';		my @NameOids = ($entPhysicalName);		foreach my $NameIndex (keys %cpu){			if ($PhysicalName{$NameIndex} eq ''){				my ($Error,$Result) = &SnmpGet($sess,$mib,$NameIndex,@NameOids);				if ($Error){					my $Detail="Can not get cpu info of $DeviceID:$Error\n";					&Debug($Detail,2);					&WriteErrLog('alarmlog.txt','','PER0406',"$0",'SNMP Error', $Detail, 'ResLogDir');					return -1;				}				else {					$PhysicalName{$NameIndex} = $Result;#					print "PhysicalName{$NameIndex} = $Result\n";				}			}			$PerfRef->{$DeviceID}{$PhysicalName{$NameIndex}}{'B_CardCPUUseRatio'} = $cpu{$NameIndex};		}	}	if ($ColItems->{'B_CardMEMUseRatio'} == 1 || $ColItems->{'ALL'}==1){		&Debug("getting mem info...\n",0);		my @Index;		my (%memPerf,%memValue);		my $cempMemPoolName = '1.3.6.1.4.1.9.9.221.1.1.1.1.3';		my $cempMemPoolValid = '1.3.6.1.4.1.9.9.221.1.1.1.1.6';		my $cempMemPoolUsed = '1.3.6.1.4.1.9.9.221.1.1.1.1.7';		my $cempMemPoolFree = '1.3.6.1.4.1.9.9.221.1.1.1.1.8';		my @MEMOids = ($cempMemPoolName,$cempMemPoolValid,$cempMemPoolUsed,$cempMemPoolFree);		#获取mem利用率		my ($Error,@Result) = &SnmpGetTable($sess,$mib,\@Index,@MEMOids);		if ($Error){			my $Detail="Can not get mem info of $DeviceID:$Error\n";			&Debug($Detail,2);			&WriteErrLog('alarmlog.txt','','PER0407',"$0",'SNMP Error', $Detail, 'ResLogDir');			return -1;		}		else {			for my $k (0..$#Index){#				print "($Result[0][$k] =~ /Processor/i && $Result[1][$k] == 1)";				if ($Result[0][$k] =~ /Processor/i && $Result[1][$k] == 1){					my ($ind) = split /\./,$Index[$k];					$memValue{$ind}{'CardMemUsed'} = $Result[2][$k];					$memValue{$ind}{'CardMemFree'} = $Result[3][$k];					$memValue{$ind}{'CardMemTotal'} = $Result[2][$k] + $Result[3][$k];					$memPerf{$ind} = ($Result[2][$k] + $Result[3][$k] == 0) ? 0 : int($Result[2][$k] * 10000 / ($Result[2][$k] + $Result[3][$k])) / 100;				}			}		}				#通过index找出板卡的物理名称		my $entPhysicalName = '1.3.6.1.2.1.47.1.1.1.1.7';		my @NameOids = ($entPhysicalName);		foreach my $NameIndex (keys %memPerf){			if ($PhysicalName{$NameIndex} eq ''){				my ($Error,$Result) = &SnmpGet($sess,$mib,$NameIndex,@NameOids);				if ($Error){					my $Detail="Can not get mem info of $DeviceID:$Error\n";					&Debug($Detail,2);					&WriteErrLog('alarmlog.txt','','PER0406',"$0",'SNMP Error', $Detail, 'ResLogDir');					return -1;				}				else {					$PhysicalName{$NameIndex} = $Result;				}			}			$PerfRef->{$DeviceID}{$PhysicalName{$NameIndex}}{'B_CardMEMUseRatio'} = $memPerf{$NameIndex};			$CurValueRef->{$DeviceID}{$PhysicalName{$NameIndex}}{'RMemUsed'} = $memValue{$NameIndex}{'CardMemUsed'};			$CurValueRef->{$DeviceID}{$PhysicalName{$NameIndex}}{'RMemFree'} = $memValue{$NameIndex}{'CardMemFree'};			$CurValueRef->{$DeviceID}{$PhysicalName{$NameIndex}}{'RMemTotal'} = $memValue{$NameIndex}{'CardMemTotal'};		}	}	return 0;}#################################################################### 获取前一次卡信息#sub GetPreValue(){	my ($PerfRef,$PrePerfRef,$DevID,$DevColRef)=@_;		#性能指标取前次值	foreach my $outer (keys %{$PrePerfRef->{$DevID}}){		if (defined $PrePerfRef->{$DevID}{$outer}{'B_CardCPUUseRatio'} && ($DevColRef->{'ColItems'}{'B_CardCPUUseRatio'}==1 || $DevColRef->{'ColItems'}{'ALL'}==1)){			$PerfRef->{$DevID}{$outer}{'B_CardCPUUseRatio'} = $PrePerfRef->{$DevID}{$outer}{'B_CardCPUUseRatio'};		}		if (defined $PrePerfRef->{$DevID}{$outer}{'B_CardMEMUseRatio'} && ($DevColRef->{'ColItems'}{'B_CardMEMUseRatio'}==1 || $DevColRef->{'ColItems'}{'ALL'}==1)){			$PerfRef->{$DevID}{$outer}{'B_CardMEMUseRatio'} = $PrePerfRef->{$DevID}{$outer}{'B_CardMEMUseRatio'};		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -