#!/usr/bin/perl

####################  MAIN  ###############################
#                                                  
# CHEQUEO DE LINKS DE FIBRA ASGA (63 E1/ 21 E1) | ASGA FIBER OPTIC CHECK   
# 
# Para Nagios
#
# Version: 0.1 Fecha: 26/3/08
#
#Autores:
#         Collini Federico
#         Pepo         
#
################### Requerimientos #########################
#
# 1- snmpwalk (http://net-snmp.sourceforge.net/docs/man/snmpwalk.html)
# 
#
#################### Uso #################################
#
# Se le pasa como argumento la IP/comunidad del equipo a chequear
#
#  
################### states for NAGIOS #################

my $STATE_OK="0";
my $STATE_WARNING="1";
my $STATE_CRITICAL="2";
my $STATE_UNKNOWN="3";
my $STATE_DEPENDENT="4";


########## Definition | DEFINICION DE VARIABLES ####################

# which snmpwalk
my $cmd = '/usr/bin/snmpwalk';

# ----- ARGS ---#

my $host = shift;
my $comunity = shift;


# -------- verify the model | verifico que modelo es ---------------#

my $eq = `$cmd $host -c $comunity -v1 sysObjectID`;
my @mod = split (' ',$eq);
@mod[3] =~ s/SNMPv2-SMI::enterprises.3979.2.6.//;


#--------- Comparisons | Comparaciones -----------------------------#

if (@mod[3] eq 3){
	#print 'es un 63 e1 '.@mod[3]."\n";
	my @salida = `$cmd $host -c $comunity -v1 enterprises.3979.2.6.3.1.5.1.2`;
	my @salbkp = split (' ',@salida[0]);
	my @salmain = split (' ',@salida[1]);
	
	my $bkp = &parceo(@salbkp[3]);
	my $main = &parceo(@salmain[3]);
	
	if (@salbkp[3] eq 0 and @salmain[3] eq 0){

	print "OK bkp: ".$bkp."\n";
	print "OK main: ".$main."\n";
		exit $STATE_OK;
		}
	else{
	print " bkp: ".$bkp." valor: ".@salbkp[3]."\n";
        print " main: ".$main." valor: ".@salmain[3]."\n";
		exit $STATE_CRITICAL;
	}
	
		}
elsif(@mod[3] eq 2){
	#print 'es un 21 e1 '.@mod[3]."\n";
	my @salida = `$cmd $host -c $comunity -v1 enterprises.3979.2.6.2.1.5.1.2`;
        my @salbkp = split (' ',@salida[0]);
        my @salmain = split (' ',@salida[1]);
        my $bkp = &parceo(@salbkp[3]);
        my $main = &parceo(@salmain[3]);

	if (@salbkp[3] eq 0 and @salmain[3] eq 0){

        print "OK bkp: ".$bkp."\n";
        print "OK main: ".$main."\n";
                exit $STATE_OK;
                }
        else{
        print " bkp: ".$bkp." valor: ".@salbkp[3]."\n";
        print " main: ".$main." valor: ".@salmain[3]."\n";
                exit $STATE_CRITICAL;
        }

		
		}


#------- parceo according to the value of MIB | funcion para parceo del valor de MIB--------# 
sub parceo{
	
	$valor = shift;
		if ($valor eq 0){
			return "Funcionamiento normal"
				}
		elsif ($valor eq 1){
			return "LOS/LOF"
				}
		elsif ($valor eq 2){
                        return "Presencia de error de CRC7"
                                }
		elsif ($valor eq 4){
                        return "Loopback ativo"
                                }
		elsif ($valor eq 8){
                        return "Fibra invertida"
                                }
		elsif ($valor eq 16){
                        return "Error de rastreamento J1-sin traduccion del portugues"
                                }
		elsif ($valor eq 32){
                        return "Presencia de AIS"
                                }
		elsif ($valor eq 64){
                        return "Placa desihabilitada "
                                }
		elsif ($valor eq 128){
                        return "Placa ausente"
                                }
		elsif ($valor eq 256){
                        return "Transmicion de la interface deshabilitada"
                                }
		else{
			return "ERROR buscar codigo"
			}

}

#--------------- checkcommands.cfg ----------------------#
#
# # 'check_asga_sdh' command definition
# define command{
#         command_name    check_asga_sdh
#                 command_line    $USER1$/check_asga_sdh.pl $HOSTADDRESS$ $ARG1$
#                         }
#
# -----------------------service ---------------------#
#
#  check_command check_asga_sdh!$comunity
#
#

############# END|FIN ###################################

#        ORIGINALES DE ASGAVISION
#
#        0- Funcionamento Normal
#        1- Presenca de LOS/LOF
#        2- Presenca de erro de CRC7
#        4- Loopback ativo
#        8- Fibra invertida
#        16- Erro de rastreamento J1
#        32- Presena de AIS(sonetPathSTSAIS)
#        64- Placa desabilitada (somente ocorre no caso do ptopto-apenas um TRO por vez)
#        128- Placa ausente
#        256- Transmissao da interface esta desabilitada

