meta data for this page
  •  

Különbségek

A kiválasztott változat és az aktuális verzió közötti különbségek a következők.

Összehasonlító nézet linkje

Előző változat mindkét oldalonElőző változat
Következő változat
Előző változat
shell:riportok:napi_kliens_riport [2017/05/18 15:25] – ↷ Page moved from shell:napi_kliens_riport to shell:riportok:napi_kliens_riport adminshell:riportok:napi_kliens_riport [2022/06/16 17:51] (aktuális) admin
Sor 3: Sor 3:
 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: 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ő>+email cím; (sql WHERE feltétel az events, mint "e" táblából) order by <rendező mező>
 Pl: Pl:
  
-  fonok@cegem.hu; (node_name='FONOK_SZERVERE' or schedule_name like 'NAPI_INCR_%') ORDER BY schedule_name+  fonok@cegem.hu; (e.node_name='FONOK_SZERVERE' or e.schedule_name like 'NAPI_INCR_%') ORDER BY e.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. 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.
Sor 16: Sor 16:
 ################################################################ ################################################################
 #                                                              # #                                                              #
-#  TSM kliens riport - tsm_kliens_riport.sh v1.(2015.03.20.) #+#  TSM kliens riport - tsm_kliens_riport.sh v1.(2022.06.16.) #
 #  Keszitette: Agoston Peter (agoston.peter@gmail.com)         # #  Keszitette: Agoston Peter (agoston.peter@gmail.com)         #
 #                                                              # #                                                              #
 ################################################################ ################################################################
-        SCRIPT_VER="v1.(2015.03.20.)"+        SCRIPT_VER="v1.(2022.06.16.)" 
 +# Riport cimzett(ek) 
 +# Milyen email cim(ek)re menjen a riport 
 +        MAILTO=$1
 # TSM admin # TSM admin
-        TSM_FELH="readonlytsmadmin+        TSM_FELH="report
-        TSM_JELSZO="password"+        TSM_JELSZO="report"
 # Riportolando TSM szerver sztanzak # Riportolando TSM szerver sztanzak
-        TSM_SZERVEREK="tsmserver1 tsmserver2"+        TSM_SZERVEREK="tsma1 tsmg1"
 # HTML formatumu legy-e a level (0/1) # HTML formatumu legy-e a level (0/1)
         HTML_EMAIL=1         HTML_EMAIL=1
Sor 37: Sor 40:
 # Konfig resz vege ######################################################################################################################### # Konfig resz vege #########################################################################################################################
 # Hasznalt SQL selectek TSM-hez # 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') "+SQL_Q_FAILED_EVENTS="select substr(e.node_name,1,20) as \"NODE NAME\", e.schedule_name, cast ( SUBSTR ( CHAR ( e.actual_start ) , 1 , 19 ) as char ( 20 ) ) AS \"ACTUAL START\", case when e.status='Missed' then '' else TRANSLATE('a bc:de:fg', DIGITS(e.completed - e.actual_start)'_______abcdefgh_____',' ') end as \"RUNTIME  \", case when e.result=0 then '  0-Successful' when e.result=4 then '  4-Skipped Files' when e.result=8 then '  8-Warnings' when e.result=12 then ' 12-Failed' when e.result is NULL then '   -' || substr(e.status,1,12) else ( case when length(cast(e.result as char))=1 then '  ' || cast(e.result as char) || '-' || substr(e.status,1,12) when length(cast(e.result as char))=2 then ' ' || cast(e.result as char) || '-' || substr(e.status,1,12) else cast(e.result as char) || '-' || substr(e.status,1,11) end ) end as \"RESULT\" from events where (current_timestamp - 24 hours)<e.scheduled_start and e.scheduled_start<current_timestamp and e.node_name is not NULL and e.status not in ('Pending') "
 # HTML kodok # HTML kodok
 HTML_VONAL="<hr align=center noshade style=\"color: #D2D2D2; width: 100%;\" size=\"1\">" HTML_VONAL="<hr align=center noshade style=\"color: #D2D2D2; width: 100%;\" size=\"1\">"
 HTML_MODUL_LABLEC="</pre></div>" 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_FEJLEC="<table style=\"width: auto; 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>" HTML_TABLA_LABLEC="</td></tr></table>"
 # Fuggvenyek, egyeb valtozok # Fuggvenyek, egyeb valtozok
 SSH_OPT="-o BatchMode=yes -o ConnectTimeout=5 -i $SSH_KEY_FILE" SSH_OPT="-o BatchMode=yes -o ConnectTimeout=5 -i $SSH_KEY_FILE"
 +export LANG=en_US
  
 read -r -d '' JS_CODE << EOF read -r -d '' JS_CODE << EOF
Sor 68: Sor 72:
 </head> </head>
 EOF EOF
 +
 +function html_vonal () {
 +        echo "<div style=\"width: 100%; height: 20px; border-bottom: 1px solid black; text-align: center\"><span style=\"font-size: 30px; background-color: #F3F5F6; padding: 0 10px;\">$1</span></div>"
 +}
  
 function szerverver { function szerverver {
Sor 111: Sor 119:
 fejlec "Vizsgalando TSM sztanza konfigok mukodesenek ellenorzese" fejlec "Vizsgalando TSM sztanza konfigok mukodesenek ellenorzese"
 for TSM_SZERVER in $TSM_SZERVEREK; do 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'`)) +        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" && -$(dirname $0)/tsm_kliens_riport.$TSM_SZERVER ]]; then +        LONG_VER=$(dsmadmc -id=$TSM_FELH -pa=$TSM_JELSZO -se=$TSM_SZERVER q opt | sed -n -e  's/Server Version \([0-9]\), Release \([0-9]\), Level \([0-9]\)\.\([0-9]\).*/\1.\2.\3.\4/p' | sed -e 's/^[^0-9]*//g'
-                OK="OK! (v${VER})"+        LONG_VER=$(dsmadmc -id=$TSM_FELH -pa=$TSM_JELSZO -se=$TSM_SZERVER q opt | sed -n -e  's/Server Version \([0-9]\), Release \([0-9]\), Level \([0-9]\+\)\.\([0-9]\+\).*/\1.\2.\3.\4/p' | sed -e 's/^[^0-9]*//g'
 +        TSM_SZERVERNEV[$TSM_SZERVER]=$(dsmadmc -id=$TSM_FELH -pa=$TSM_JELSZO -se=$TSM_SZERVER q opt | sed -n -e 's/Session established with server \([^:]*\):.*/\1/p'
 +        if [ "$VER" != "0" ]; then 
 +                OK="OK! (v${LONG_VER} - ${TSM_SZERVERNEV[$TSM_SZERVER]})
 +                TSM_SZERVERNEVEK_TMP="$TSM_SZERVERNEVEK_TMP ${TSM_SZERVERNEV[$TSM_SZERVER]}"
                 TSM_SZERVEREK_TMP="$TSM_SZERVEREK_TMP $TSM_SZERVER"                 TSM_SZERVEREK_TMP="$TSM_SZERVEREK_TMP $TSM_SZERVER"
                 TSM_SZERVER_VER="$TSM_SZERVER_VER $VER"                 TSM_SZERVER_VER="$TSM_SZERVER_VER $VER"
Sor 121: Sor 133:
         echo "${TSM_SZERVER}: $OK" | awk -F'|' '{printf "> @%-35s %-12s\n",$1,$2}' | tee -a $TMP_HTML_FILE | tee -a $TMP_FILE         echo "${TSM_SZERVER}: $OK" | awk -F'|' '{printf "> @%-35s %-12s\n",$1,$2}' | tee -a $TMP_HTML_FILE | tee -a $TMP_FILE
 done done
-TSM_SZERVEREK=$TSM_SZERVEREK_TMP 
- 
 # Program torzs # Program torzs
 if [ `echo $TSM_SZERVEREK | grep -c '[a-zA-Z]'` -eq 0 ]; then if [ `echo $TSM_SZERVEREK | grep -c '[a-zA-Z]'` -eq 0 ]; then
Sor 135: Sor 145:
     KONFIG_FILE="$(dirname $0)/tsm_kliens_riport.$TSM_SZERVER"     KONFIG_FILE="$(dirname $0)/tsm_kliens_riport.$TSM_SZERVER"
     # Minden riport cimzettet felolvasunk az aktualis konfig fajlbol     # Minden riport cimzettet felolvasunk az aktualis konfig fajlbol
-    awk -F';' '/^[^#]/{print $1}' $KONFIG_FILE | sort -u | while read MAILTO; do+    awk -F';' '/^[^#]/{print $1}' "$KONFIG_FILE| sort -u | while read MAILTO; do
         level_fejlec;         level_fejlec;
         fejlec "${TSM_SZERVER}"         fejlec "${TSM_SZERVER}"
-        echo "NODE NAME                 SCHEDULE NAME                 ACTUAL START             RUNTIME     RESULT" | tee -a $TMP_HTML_FILE >> $TMP_FILE +        html_vonal "Sikertelen utemezesek" >> $TMP_HTML_FILE 
-        echo "---------------------     -------------------------     --------------------     --------    -----------------"| tee -a $TMP_HTML_FILE >> $TMP_FILE +        echo "NODE NAME                 SCHEDULE NAME                        ACTUAL START             RUNTIME     RESULT" | tee -a $TMP_HTML_FILE >> $TMP_FILE 
-        # Minden adott email cimhez tartozo SQL feltetelt feldolgozunk +        echo "---------------------     --------------------------------     --------------------     --------    --------------"| tee -a $TMP_HTML_FILE >> $TMP_FILE 
-        awk -F';' "/$MAILTO/"'{print $2}' $KONFIG_FILE | sort -u | while read SQL_FELTETEL; do+        # Minden adott email cimhez tartozo SQL feltetelt feldolgozunk, először csak a nem sikereseket, aztán alá a teljes listát is 
 +        awk -F';' "/^[^#]*$MAILTO/"'{print $2}' $KONFIG_FILE | sort -u | while read SQL_FELTETEL; do
             FSIZE=$(ls -l $TMP_FILE | awk '{print $5}')             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)' | egrep '(Failed|Missed|Severed|Started)' | tee -a $TMP_HTML_FILE >> $TMP_FILE
 +#            FSIZE2=$(ls -l $TMP_FILE | awk '{print $5}')
 +        done
 +        html_vonal "<br>Elmult 3 napban sorozatosan Missed utemezesek" >> $TMP_HTML_FILE
 +        echo "NODE NAME                 SCHEDULE                       CONTACT                   3 DAY COUNT         LAST SEEN" | tee -a $TMP_HTML_FILE >> $TMP_FILE
 +        echo "---------------------     --------------------------     ---------------------     ------------     ------------" | tee -a $TMP_HTML_FILE >> $TMP_FILE
 +        # Minden adott email cimhez tartozo SQL feltetelt feldolgozunk, először csak a nem sikereseket, aztán alá a teljes listát is
 +        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
 +            SQL_3X_MISSED="select substr(e.node_name,1,20) as \"NODE NAME\", substr(e.schedule_name,1,25) as SCHEDULE, substr(n.contact,1,20) as \"CONTACT\", substr(char(count(*)),1,4) as \"3 DAY COUNT\",(days(current_timestamp)-days(n.lastacc_time)) as \"LAST SEEN\" from EVENTS e, nodes n where (e.scheduled_start >=current_timestamp - 3 days) and e.node_name=n.node_name and e.status='Missed' and e.node_name is not NULL and e.schedule_name not like 'RMAN_%%_LOG%%' and e.schedule_name not like 'SQL_%%_LOG%%' and $(echo ${SQL_FELTETEL} | sed 's/order by [^ ]*//gi') group by e.node_name, e.schedule_name, n.contact, n.lastacc_time having count(*)>=3 " #order by \"3 DAY COUNT\" desc"
 +            dsmadmc -id=$TSM_FELH -pa=$TSM_JELSZO -se=${TSM_SZERVER} -dataonly=y -displ=tabl "$SQL_3X_MISSED" | egrep -v '(ANS|ANR)' | tee -a $TMP_HTML_FILE >> $TMP_FILE
 +#            FSIZE2=$(ls -l $TMP_FILE | awk '{print $5}')
 +        done
 +        html_vonal "<br>Minden utemezes" >> $TMP_HTML_FILE
 +        echo "NODE NAME                 SCHEDULE NAME                        ACTUAL START             RUNTIME     RESULT" | tee -a $TMP_HTML_FILE >> $TMP_FILE
 +        echo "---------------------     --------------------------------     --------------------     --------    --------------"| tee -a $TMP_HTML_FILE >> $TMP_FILE
 +        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             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             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
Sor 189: Sor 220:
     done     done
 done done
 +# Regi logok torlese
 +zip -9rv ${LOG_DIR}/$(date +%Y%m)_archived_backup_logs.zip "${LOG_DIR}/tsm_kliens_riport_${DATUM}_${MAILTO}.log"
 +find ${LOG_DIR}/tsm_kliens_riport_*.log -type f -mtime +60 -exec rm {} \;
 +rm -f "$TMP_FILE" "$TMP_HTML_FILE" "/tmp/tsm_kliens_riport_${DATUM}.html"
 </file> </file>
 </WRAP> </WRAP>