#!/usr/bin/perl -w
#########################################################################################
## Author:      BRIAN HUNTER
## Date:        6/28/2025
## 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 $MACHINE=`hostname`; chomp($MACHINE);
my $STATUS="DEBUG COUNTERS CURRENT STATUS";
my $DATETIME=`/usr/bin/date '+%m%d%Y_%H:%M:%S'`;
chomp($DATETIME);

############################################################################
## CHANGE WHERE YOUR INPUT_COUNTERS.txt FILE IS LOCATED
############################################################################
my $BASE="/home/brian/emc";
my $COUNTERS_FILE="$BASE/INPUT_COUNTERS.txt";

############################################################################
## THESE ARE THE ACTUAL FILES THAT YOU WANT TO COLLECT YOUR COUNTERS FROM
############################################################################
my $OUTPUT_SORTED_PASS="$BASE/OUTPUT_PASS";    
my $OUTPUT_SORTED_FAIL="$BASE/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="$BASE/OUTPUT.$MACHINE.log";
my $PASS="$BASE/PASS.$MACHINE.log";
my $FAIL="$BASE/FAIL.$MACHINE.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) {
	   print STDOUT "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 {
	      print STDOUT "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) {
	   print STDOUT "CHECK_LENGTH_2:>> $check_2_len \n"; 			# 16	
	   print STDOUT "CHECK_2:>> $check_2 \n";	  				# 1980356572345690
	   print FAIL "$_\n";
	} elsif($check_2 !~ m/^[0-9]{16}$/) {
	      print STDOUT "CHECK_2:>> $check_2 \n";	  				# 1980356572345690
	      print FAIL "$_\n";
        } else {
	   print STDOUT "CHECK_LENGTH_2:>> $check_2_len \n"; 			# 16	
	   print STDOUT "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) {
	   print STDOUT "CHECK_LENGTH_3:>> $check_3_len \n"; 			# 16	  
	   print STDOUT "CHECK_3:>> $check_3\n";    				# neHkKerTioPQeCmB
	   print FAIL "$_\n";
	} elsif($check_3 !~ m/^[a-zA-Z]{16}$/) {
	      print STDOUT "CHECK_3:>> $check_3 \n";	  				# 1980356572345690
	      print FAIL "$_\n";
	} else {
	   print STDOUT "CHECK_LENGTH_3:>> $check_3_len \n"; 			# 16	  
	   print STDOUT "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) {
	   print STDOUT "CHECK_LENGTH_4:>> $check_4_len \n"; 			# 16	  
	   print STDOUT "CHECK_4:>> $check_4\n"; 	  				# 8U93ETh48Yn56AwU2
	   print FAIL "$_\n";
	} elsif($check_4 !~ m/^[a-z0-9A-Z]{16}$/) {
	      print STDOUT "CHECK_4:>> $check_4 \n";	  				# 1980356572345690
	      print FAIL "$_\n";
	} else {
	   print STDOUT "CHECK_LENGTH_4:>> $check_4_len \n"; 			# 16	  
	   print STDOUT "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) {
	   print STDOUT "CHECK_LENGTH_5:>> $check_5_len \n"; 			# 7
	   print STDOUT "CHECK_5:>> $check_5\n"; 	  				# 8888888
	   print FAIL "$_\n";
	} elsif($check_5 !~ m/^[0-9]{7}$/) {
	      print STDOUT "CHECK_5:>> $check_5 \n";	  				# 1980356572345690
	      print FAIL "$_\n";
	} else {
	   print STDOUT "CHECK_LENGTH_5:>> $check_5_len \n"; 			# 7
	   print STDOUT "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) {
	   print STDOUT "CHECK_LENGTH_6:>> $check_6_len \n"; 			# 8
	   print STDOUT "CHECK_6:>> $check_6\n"; 	  				# COMPUTER
	   print FAIL "$_\n";
	} elsif($check_6 !~ m/^[ABY]{3}$/) {
	      print STDOUT "CHECK_6:>> $check_6 \n";	  				# 1980356572345690
	      print FAIL "$_\n";
	} else {
	   print STDOUT "CHECK_LENGTH_6:>> $check_6_len \n"; 			# 8
	   print STDOUT "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);
########################################################################

exit(0);