#!/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);