#! /bin/sh
#      (Messenger for InterSec LB)
# 060615 LB300dR1.0 ԥɤν maruo
# 070218 nkfѤʤƤ褦˽ѹ maruo
#        JISǤϤʤEUCΤޤ롣        
#        ̵̤ʥȤ
# 070223 MessageBodyβԥɤ maruo

#MIME "Subject: Express5800/LB᡼"

USAGESTR="usage: lbmsgr [-d 1][-?]"
DEBUG=0
LINEMAX=1000
PROCREP=0
FILEREP=0
FOREP=0
FBREP=0
NODEDOWN=0
MAILADR1=root
MAILSVIP1=localhost
MAILADR2=root
MAILSVIP2=localhost
MAILSW2=0
SLEEPTIME=1m
HN=localhost
PROCESS_RECOV=0

WATCHDAT=/etc/iplb4.d/watch.dat
WATCHLOG=/var/log/iplb4/watch.log
WATCHLOGNEW=/var/log/iplb4/watch.log.new
LBMSGTMP=/var/log/iplb4/lbmsgr.msg
LOCKF=/tmp/.iplbwatch-lock
PIDF=/var/log/iplb4/.lbmsgr-pid


get_lock() {
	echo $$ > $PIDF
	until ln -s $PIDF $LOCKF 2>/dev/null
	do
		sleep 1
	done
}



release_lock() {
    if [ -e $LOCKF ] && [ $$ == `/bin/cat $LOCKF` ]; then
        /bin/rm -f $LOCKF > /dev/null 2>&1
    fi
}



trap "release_lock; /bin/rm -f $PIDF $LOCKF >/dev/null 2>&1; exit 99" 1 2 3 15



while getopts 'd:\?' c
do
    case $c in
    d)    DEBUG=$OPTARG;;
    \?)   echo $USAGESTR
          exit 2;;
    esac
done



while true
do
if [ ! -e $LOCKF ] && [ -s $WATCHLOG ]; then
# եɤ߹
    if [ -s $WATCHDAT ]; then
        PROCREP=`/usr/bin/cut -f2 -d' ' $WATCHDAT`
        FILEREP=`/usr/bin/cut -f4 -d' ' $WATCHDAT`
        FOREP=`/usr/bin/cut -f6 -d' ' $WATCHDAT`
        FBREP=`/usr/bin/cut -f8 -d' ' $WATCHDAT`
        NODEDOWN=`/usr/bin/cut -f10 -d' ' $WATCHDAT`
        MAILADR1=`/usr/bin/cut -f11 -d' ' $WATCHDAT`
        MAILSVIP1=`/usr/bin/cut -f12 -d' ' $WATCHDAT`
        MAILADR2=`/usr/bin/cut -f13 -d' ' $WATCHDAT`
        MAILSVIP2=`/usr/bin/cut -f14 -d' ' $WATCHDAT`
        MAILSW2=`/usr/bin/cut -f15 -d' ' $WATCHDAT`
        SLEEPTIME=`/usr/bin/cut -f16 -d' ' $WATCHDAT`m
        PROCESS_RECOV=`/usr/bin/cut -f17 -d' ' $WATCHDAT`
        HN=`/bin/hostname`
    else
        if [ "0" != $DEBUG ]; then
            echo "There isn't $WATCHDAT"
        fi
    fi

# ɤ߹
    VAR=`/usr/bin/printf '%s:%s:%s:%s:%s:%s:%s:%s:%s:%s:%s:%s:%s:%s' $PROCREP $FILEREP $FOREP $FBREP $NODEDOWN $MAILADR1 $MAILSVIP1 $MAILADR2 $MAILSVIP2 $MAILSW2 $HN $LBMSGTMP $WATCHLOGNEW $DEBUG`
    get_lock
    /bin/awk -v VAR="$VAR" '
        BEGIN {
            split(VAR, a, ":")
            PROCREP=a[1]
            FILEREP=a[2]
            FOREP=a[3]
            FBREP=a[4]
            NODEDOWN=a[5]
            MAILADR1=a[6]
            MAILSVIP1=a[7]
            MAILADR2=a[8]
            MAILSVIP2=a[9]
            MAILSW2=a[10]
            HN=a[11]
            LBMSGTMP=a[12]
            WATCHLOGNEW=a[13]
            DEBUG=a[14]
        }
        $0 ~ /^[0-9].*/ {
            if ("0" != DEBUG)
                print $0
            YYYY=substr($0, 1, 4)
            MM=substr($0, 5, 2)
            DD=substr($0, 7, 2)
            hour=substr($0, 9, 2)
            min=substr($0, 11, 2)
            sec=substr($0, 13, 2)
            STR = sprintf("")
            RESULT = -1
            if (1 == PROCREP && $0 ~ /.*Process error$/)
                STR = sprintf("%s.%s.%s %s:%s:%s - LB\(:%s\)ǥץ۾郎ȯޤ\r\n", YYYY, MM, DD, hour, min, sec, HN)

            if (1 == PROCREP && $0 ~ /.*Contents Process error$/)
                STR = sprintf("%s.%s.%s %s:%s:%s - LB\(:%s\)ǥƥĥǥХץ۾郎ȯޤ\r\n", YYYY, MM, DD, hour, min, sec, HN)

            if (1 == PROCREP && $0 ~ /.*Backup Coordinator Up$/)
                STR = sprintf("%s.%s.%s %s:%s:%s - LB\(:%s\)ΥХååץǥ͡ưޤ\r\n", YYYY, MM, DD, hour, min, sec, HN)

            if (1 == PROCREP && $0 ~ /.*Backup Coordinator Down$/)
                STR = sprintf("%s.%s.%s %s:%s:%s - LB\(:%s\)ΥХååץǥ͡ߤޤ\r\n", YYYY, MM, DD, hour, min, sec, HN)

            if (1 == FILEREP && $0 ~ /.*File error.*/)
                STR = sprintf("%s.%s.%s %s:%s:%s - LB\(:%s\)ǥե\(%s\)ΰ۾郎ȯޤ\r\n", YYYY, MM, DD, hour, min, sec, HN, $NF)

            if (1 == FOREP && $0 ~ /.*Fail Over$/)
                STR = sprintf("%s.%s.%s %s:%s:%s - LB\(:%s\)إե륪Сޤ\r\n", YYYY, MM, DD, hour, min, sec, HN)

            if (1 == FBREP && $0 ~ /.*Fail Back$/)
                STR = sprintf("%s.%s.%s %s:%s:%s - LB\(:%s\)˥եХåޤ\r\n", YYYY, MM, DD, hour, min, sec, HN)

            if (1 == NODEDOWN && $0 ~ /.*LBH Down.*/)
                STR = sprintf("%s.%s.%s %s:%s:%s - LB\(:%s\)ǥ롼\(%s\)ʬΡ\(%s\)Υ򸡽Фޤ\r\n", YYYY, MM, DD, hour, min, sec, HN, $5, $NF)

            if (1 == PROCREP && $0 ~ /.*Process recover$/)
                STR = sprintf("%s.%s.%s %s:%s:%s - LB\(:%s\)ǥץ줬λޤ\r\nѤ꤬ʤ Management ConsoleLoadBalancer˥ʬǧƤ\r\n", YYYY, MM, DD, hour, min, sec, HN)

            if (1 == PROCREP && $0 ~ /.*Contents Process recover$/)
                STR = sprintf("%s.%s.%s %s:%s:%s - LB\(:%s\)ǥƥĥǥХץ줬λޤ\r\nѤ꤬ʤ Management ConsoleLoadBalancer˥ʬǧƤ\r\n", YYYY, MM, DD, hour, min, sec, HN)

            if (1 == FILEREP && $0 ~ /.*File recover.*/)
                STR = sprintf("%s.%s.%s %s:%s:%s - LB\(:%s\)ǥե\(%s\)줬λޤ\r\nޥեƤϥ֡ȸͭˤʤޤ\r\nѤ꤬ʤ Management ConsoleLoadBalancer˥ʬǧƤ\r\n", YYYY, MM, DD, hour, min, sec, HN, $NF)

            if (1 == NODEDOWN && $0 ~ /.*LBH recover.*/)
                STR = sprintf("%s.%s.%s %s:%s:%s - LB\(:%s\)ǥ롼\(%s\)ʬΡ\(%s\)򸡽Фޤ\r\n", YYYY, MM, DD, hour, min, sec, HN, $5, $NF)

            if (1 == PROCREP && $0 ~ /.*Process recover error$/)
                STR = sprintf("%s.%s.%s %s:%s:%s - LB\(:%s\)ǥץ˼Ԥޤ\r\n۾ĴƤ\r\n", YYYY, MM, DD, hour, min, sec, HN)

            if (1 == PROCREP && $0 ~ /.*Contents Process recover error$/)
                STR = sprintf("%s.%s.%s %s:%s:%s - LB\(:%s\)ǥƥĥǥХץ˼Ԥޤ\r\n۾ĴƤ\r\n", YYYY, MM, DD, hour, min, sec, HN)

            if (1 == FILEREP && $0 ~ /.*File recover error.*/)
                STR = sprintf("%s.%s.%s %s:%s:%s - LB\(:%s\)ǥե\(%s\)˼Ԥޤ\r\n۾ĴƤ\r\n", YYYY, MM, DD, hour, min, sec, HN, $NF)

            if (1 == FILEREP && $0 ~ /.*Contents Delivery Successful.*/)
                STR = sprintf("%s.%s.%s %s:%s:%s - 롼%sΥ٥%sΥƥĥǥХ꤬ｪλޤ\r\n", YYYY, MM, DD, hour, min, sec, $6, $NF)

            if (1 == FILEREP && $0 ~ /.*Contents Get error.*/)
                STR = sprintf("%s.%s.%s %s:%s:%s - 롼%sΥ٥%sϼ˼Ԥޤ\r\n۾ĴƤ\r\n", YYYY, MM, DD, hour, min, sec, $6, $NF)

            if (1 == FILEREP && $0 ~ /.*Contents Distribute error nosync.*/)
                STR = sprintf("%s.%s.%s %s:%s:%s - 롼%sΥ٥%sۿ˼Ԥޤ\r\nʬΡɤƱȤƤʤƥĤƤޤ塢ۿκƼ¹ԤɬפǤ\r\n۾ĴƤ\r\n", YYYY, MM, DD, hour, min, sec, $7, $NF)

            if (1 == FILEREP && $0 ~ /.*Contents Distribute error old.*/)
                STR = sprintf("%s.%s.%s %s:%s:%s - 롼%sΥ٥%sۿ˼Ԥޤ\r\nʬΡɤϸŤƥĤƤޤ\r\n۾ĴƤ\r\n", YYYY, MM, DD, hour, min, sec, $7, $NF)

            if (1 == FILEREP && $0 ~ /.*Contents Distribute with Switch error new.*/)
                STR = sprintf("%s.%s.%s %s:%s:%s - 롼%sΥ٥%sϽۿ˼Ԥޤ\r\nʬΡɤϽ֤ǿƥĤƤޤ\r\n۾ĴƤ\r\n", YYYY, MM, DD, hour, min, sec, $9, $NF)

            if (1 == FILEREP && $0 ~ /.*Contents Distribute with Switch error old.*/)
                STR = sprintf("%s.%s.%s %s:%s:%s - 롼%sΥ٥%sϽۿ˼Ԥޤ\r\nʬΡɤϽ֤ǸŤƥĤƤޤ\r\n۾ĴƤ\r\n", YYYY, MM, DD, hour, min, sec, $9, $NF)


            if (1 == FILEREP && $0 ~ /.*Contents Switch error.*/)
                STR = sprintf("%s.%s.%s %s:%s:%s - 롼%sΥ٥%sϸ˼Ԥޤ\r\nʬΡɤΥƥĸǤ\r\n۾ĴƤ\r\n", YYYY, MM, DD, hour, min, sec, $6, $NF)

            if ($0 ~ /.*Test Mail.*/)
                STR = sprintf("Express5800/LB ƥȤǤ\r\n")


            if ("" != STR && "" != MAILADR1 && "" != MAILSVIP1) {
                if ($0 ~ /.*Test Mail.*/){
                  printf("Subject: Express5800/LB=?ISO-2022-JP?B?GyRCRExKcyVGJTklSBsoQg==?=") > LBMSGTMP
                }else{
                  printf("Subject: Express5800/LB=?ISO-2022-JP?B?GyRCRExKcyVhITwlaxsoQg==?=") > LBMSGTMP
                }
                close(LBMSGTMP)
                printf("\r\nTo: %s\r\nFrom: %s\r\n\r\n", MAILADR1, MAILADR1) >> LBMSGTMP
                close(LBMSGTMP)
                printf("%s\r\n---\r\nExpress5800/LB (᡼ؤֿϤǤޤ)\r\n", STR) >> LBMSGTMP
                close(LBMSGTMP)
                
                if (2 <= DEBUG) {
                    CMD = sprintf("/bin/cat %s", LBMSGTMP)
                    system(CMD)
                }
                MAILADR1_BAK = sprintf("%s", MAILADR1)
                
		CMD = sprintf("/usr/bin/perl /usr/lib/iplb4/smtp.pl %s %s root@%s %s > /dev/null 2>&1", MAILSVIP1, MAILADR1, HN, LBMSGTMP)
                
		if ("0" != DEBUG)
                    printf("%s\n", CMD)
                RESULT = system(CMD)
                if ("1" == MAILSW2 && "" != MAILADR2 && "" != MAILSVIP2) {
                    CMD = sprintf("/bin/sed \"s/%s/%s/g\" %s > %s.2", MAILADR1_BAK, MAILADR2, LBMSGTMP, LBMSGTMP)
                    if ("0" != DEBUG)
                        printf("%s\n", CMD)
		    system(CMD)
                    
                    CMD = sprintf("/usr/bin/perl /usr/lib/iplb4/smtp.pl %s %s root@%s %s.2 > /dev/null 2>&1", MAILSVIP2, MAILADR2, HN, LBMSGTMP)
                    
                    if ("0" != DEBUG)
                        printf("%s\n", CMD)
                    RESULT = system(CMD)
                }
                if ("0" != DEBUG)
                    print "removing..."
                CMD = sprintf("/bin/rm -f %s* > /dev/null 2>&1", LBMSGTMP)
                system(CMD)
                if (0 == RESULT || 67 == RESULT)
                    STR="*"
                else
                    STR="X"
                if (0 != RESULT)
                    STR = sprintf("%s\(%d\)", STR, RESULT)
                printf "%s%s\n", STR, $0 >> WATCHLOGNEW
            } else
                printf "%s\n", $0 >> WATCHLOGNEW
            if ("0" != DEBUG)
                print "closing..."
            close(WATCHLOGNEW)
        }
        $0 ~ /^[X\*].*/ {
            printf "%s\n", $0 >> WATCHLOGNEW
            close(WATCHLOGNEW)
        }
        END {close(WATCHLOGNEW)}
    ' $WATCHLOG
    if [ -s $WATCHLOGNEW ]; then
        /usr/bin/tail -n -$LINEMAX $WATCHLOGNEW > $WATCHLOG
        if [ $? -eq 0 ]; then
            /bin/rm -f $WATCHLOGNEW
        fi
    fi
    release_lock
else
    if [ "0" != $DEBUG ]; then
        echo "I can't run, because, there is the $LOCKF or isn't $WATCHLOG"
    fi
fi
if [ "0" != $DEBUG ]; then
    /usr/bin/printf "sleep $SLEEPTIME ...\n---------------\n"
fi
sleep $SLEEPTIME
done
