#!/usr/bin/perl

use LWP::Simple;
use Data::Dumper ;
use warnings ;
use strict ;
use Getopt::Long qw(:config no_ignore_case bundling) ;
use Text::ParseWords ;
use Switch ;
# ==== variaveis ====

our $result     = undef ;
our $resul      = " " ;
our $optType    = undef ;
our $optHelp    = undef ;
our $warning    = undef ;
our $critical   = undef ;
our $url        = "http://10.10.12.76/8stats.htm" ;
our %info       = ('autor'=>'Wagner Luiz Witt Garcez','email'=>'wagner.garcez@interop.com.br','version'=>'1.0','script'=>$0) ;
our $numArgs    = $#ARGV +1;
our %exit_codes  = ('UNKNOWN' , 3,'CRITICAL', 2, 'WARNING', 1, 'OK', 0) ;

sub parse_args {
        GetOptions (
                "o|option=s"    => \$optType,
                "w|warning=s"   => \$warning,
                "c|critical=s"  => \$critical,
                "h|help"        => \$optHelp) ;
                if ( defined ($optHelp) ) {
                        print_help() ;
                        exit $exit_codes{"UNKNOWN"} ;
                }
                if ($numArgs < 1 ) {
                        print_usage() ;
                }
                if (!defined($optType) ) {
                        print "UNKNOWN - Faltou informar o item a ser checado. \n" ;
                        exit $exit_codes{'UNKNOWN'} ;
                }
                if ( !defined($warning) || !defined($critical) ) {
                        print "UNKNOWN - Faltou informar paramentros de Warning ou Critical. \n" ;
                        exit $exit_codes{'UNKNOWN'} ;
                }

}

sub print_usage {
        print "Usage: $0 -o|option <temperatura|umidade>  -c|critical <crtical_value> -w|warning <warning_value> [-h|help] \n" ;
        exit $exit_codes{'UNKNOWN'} ;
}
sub parse_result {
        my ($str, $stdOut, $um) = @_ ;
        $resul = get($url) ;
        if (!$resul) {
                print "UNKNOWN - Valide se a URL está correta: $url.\n"; exit $exit_codes{'UNKNOWN'} ;
        } else {
        #$resul = get($url) ;

                if ($resul =~ /$str<\w+>(\d+.\d+)\s(\W)/g) {
                        $result = $1 ;
                } elsif ($resul =~ /$str\W+\w+\>.(\d+.\d+)/g) {
                        $result = $1 ;
                } else {
                        print "UNKNOWN - Favor verificar " ;
                        exit $exit_codes{"UNKNOWN"} ;
                }
                if ( $result < $warning ) {
                        print "OK - $stdOut $result$um |$optType=$result;$warning;$critical;;\n" ;
                        exit $exit_codes{"OK"} ;
                } elsif ( $result < $critical ) {
                        print "WARNING - $stdOut $result$um |$optType=$result;$warning;$critical;;\n" ;
                        exit $exit_codes{"WARNING"} ;
                } else {
                        print "CRITICAL - $stdOut $result$um |$optType=$result;$warning;$critical;;\n" ;
                        exit $exit_codes{"CRITICAL"} ;
                }
        }
}

sub print_help {
        print "UNKNOWN - Missing arguments. \n" ;
        print "\nUsage: $0 -o [temperatura|umidade] -c [critical] -w [warning]\n" ;
        print "\n-- Parametros  ------------------------------------------------------------\n" ;
        print "   -o|--option       => define o item a ser verificado\n" ;
        print "   -w|--warning      => metrica de warning\n" ;
        print "   -c|--critical     => metrica de critical\n" ;
        print "   -h|--help         => Help do plugin\n" ;
#       print "\nAutor : $info{autor}\nEmail : $info{email}\nVersao: $info{version}\nScript: $info{script}\n" ;
        exit $exit_codes{UNKNOWN} ;
}

sub main{
        my ($str, $stdOut, $um) ;
        parse_args() ;
        switch ($optType) {
                case "temperatura"      { $str = "Temperatura" ; $stdOut = $str ; $um = "C" ; }
                case "umidade"          { $str = "Umidade relativa do ar" ; $stdOut = $str ; $um = "%" ; }

        else { print "UNKNOWN - Opção '-t' desconhecida. Favor verificar\n"; exit $exit_codes{'UNKNOWN'} } ;
        }
        parse_result($str, $stdOut, $um) ;
}

&main() ;