#!/usr/bin/perl -w

# Este archivo fue escrito para extraer via snmp el estado de las baterias de 
# una UPS marca PowerWare con interface Ethernet
#
# El mismo requiere que se le suministren 2 valores la direccion IP y
# el nombre le comunidad SNMP que posee el equipo configurado.
#
# Archivo confeccionado por Angelo Campos Leiton 

$IP = $ARGV[0];
$comunidad = $ARGV[1];
$tipo = $ARGV[2];
$msg = "NORMAL";
$state = "OK";
$temperatura = 0;

if ($tipo eq "batterystatus") {
	$estado = `snmpwalk -v 1 -c $comunidad $IP 1.3.6.1.2.1.33.1.2.1.0`;
	$estado = substr ($estado, 40);
	if ($estado eq "2") { $msg = "NORNAL" ; 
		} elsif ($estado eq "1") { $msg = "Desconocido" ;
		} elsif ($estado eq "3") { $msg = "Carga_baja" ;
		} elsif ($estado eq "4") { $msg = "Carga_muy_baja" ;
	}
	if ($msg eq "NORMAL" ) { $state = "OK" ;
		} elsif ($msg eq "Carga_baja") { $state = "WARN";
		} elsif ($msg eq "Carga_muy_baja") { $state = "CRIT";
	}
	print "".$msg. "\n" ;
}

if ($tipo eq "upsmode") {
	$estado = `snmpwalk -v 1 -c $comunidad $IP 1.3.6.1.2.1.33.1.4.1.0`;
	$estado = substr ($estado, 40);
	if ($estado eq "3") { $msg = "NORMAL" ; 
		} elsif ($estado eq "1") { $msg = "other" ;
		} elsif ($estado eq "2") { $msg = "none" ;
		} elsif ($estado eq "4") { $msg = "bypass" ;
		} elsif ($estado eq "5") { $msg = "battery" ;
		} elsif ($estado eq "6") { $msg = "booster" ;
		} elsif ($estado eq "7") { $msg = "reducer" ;
	}
	if ($msg ne "NORMAL") {
		$state = "CRIT";
	}
	print "".$msg. "\n" ;
}

if ($tipo eq "MinuteRemaining") {
	$tiemporestante = `snmpwalk -v 1 -c $comunidad $IP 1.3.6.1.2.1.33.1.2.3.0`;
	$tiemporestante = substr ($tiemporestante, 40);
	$tiemporestante *= 1;
	if ($tiemporestante lt 5) {
		$state = "CRIT";
	}
	print "".$tiemporestante. "\n" ;
}

if ($tipo eq "upsloadf1") {
	$cargaupsf1 = `snmpwalk -v 1 -c $comunidad $IP  1.3.6.1.2.1.33.1.4.4.1.5.1`;
	$cargaupsf1 = substr($cargaupsf1, 44);
	$cargaupsf1 *= 1;
	if ($cargaupsf1 gt 80) {
		$state = "CRIT";
	}
	print "".$cargaupsf1. "\n" ;
}

if ($tipo eq "upsloadf2") {
	$cargaupsf2 = `snmpwalk -v 1 -c $comunidad $IP  1.3.6.1.2.1.33.1.4.4.1.5.2`;
	$cargaupsf2 = substr($cargaupsf2, 44);
	$cargaupsf2 *= 1;
	if ($cargaupsf2 gt 80) {
		$state = "CRIT";
	}
	print "".$cargaupsf2. "\n" ;
}

if ($tipo eq "temp") {
	$temperatura = `snmpwalk -v 1 -c $comunidad $IP  1.3.6.1.4.1.534.1.6.1`;
	$temperatura = substr($temperatura, 47);
	$temperatura *= 1;
	if ($temperatura ge 40) {
		$state = "CRIT";
	}
	print "".$temperatura. "\n" ;
}

if ($tipo eq "batteryload") {
	$cargabateria = `snmpwalk -v 1 -c $comunidad $IP 1.3.6.1.2.1.33.1.2.4.0`;
	$cargabateria = substr($cargabateria, 40);
	$cargabateria *= 1;
	if ($cargabateria lt 25) { $state = "CRTI";
		} elsif ($cargabateria ge 50) { $state = "WARN";
		} elsif ($cargabateria eq 100) { $state = "OK";
	}
	print "".$cargabateria. "\n";
}

if ($tipo eq "serie") {
	$serie = `snmpwalk -v 1 -c $comunidad $IP 1.3.6.1.2.1.33.1.1.5.0`;
	$serie = substr ($serie, 44, 15);
	print "".$serie. "\n" ;
}

if ($tipo eq "model") {
	$modelo = `snmpwalk -v 1 -c $comunidad $IP 1.3.6.1.2.1.33.1.1.2.0`;
	$modelo = substr ($modelo, 40, 19);
	print "".$modelo. "\n" ;
}

if ($tipo eq "inputvolf1") {
	$voltajeentradaf1 = `snmpwalk -v 1 -c $comunidad $IP 1.3.6.1.2.1.33.1.3.3.1.3.1`;
	$voltajeentradaf1 = substr ($voltajeentradaf1, 44);
	$voltajeentradaf1 *= 1;
	if ($voltajeentradaf1 le 80 or $voltajeentradaf1 ge 130) {
		$state = "CRIT";
	}
	print "".$voltajeentradaf1. "\n" ;
}

if ($tipo eq "inputvolf2") {
	$voltajeentradaf2 = `snmpwalk -v 1 -c $comunidad $IP 1.3.6.1.2.1.33.1.3.3.1.3.2`;
	$voltajeentradaf2 = substr ($voltajeentradaf2, 44);
	$voltajeentradaf2 *= 1;
	if ($voltajeentradaf2 le 80 or $voltajeentradaf2 ge 130) {
		$state = "CRIT";
	}
	print "".$voltajeentradaf2. "\n" ;
}

if ($tipo eq "inputfre") {
	$frecuenciaentrada = `snmpwalk -v 1 -c $comunidad $IP 1.3.6.1.2.1.33.1.3.3.1.2.1`;
	$frecuenciaentrada = substr ($frecuenciaentrada, 44);
	$frecuenciaentrada = $frecuenciaentrada*0.1;
	if ($frecuenciaentrada le 56 or $frecuenciaentrada ge 64) {
		$state = "CRIT";
	} 
	print "".$frecuenciaentrada. "\n" ;
}

if ($tipo eq "batteryvol") {
	$batteryvol = `snmpwalk -v 1 -c $comunidad $IP 1.3.6.1.2.1.33.1.2.5.0`;
	$batteryvol = substr($batteryvol, 40);
	$batteryvol = $batteryvol*0.1;
	if ($batteryvol le 95 ) {
		$state = "CRIT";
	}
	print "".$batteryvol. "\n" ;
}

if ($state eq "OK") { exit 0;
	} elsif ($state eq "WARN") { exit 1;
	} elsif ($state eq "CRIT") { exit 2;
	} else { #unknown!
        exit 3;
}
