meta data for this page
Ez a dokumentum egy előző változata!
TSM kliens riport shell szkript
TSM kliens ütemezések sikerességét riportoló szkript. A riport szabályokat a „tsm_kliens_riport.<TSM sztanza>” fájlokból veszi, aminek a formátuma:
email cím; (sql WHERE feltétel) order by <rendező mező> Pl:
fonok@cegem.hu; (node_name='FONOK_SZERVERE' or schedule_name like 'NAPI_INCR_%') ORDER BY schedule_name
Ha egy email címhez több sor is van, azokat külön szekcióba teszi a riportban. A szabály fájlokat külön dolgozza fel, tehát ha nekem 2 sztanzához tartozó szabály fájlban is van sor az email címemmel, akkor TSM szerverenként külön emailben kapom a riportokat majd. A TSM_SZERVEREK változóban fel kell sorolni a TSM sztanzákat, amiket akarunk, hogy vizsgáljon. Az ebben beállított sztanzák szabályfájljait fogja keresni a „tsm_kliens_riport.<TSM sztanza>” néven.
- tsm_kliens_report.sh
#!/bin/sh PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin ################################################################ # # # TSM kliens riport - tsm_kliens_riport.sh v1.0 (2015.03.20.) # # Keszitette: Agoston Peter (agoston.peter@gmail.com) # # # ################################################################ SCRIPT_VER="v1.0 (2015.03.20.)" # TSM admin TSM_FELH="readonlytsmadmin" TSM_JELSZO="password" # Riportolando TSM szerver sztanzak TSM_SZERVEREK="tsmserver1 tsmserver2" # HTML formatumu legy-e a level (0/1) HTML_EMAIL=1 # Csatolmanykent el legyen-e kuldve a HTML riport, ha egyebkent szoveges levelkent megy a riport (0/1) HTML_EMAIL_CSAT=1 # Munkafajl a futas idejere TMP_FILE='/tmp/tsm_kliens_riport.tmp' TMP_HTML_FILE='/tmp/tsm_kliens_riport.tmp.html' # Mappa, ahova a futasi eredmenyeket elmenti LOG_DIR='/opt/tsm_kliens_riport/riportok' # Konfig resz vege ######################################################################################################################### # Hasznalt SQL selectek TSM-hez SQL_Q_FAILED_EVENTS="select substr(node_name,1,20) as \"NODE NAME\", substr(schedule_name,1,23) as \"SCHEDULE NAME\", cast ( SUBSTR ( CHAR ( actual_start ) , 1 , 19 ) as char ( 19 ) ) AS \"ACTUAL START\", case when status='Missed' then '' else substr((completed-scheduled_start)minutes || ' min',1,7) end as \"RUNTIME\", case when result=0 then ' 0-Successful' when result=4 then ' 4-Skipped Files' when result=8 then ' 8-Warnings' when result=12 then ' 12-Failed' when result is NULL then ' -' || substr(status,1,12) else ( case when length(cast(result as char))=1 then ' ' || cast(result as char) || '-' || substr(status,1,12) when length(cast(result as char))=2 then ' ' || cast(result as char) || '-' || substr(status,1,12) else cast(result as char) || '-' || substr(status,1,11) end ) end as \"RESULT\" from events where (current_timestamp - 24 hours)<scheduled_start and scheduled_start<current_timestamp and node_name is not NULL and status not in ('Pending') " # HTML kodok HTML_VONAL="<hr align=center noshade style=\"color: #D2D2D2; width: 100%;\" size=\"1\">" HTML_MODUL_LABLEC="</pre></div>" HTML_TABLA_FEJLEC="<table style=\"width: 960px; border: 2px solid #D2D2D2;background-color:#F1F1F1; padding: 15px; font-size: 14px; font-family: courier;\"><tr><td style=\"display: inline; text-align: center\">" HTML_TABLA_LABLEC="</td></tr></table>" # Fuggvenyek, egyeb valtozok SSH_OPT="-o BatchMode=yes -o ConnectTimeout=5 -i $SSH_KEY_FILE" read -r -d '' JS_CODE << EOF <head> <script language="JavaScript" type="text/javascript"> <!-- Copyright 2005, Sandeep Gangadharan --> <!-- For more free scripts go to http://www.sivamdesign.com/scripts/ --> <!-- if (document.getElementById) { document.writeln('<style type="text/css"><!--') document.writeln('.texter {display:block} @media print {.texter {display:block;}}') document.writeln('//--></style>') } function openClose(theID) { if (document.getElementById(theID).style.display == "block") { document.getElementById(theID).style.display = "none" } else { document.getElementById(theID).style.display = "block" } } function Collapse(ez) { if (ez.style.color == "gray") { ez.style.color = "#006DC7"; ez.innerHTML=ez.innerHTML.replace("[+]","[-]"); ez.innerHTML=ez.innerHTML.replace("gray","#006DC7")} else { ez.style.color = "gray"; ez.innerHTML=ez.innerHTML.replace("[-]","[+]"); ez.innerHTML=ez.innerHTML.replace("#006DC7","gray") } } // --> </script> </head> EOF function szerverver { I=0 for TSM_SZERVER in $TSM_SZERVEREK; do I=$((I+1)) if [ $1 = $TSM_SZERVER ]; then echo $TSM_SZERVER_VER | cut -d" " -f $I; fi done } function level_fejlec { STARTTIME=`date "+%s"` >$TMP_FILE >$TMP_HTML_FILE echo "$HTML_TABLA_FEJLEC" >> $TMP_HTML_FILE echo '<div style="font-size: 48px; font-weight: bold;">' >> $TMP_HTML_FILE echo "TSM kliens riport" | tee -a $TMP_HTML_FILE >> $TMP_FILE echo '</div>' >> $TMP_HTML_FILE date | tee -a $TMP_HTML_FILE >> $TMP_FILE echo "<br>" >> $TMP_HTML_FILE } function fejlec { FEJLEC=`echo $1 | tr '[:lower:]' '[:upper:]'` echo "___:: $FEJLEC ::___" >> $TMP_FILE RAND_ID=`date '+%s%N'` echo "<div onClick=\"openClose('${RAND_ID}');Collapse(this)\" style=\"cursor:hand; cursor:pointer; color: #006DC7;\">___:: [-] $FEJLEC ::___</div>\n<div id=\"${RAND_ID}\" class=\"texter\" style=\"display: block\"><pre style=\"width: 960px; display: inline; margin: 0px 20px 0px 20px; text-align: left\">$HTML_VONAL" >> $TMP_HTML_FILE } control_c() # run if user hits control-c { echo -en "\n*** Ouch! Ertem a celzast, maris takaritok... ***\n" rm $TMP_FILE 2>/dev/null rm $TMP_HTML_FILE 2>/dev/null exit 1 } # trap keyboard interrupt (control-c) trap control_c SIGINT # Hasznlat sztanzak ellenorzese fejlec "Vizsgalando TSM sztanza konfigok mukodesenek ellenorzese" for TSM_SZERVER in $TSM_SZERVEREK; do VER=$((`dsmadmc -id=$TSM_FELH -pa=$TSM_JELSZO -se=$TSM_SZERVER q opt | sed -n -e 's/Server Version \([0-9]\),.*/\1/p' -e 's/\t\s//g'`)) if [[ "$VER" != "0" && -f $(dirname $0)/tsm_kliens_riport.$TSM_SZERVER ]]; then OK="OK! (v${VER})" TSM_SZERVEREK_TMP="$TSM_SZERVEREK_TMP $TSM_SZERVER" TSM_SZERVER_VER="$TSM_SZERVER_VER $VER" else OK="Sikertelen! A szerver kihagyasra kerul a riportbol." fi echo "${TSM_SZERVER}: $OK" | awk -F'|' '{printf "> @%-35s %-12s\n",$1,$2}' | tee -a $TMP_HTML_FILE | tee -a $TMP_FILE done TSM_SZERVEREK=$TSM_SZERVEREK_TMP # Program torzs if [ `echo $TSM_SZERVEREK | grep -c '[a-zA-Z]'` -eq 0 ]; then echo "$(date) Nincs hasznalhato sztanza a konfigomban." >> "$(dirname $0)/tsm_kliens_riport.err" rm $TMP_FILE 2>/dev/null rm $TMP_HTML_FILE 2>/dev/null exit 1 fi # Vegigmegyunk az osszes konfig fajlon, ami a TSM_SZERVEREK valtozoban fel van sorolva for TSM_SZERVER in $TSM_SZERVEREK; do KONFIG_FILE="$(dirname $0)/tsm_kliens_riport.$TSM_SZERVER" # Minden riport cimzettet felolvasunk az aktualis konfig fajlbol awk -F';' '/^[^#]/{print $1}' $KONFIG_FILE | sort -u | while read MAILTO; do level_fejlec; fejlec "${TSM_SZERVER}" echo "NODE NAME SCHEDULE NAME ACTUAL START RUNTIME RESULT" | tee -a $TMP_HTML_FILE >> $TMP_FILE echo "--------------------- ------------------------- -------------------- -------- -----------------"| tee -a $TMP_HTML_FILE >> $TMP_FILE # Minden adott email cimhez tartozo SQL feltetelt feldolgozunk awk -F';' "/$MAILTO/"'{print $2}' $KONFIG_FILE | sort -u | while read SQL_FELTETEL; do FSIZE=$(ls -l $TMP_FILE | awk '{print $5}') if [[ "$SQL_FELTETEL" = "" ]]; then continue; fi dsmadmc -id=$TSM_FELH -pa=$TSM_JELSZO -se=${TSM_SZERVER} -dataonly=y -displ=tabl "$SQL_Q_FAILED_EVENTS AND $SQL_FELTETEL" | egrep -v '(ANS|ANR)' | tee -a $TMP_HTML_FILE >> $TMP_FILE FSIZE2=$(ls -l $TMP_FILE | awk '{print $5}') if [[ $FSIZE -ne $FSIZE2 ]]; then echo "$HTML_VONAL" >> $TMP_HTML_FILE; fi done ENDTIME=`date "+%s"` echo "$HTML_TABLA_LABLEC" >> $TMP_HTML_FILE echo "<p style=\"font-size:smaller;\">[A riport $((($ENDTIME-$STARTTIME)/60)) perc $((($ENDTIME-$STARTTIME)%60)) mp alatt keszult el - TSM riporter $SCRIPT_VER]" | tee -a $TMP_HTML_FILE >> $TMP_FILE # Riport kuldese DATUM=`date +"%F_%H-%M"` mkdir -p $LOG_DIR >/dev/null if [ $? -eq 0 ]; then cp $TMP_FILE $LOG_DIR/tsm_kliens_riport_${DATUM}_${MAILTO}.log echo "<br><br>[A riport szoveges valtozata az alabbi utvonalon helyben is le lett tarolva:<br> "`hostname`":$LOG_DIR/tsm_kliens_riport_${DATUM}_${MAILTO}.log]</p>" >> $TMP_HTML_FILE ERR=$? fi if [[ $ERR -ne 0 || ! $ERR ]]; then echo "HIBA: A riportot nem sikerult a $LOG_DIR mappaba menteni!" >>$TMP_HTML_FILE fi echo "$HTML_MODUL_LABLEC" >> $TMP_HTML_FILE # Levelkuldes sed -i -e 's/^|//' -e 's/|$//' $TMP_HTML_FILE sed -i 's/^.*4-Skipped Files.*$/<font color="#B0A100">&<\/font>/' $TMP_HTML_FILE # TSM sztanza szinzes sed -i 's/^.*8-Warnings.*$/<font color="#B0A100">&<\/font>/' $TMP_HTML_FILE # TSM sztanza szinzes sed -i 's/^.*12-Errors.*$/<font color="#D70109">&<\/font>/' $TMP_HTML_FILE # TSM sztanza szinzes sed -i 's/^.*-Failed.*$/<font color="#D70109">&<\/font>/' $TMP_HTML_FILE # TSM sztanza szinzes sed -i 's/^.*-Missed.*$/<font color="#D70109">&<\/font>/' $TMP_HTML_FILE # TSM sztanza szinzes sed -i 's/^.*-Started.*$/<font color="#FF6600">&<\/font>/' $TMP_HTML_FILE # TSM sztanza szinzes sed -i -e "s/___*[^_]*___*/<div style=\"text-align: center; font-family: Verdana; font-weight:bold; font-size: 12px; color: #006DC7; margin-top: 10px; padding: 0px;\">&<\/div>/" -e 's/___//g' $TMP_HTML_FILE # Szekcio fejlec szinezes echo -e "<html>${JS_CODE}<body><center><div style=\"font-size: 14px; font-family: courier;\">\n$(cat ${TMP_HTML_FILE})</div></td></tr></body></html>" > $TMP_HTML_FILE if [ `echo "$MAILTO" | grep "@.*\."` ]; then if [[ `which sendmail` && $HTML_EMAIL -eq 1 ]]; then echo -e "To: $MAILTO\nMIME-Version: 1.0\nContent-Type: text/html\nContent-Disposition: inline\nSubject: TSM kliens riport ($TSM_SZERVER)\n$(cat ${TMP_HTML_FILE})" > $TMP_HTML_FILE cat $TMP_HTML_FILE | sendmail -B 8BITMIME -t -F "TSM riporter" elif [[ ! $HTML_EMAIL -eq 1 && $HTML_EMAIL_CSAT -eq 1 ]]; then echo -e "To: $MAILTO\nSubject: TSM kliens riport ($TSM_SZERVER)\n$(cat $TMP_FILE)" > $TMP_FILE cp $TMP_HTML_FILE /tmp/tsm_kliens_riport_${DATUM}.html cat $TMP_FILE | mailx -a /tmp/tsm_kliens_riport_${DATUM}.html -t else echo -e "To: $MAILTO\nSubject: TSM kliens riport ($TSM_SZERVER)\n$(cat $TMP_FILE)" > $TMP_FILE cat $TMP_FILE | mailx -t fi fi done done