#!/usr/bin/perl -w
#########################################################################################
## Author:      BRIAN HUNTER
## Date:        7/16/2024
## Email:       brian@sutechy.com
## Script:      debug_counters.pl 
## Description: Script used to Debug Counters on RedHat Linux Cluster for EMC Engineering.
##		And execute it on BigBrother.
#########################################################################################
my $COLUMN="debug";
my $COLOR="green";
my $MACHINE=`hostname`; chomp($MACHINE);
my $STATUS="DEBUG COUNTERS CURRENT STATUS";
my $DATETIME=`/usr/bin/date '+%m%d%Y_%H:%M:%S'`;
chomp($DATETIME);

############################################################################
## NEED TO MAKE SURE THESE VALUES ARE ACCURATE
############################################################################
my $BB="/usr/local/bb/bin/bb";
my $BBDISP="100.115.92.195";    # CHANGE IP TO BBSERVER IP
############################################################################

############################################################################
## CHANGE WHERE YOUR INPUT_COUNTERS.txt FILE IS LOCATED
############################################################################
my $BASE="/usr/lib/xymon/client/ext";
my $COUNTERS_FILE="$BASE/INPUT_COUNTERS.txt";

############################################################################
## THESE ARE THE ACTUAL FILES THAT YOU WANT TO COLLECT YOUR COUNTERS FROM
## 
## YOU CAN CHANGE THE PATH TO ANYWHERE
############################################################################
my $OUTPUT_SORTED_PASS="/tmp/OUTPUT_PASS";    
my $OUTPUT_SORTED_FAIL="/tmp/OUTPUT_FAIL";    
############################################################################

############################################################################
## CHANGE PARAETERS PER CHECK(S) 
############################################################################
my $CHECK_1_LENGTH="58";
my $CHECK_2_LENGTH="16";
my $CHECK_3_LENGTH="16";
my $CHECK_4_LENGTH="16";
my $CHECK_5_LENGTH="7";
my $CHECK_6_LENGTH="3";
############################################################################


############################################################################
## DO NOT TOUCH THESE
############################################################################
my $OUTPUT="/tmp/OUTPUT.$MACHINE.$COLUMN.log";
my $PASS="/tmp/PASS.$MACHINE.$COLUMN.log";
my $FAIL="/tmp/FAIL.$MACHINE.$COLUMN.log";
unlink $OUTPUT if($OUTPUT);
unlink $PASS if($PASS);
unlink $FAIL if($FAIL);
############################################################################

my $cnt=0;


open(STDOUT, ">>$OUTPUT") or die "UNABLE TO WRITE TO STDOUT: $! ";
open(PASS, ">>$PASS") or die "UNABLE TO WRITE TO PASS  $! ";
open(FAIL, ">>$FAIL") or die "UNABLE TO WRITE TO FAIL  $! ";

open(FILE, "<$COUNTERS_FILE") or die "UNABLE TO OPEN COUNTERS FILE: $!";
while() {
	chomp($_);
	$cnt += 1;
	print STDOUT "\nLINE:$cnt:>> $_\n";

	#  1980356572345690neHkKerTioPQeCmB8U93ETh48Yn56AwU8888888ABY

	my $check_1 = length($_);
	if($check_1 ne $CHECK_1_LENGTH) {
	   $COLOR="red";
	   my $COLOR_CHK1="red";
	   print STDOUT "&${COLOR_CHK1} CHECK_LENGTH_1:>> $check_1\n";				# Total length of each LINE
	   print FAIL "$_\n";
	   next if($FAIL); 	# IF LENGTH is NOT EQUAL then skip next checks
	} else {
	      my $COLOR_CHK1="green";
	      print STDOUT "&${COLOR_CHK1} CHECK_LENGTH_1:>> $check_1\n";				# Total length of each LINE
	      print PASS "$_\n";
	}

	my $COLOR_CHK2_B;
	my $check_2 = substr($_,0,$CHECK_2_LENGTH);	  					# 1st 16 numbers [0-9] 
	my $check_2_len = length($check_2); 	
	if($check_2_len ne $CHECK_2_LENGTH) {
	   my $COLOR="red";
	   my $COLOR_CHK2="red";
	   print STDOUT "&${COLOR_CHK2} CHECK_LENGTH_2:>> $check_2_len \n"; 			# 16	
	   print STDOUT "&${COLOR_CHK2} CHECK_2:>> $check_2 \n";	  				# 1980356572345690
	   print FAIL "$_\n";
	} elsif($check_2 !~ m/^[0-9]{16}$/) {
	      $COLOR="red";
	      $COLOR_CHK2_B="red";
	      print STDOUT "&${COLOR_CHK2_B} CHECK_2:>> $check_2 \n";	  				# 1980356572345690
	      print FAIL "$_\n";
        } else {
	   $COLOR_CHK2="green";
	   print STDOUT "&${COLOR_CHK2} CHECK_LENGTH_2:>> $check_2_len \n"; 			# 16	
	   print STDOUT "&${COLOR_CHK2} CHECK_2:>> $check_2 \n";	  				# 1980356572345690
	   print PASS "$_\n";
	}

	my $COLOR_CHK3;
	my $check_3 = substr($_,16,$CHECK_3_LENGTH);   					# 2nd 16 characters that are [a-zA-Z]
	my $check_3_len = length($check_3); 	
	if($check_3_len ne $CHECK_3_LENGTH) {
	   my $COLOR="red";
	   my $COLOR_CHK3="red";
	   print STDOUT "&${COLOR_CHK3} CHECK_LENGTH_3:>> $check_3_len \n"; 			# 16	  
	   print STDOUT "&${COLOR_CHK3} CHECK_3:>> $check_3\n";    				# neHkKerTioPQeCmB
	   print FAIL "$_\n";
	} elsif($check_3 !~ m/^[a-zA-Z]{16}$/) {
	      $COLOR="red";
	      $COLOR_CHK3_B="red";
	      print STDOUT "&${COLOR_CHK3_B} CHECK_3:>> $check_3 \n";	  				# 1980356572345690
	      print FAIL "$_\n";
	} else {
	   $COLOR_CHK3="green";
	   print STDOUT "&${COLOR_CHK3} CHECK_LENGTH_3:>> $check_3_len \n"; 			# 16	  
	   print STDOUT "&${COLOR_CHK3} CHECK_3:>> $check_3\n";    				# neHkKerTioPQeCmB
	   print PASS "$_\n";
	}

	my $check_4 = substr($_,32,$CHECK_4_LENGTH);   					# 3rd 16 characters that are [0-9a-zA-Z]
	my $check_4_len = length($check_4); 	
	if($check_4_len ne $CHECK_4_LENGTH) {
	   my $COLOR="red";
	   my $COLOR_CHK4="red";
	   print STDOUT "&${COLOR_CHK4} CHECK_LENGTH_4:>> $check_4_len \n"; 			# 16	  
	   print STDOUT "&${COLOR_CHK4} CHECK_4:>> $check_4\n"; 	  				# 8U93ETh48Yn56AwU2
	   print FAIL "$_\n";
	} elsif($check_4 !~ m/^[a-z0-9A-Z]{16}$/) {
	      my $COLOR="red";
	      my $COLOR_CHK4_B="red";
	      print STDOUT "&${COLOR_CHK2_B} CHECK_4:>> $check_4 \n";	  				# 1980356572345690
	      print FAIL "$_\n";
	} else {
	   my $COLOR_CHK4="green";
	   print STDOUT "&${COLOR_CHK4} CHECK_LENGTH_4:>> $check_4_len \n"; 			# 16	  
	   print STDOUT "&${COLOR_CHK4} CHECK_4:>> $check_4\n"; 	  				# 8U93ETh48Yn56AwU2
	   print PASS "$_\n";
	}


	my $check_5 = substr($_,48,$CHECK_5_LENGTH);   					# 4th 7 characters that are [8888888]
	my $check_5_len = length($check_5); 	
	if($check_5_len ne $CHECK_5_LENGTH) {
	   my $COLOR="red";
	   my $COLOR_CHK5="red";
	   print STDOUT "&${COLOR_CHK5} CHECK_LENGTH_5:>> $check_5_len \n"; 			# 7
	   print STDOUT "&${COLOR_CHK5} CHECK_5:>> $check_5\n"; 	  				# 8888888
	   print FAIL "$_\n";
	} elsif($check_5 !~ m/^[0-9]{7}$/) {
	      my $COLOR="red";
	      my $COLOR_CHK5_B="red";
	      print STDOUT "&${COLOR_CHK5_B} CHECK_5:>> $check_5 \n";	  				# 1980356572345690
	      print FAIL "$_\n";
	} else {
	   my $COLOR_CHK5="green";
	   print STDOUT "&${COLOR_CHK5} CHECK_LENGTH_5:>> $check_5_len \n"; 			# 7
	   print STDOUT "&${COLOR_CHK5} CHECK_5:>> $check_5\n"; 	  				# 8888888
	   print PASS "$_\n";
 	}


	my $check_6 = substr($_,55,$CHECK_6_LENGTH);   					# 5th 8 characters that are [COMPUTER]
	my $check_6_len = length($check_6); 	
	if($check_6_len ne $CHECK_6_LENGTH) {
	   my $COLOR="red";
	   my $COLOR_CHK6="red";
	   print STDOUT "&${COLOR_CHK6} CHECK_LENGTH_6:>> $check_6_len \n"; 			# 8
	   print STDOUT "&${COLOR_CHK6} CHECK_6:>> $check_6\n"; 	  				# COMPUTER
	   print FAIL "$_\n";
	} elsif($check_6 !~ m/^[ABY]{3}$/) {
	      my $COLOR="red";
	      my $COLOR_CHK6_B="red";
	      print STDOUT "&${COLOR_CHK6_B} CHECK_6:>> $check_6 \n";	  				# 1980356572345690
	      print FAIL "$_\n";
	} else {
	   my $COLOR_CHK6="green";
	   print STDOUT "&${COLOR_CHK6} CHECK_LENGTH_6:>> $check_6_len \n"; 			# 8
	   print STDOUT "&${COLOR_CHK6} CHECK_6:>> $check_6\n"; 	  				# COMPUTER
	   print PASS "$_\n";
	}


} # while{}
close(FILE);
close(STDOUT);
close(PASS);
close(FAIL);

########################################################################
my $SORT_PASS = `/bin/cat $PASS | /bin/sort -u > $OUTPUT_SORTED_PASS`;
system($SORT_PASS);

my $SORT_FAIL = `/bin/cat $FAIL | /bin/sort -u > $OUTPUT_SORTED_FAIL`;
system($SORT_FAIL);
########################################################################


my $MESSAGE="DEBUG COUNTERS";

my $CMD="$BB $BBDISP \"status $MACHINE.$COLUMN $COLOR `date` - $STATUS \n $MESSAGE \n `/bin/cat $OUTPUT`\" \n";
system($CMD);
#print "$CMD\n";

exit(0);