This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
tsm:tsm_tmp [2024/07/30 16:51] manu removed |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | <code> | ||
- | #!/bin/ksh93 | ||
- | #set -x | ||
- | #==================================================================== | ||
- | #@(#) Script to generate a HTML report on TSM activity | ||
- | # format of line before HMTL : | ||
- | # html_tag;nagios_tag;reserved;output_from_select_TSM | ||
- | #==================================================================== | ||
- | # version 1.0 | ||
- | # version 1.1 report send by mail | ||
- | # version 1.2 suppress unused informations | ||
- | # version 1.3 add statistics on 5 latest daily backups | ||
- | dir=`dirname $0` | ||
- | . $dir/.env | ||
- | . $configfile | ||
- | |||
- | |||
- | os=$(uname -s | tr 'A-Z' 'a-z') | ||
- | |||
- | if [[ $os == "aix" ]] | ||
- | then | ||
- | # Needs rpm package coreutil | ||
- | DATE_BIN=/opt/freeware/bin/date | ||
- | if [ ! -x /opt/freeware/bin/date ] | ||
- | then | ||
- | echo "Install coreutil package" | ||
- | exit 1 | ||
- | fi | ||
- | DSMADMC1="/usr/tivoli/tsm/client/ba/bin64/dsmadmc -id=${tsm_admin} -pa=${tsm_password}" | ||
- | HOSTNAME=$(/usr/bin/hostname -s) | ||
- | else | ||
- | if [[ $os == "linux" ]] | ||
- | then | ||
- | DATE_BIN=/bin/date | ||
- | DSMADMC1="/opt/tivoli/tsm/client/ba/bin/dsmadmc -id=${tsm_admin} -pa=${tsm_password}" | ||
- | HOSTNAME=$(/bin/hostname -s) | ||
- | else | ||
- | echo "ERROR: Unknown OS" | ||
- | exit 1 | ||
- | fi | ||
- | fi | ||
- | |||
- | |||
- | YESTERDAY=$($DATE_BIN +%Y-%m-%d -d "1 day ago") | ||
- | TODAY=$($DATE_BIN +%Y-%m-%d) | ||
- | |||
- | OPT_COMMA="-comma" | ||
- | OPT_TAB="-tab" | ||
- | OPT_DATAONLY="-dataonly=yes" | ||
- | |||
- | tmplog=$logpath/tmp | ||
- | TMPFILE=$tmplog/tsm_daily_result | ||
- | min_scr=3 # Minimum number of scratch per library | ||
- | |||
- | #NAGIOSTAG="0=OK, 1=WARNING, 2=CRITICAL, 3=UNKNOWN" | ||
- | COLOR[0]="#57E964" # green | ||
- | COLOR[1]="#F87217" # orange #F7BE81 | ||
- | COLOR[2]="#FF2400" # red #DF013A | ||
- | COLOR[3]="yellow" # yellow #F3F781 | ||
- | COLOR[4]="#56A5EC" # blue | ||
- | COLOR[5]="#FFFFFF" # white | ||
- | #FFA500 : orange | ||
- | |||
- | TAG=TAG # reserved for future | ||
- | apachehost="root@10.10.10.10" | ||
- | apachepath="/var/www/htdocs" | ||
- | |||
- | |||
- | db_log () | ||
- | { | ||
- | echo "# Collect db_log" | ||
- | # DB | ||
- | db_info=$($DSMADMC $OPT_COMMA $OPT_DATAONLY "select DATABASE_NAME,TOT_FILE_SYSTEM_MB,USED_DB_SPACE_MB from db") | ||
- | echo "TH;4;TAG;DB/LOG_NAME;TOTAL_FILESYSTEM_SIZE_GB;PERCENT_USED" > $TMPFILE.db_log | ||
- | filesys_sz=$(echo $db_info | cut -d',' -f2) | ||
- | filesys_used=$(echo $db_info | cut -d',' -f3) | ||
- | db_name=$(echo $db_info | cut -d',' -f1) | ||
- | (( filesys_sz_gb = filesys_sz / 1024 )) | ||
- | (( pct_used = 100 * filesys_used / filesys_sz )) | ||
- | |||
- | if [ "$pct_used" -gt "90" ] | ||
- | then | ||
- | NAGIOSTAG=2 | ||
- | else | ||
- | if [ "$pct_used" -gt "80" ] | ||
- | then | ||
- | NAGIOSTAG=1 | ||
- | else | ||
- | NAGIOSTAG=0 | ||
- | fi | ||
- | fi | ||
- | echo "TD;$NAGIOSTAG;$TAG;$db_name;$filesys_sz_gb;${pct_used} %" >> $TMPFILE.db_log | ||
- | |||
- | # Logs | ||
- | log_info=$($DSMADMC $OPT_COMMA $OPT_DATAONLY "select TOTAL_SPACE_MB,USED_SPACE_MB,ARCHLOG_TOL_FS_MB,ARCHLOG_USED_FS_MB from log") | ||
- | filesys_sz=$(echo $log_info | cut -d',' -f1) | ||
- | filesys_used=$(echo $log_info | cut -d',' -f2) | ||
- | (( filesys_sz_gb = filesys_sz / 1024 )) | ||
- | (( pct_used = 100 * filesys_used / filesys_sz )) | ||
- | NAGIOSTAG=0 | ||
- | echo "TD;$NAGIOSTAG;$TAG;ACTIVE_LOG;$filesys_sz_gb;${pct_used} %" >> $TMPFILE.db_log | ||
- | |||
- | filesys_sz=$(echo $log_info | cut -d',' -f3) | ||
- | filesys_used=$(echo $log_info | cut -d',' -f4) | ||
- | (( filesys_sz_gb = filesys_sz / 1024 )) | ||
- | (( pct_used = 100 * filesys_used / filesys_sz )) | ||
- | |||
- | if [ "$pct_used" -gt "90" ] | ||
- | then | ||
- | NAGIOSTAG=2 | ||
- | else | ||
- | if [ "$pct_used" -gt "80" ] | ||
- | then | ||
- | NAGIOSTAG=1 | ||
- | else | ||
- | NAGIOSTAG=0 | ||
- | fi | ||
- | fi | ||
- | echo "TD;$NAGIOSTAG;$TAG;ARCHIVE_LOG;$filesys_sz_gb;${pct_used} %" >> $TMPFILE.db_log | ||
- | } | ||
- | |||
- | backup_vm () | ||
- | { | ||
- | echo "# Collect backup_vm" | ||
- | #ACTIVITY_DETAILS: VMware | ||
- | |||
- | $DSMADMC $OPT_COMMA $OPT_DATAONLY "select TO_CHAR(CHAR(START_TIME),'YYYY-MM-DD HH24:MI:SS') as START_TIME,TO_CHAR(CHAR(END_TIME),'YYYY-MM-DD HH24:MI:SS') as END_TIME,SUB_ENTITY as NODE_NAME,SCHEDULE_NAME,SUCCESSFUL,TRANSLATE('a bc:de:fg', DIGITS(END_TIME-START_TIME), '_______abcdefgh_____',' ') as ELAPTIME,cast(float(bytes)/1024/1024/1024 as dec(8,2)) as GB from summary_extended where ACTIVITY_DETAILS='VMware' and ACTIVITY<>'EXPIRATION' and SUB_ENTITY<>'' and START_TIME>=current_timestamp-24 hours" | sed 's/,/;/g' | sed 's/\ /|/g' | egrep -v "ANR2034E|ANS8001I" > $TMPFILE | ||
- | |||
- | echo "TH;4;TAG;START_TIME;END_TIME;NODE_NAME;SCHEDULE_NAME;SUCCESSFUL;ELAPTIME;GB" > $TMPFILE.backup_vm | ||
- | |||
- | cat $TMPFILE | while read line | ||
- | do | ||
- | status=$(echo $line | cut -d';' -f5) | ||
- | if [ "$status" == "YES" ] | ||
- | then | ||
- | NAGIOSTAG=0 | ||
- | else | ||
- | NAGIOSTAG=2 | ||
- | fi | ||
- | echo "TD;$NAGIOSTAG;$TAG;$line" >> $TMPFILE.backup_vm | ||
- | done | ||
- | |||
- | |||
- | } | ||
- | |||
- | |||
- | |||
- | read_events () | ||
- | { | ||
- | echo "# Collect events" | ||
- | # Suppress REASON and add ELAPTIME : SCHEDULED_START;ACTUAL_START;DOMAIN_NAME;SCHEDULE_NAME;NODE_NAME;STATUS;RESULT;REASON;COMPLETED;ELAPTIME | ||
- | $DSMADMC $OPT_COMMA $OPT_DATAONLY "select TO_CHAR(CHAR(SCHEDULED_START),'YYYY-MM-DD HH24:MI:SS') as SCHEDULED_START,TO_CHAR(CHAR(ACTUAL_START),'YYYY-MM-DD HH24:MI:SS') as ACTUAL_START,DOMAIN_NAME,SCHEDULE_NAME,NODE_NAME,STATUS,RESULT,TO_CHAR(CHAR(COMPLETED),'YYYY-MM-DD HH24:MI:SS') as COMPLETED,TRANSLATE('a bc:de:fg', DIGITS(COMPLETED-ACTUAL_START), '_______abcdefgh_____',' ') as ELAPTIME from events where SCHEDULED_START>=current_timestamp-24 hours" | egrep "$YESTERDAY|$TODAY" | sed 's/,/;/g' | sed 's/\ /|/g' > $TMPFILE | ||
- | #echo "Client Schedules" | ||
- | echo "TH;4;TAG;SCHEDULED_START;ACTUAL_START;DOMAIN_NAME;SCHEDULE_NAME;NODE_NAME;STATUS;RESULT;COMPLETED;ELAPTIME" > $TMPFILE.client | ||
- | #echo "Admin Schedules" | ||
- | echo "TH;4;TAG;SCHEDULED_START;ACTUAL_START;SCHEDULE_NAME;STATUS;RESULT;COMPLETED;ELAPTIME" > $TMPFILE.admin | ||
- | |||
- | cat $TMPFILE | while read line | ||
- | do | ||
- | status=$(echo $line | cut -d';' -f6) | ||
- | if [ "$status" != "Future" ] | ||
- | then | ||
- | DOMAIN_NAME=$(echo $line | cut -d';' -f3) | ||
- | if [ "$DOMAIN_NAME" = "" ] | ||
- | then | ||
- | # Admin schedule | ||
- | if [ "$(echo $line | cut -d';' -f6-7)" = "Completed;0" ] | ||
- | then | ||
- | NAGIOSTAG=0 | ||
- | else | ||
- | if [ "$status" = "Completed" ] | ||
- | then | ||
- | NAGIOSTAG=1 | ||
- | else | ||
- | if [[ "$status" = "Started" || "$status" = 'In|Progress' ]] | ||
- | then | ||
- | NAGIOSTAG=3 | ||
- | else | ||
- | NAGIOSTAG=2 | ||
- | fi | ||
- | fi | ||
- | fi | ||
- | line1=$(echo $line | cut -d';' -f1-2,4,6-) | ||
- | echo "TD;$NAGIOSTAG;$TAG;$line1" >> $TMPFILE.admin.$NAGIOSTAG | ||
- | else | ||
- | # Client schedule | ||
- | if [ "$(echo $line | cut -d';' -f6-7)" = "Completed;0" ] | ||
- | then | ||
- | NAGIOSTAG=0 | ||
- | else | ||
- | if [ "$status" = "Completed" ] | ||
- | then | ||
- | NAGIOSTAG=1 | ||
- | else | ||
- | if [[ "$status" = "Started" ]] || [[ "$status" = 'In|Progress' ]] | ||
- | then | ||
- | NAGIOSTAG=3 | ||
- | else | ||
- | NAGIOSTAG=2 | ||
- | fi | ||
- | fi | ||
- | fi | ||
- | echo "TD;$NAGIOSTAG;$TAG;$line" >> $TMPFILE.client.$NAGIOSTAG | ||
- | fi | ||
- | fi | ||
- | done | ||
- | |||
- | $DSMADMC $OPT_COMMA $OPT_DATAONLY "SELECT activity, cast(float(sum(bytes))/1024/1024/1024 as dec(8,2)) as GB FROM summary WHERE activity<>'TAPE MOUNT' AND activity<>'EXPIRATION' AND start_time >current_timestamp-24 hours GROUP BY activity" | sed 's/,/;/g' | sed 's/\ /|/g' > $TMPFILE.activitytotal | ||
- | echo "TH;4;TAG;BACKUP;ARCHIVE;RESTORE;RETRIEVE;FULL_DBBACKUP;STGPOOL|BACKUP;DELETE|FILESPACE;MIGRATION;RECLAMATION;SW|MIGRATION" > $TMPFILE.total | ||
- | value1="" | ||
- | for act in $(head -1 $TMPFILE.total | cut -d';' -f4- | sed 's/;/\ /g') | ||
- | do | ||
- | value=$(grep "^$act;" $TMPFILE.activitytotal | cut -d';' -f2) | ||
- | value1="$value1;$value" | ||
- | done | ||
- | echo "TD;5;TAG$value1" >> $TMPFILE.total | ||
- | |||
- | |||
- | |||
- | |||
- | $DSMADMC $OPT_COMMA $OPT_DATAONLY "select SEVERITY,TO_CHAR(CHAR(DATE_TIME),'YYYY-MM-DD HH24:MI:SS') as DATE,ORIGINATOR,NODENAME,SCHEDNAME,DOMAINNAME,MESSAGE from actlog where ( SEVERITY='W' or SEVERITY='E' ) and date_time>=current_timestamp-24 hours" | sed 's/\ /|/g' | sed 's/;/\-/g' | sort > $TMPFILE.actlog | ||
- | echo "TH;4;TAG;DATE_TIME;ORIGINATOR;NODENAME;SCHEDNAME;DOMAINNAME;MESSAGE ID;MESSAGE" > $TMPFILE.error | ||
- | |||
- | |||
- | cat $TMPFILE.actlog | egrep -v "ANR2034E|ANR1701E|ANR2111W" | sed 's/^W/3;TAG/g' | sed 's/^E/2;TAG/g' | sed 's/^/TD;/g' | sed 's/,/;/1' | sed 's/,/;/1' | sed 's/,/;/1' | sed 's/,/;/1' | sed 's/,/;/1' | sed 's/,/;/1' | sed 's/|/;/2' >> $TMPFILE.error | ||
- | } | ||
- | |||
- | stgpool_stats () | ||
- | { | ||
- | # Add 10-2015 | ||
- | echo "TH;4;TAG;STGPOOL_NAME;STGPOOL_SIZE_GB" >> $TMPFILE.stgpool_occ | ||
- | $DSMADMC $OPT_COMMA $OPT_DATAONLY "select stgpool_name,sum(logical_mb)/1024 from occupancy group by stgpool_name" | sed 's/,/;/g' | sed 's/\ /\|/g' > $TMPFILE.stgpool_occ.tmp | ||
- | cat $TMPFILE.stgpool_occ.tmp | sed 's/^/TD;5;TAG;/' >> $TMPFILE.stgpool_occ | ||
- | rm $TMPFILE.stgpool_occ.tmp | ||
- | |||
- | echo "TH;4;TAG;STGPOOL_NAME;POOLTYPE;DEVCLASS;DEDUPLICATE;EST_CAPACITY_MB;PCT_UTILIZED;PCT_LOGICAL;MAXSCRATCH;NUMSCRATCHUSED;SPACE_SAVED_MB" > $TMPFILE.stgpool_stats | ||
- | $DSMADMC $OPT_COMMA $OPT_DATAONLY "select STGPOOL_NAME,POOLTYPE,DEVCLASS,DEDUPLICATE,EST_CAPACITY_MB,PCT_UTILIZED,PCT_LOGICAL,MAXSCRATCH,NUMSCRATCHUSED,SPACE_SAVED_MB from stgpools" | sed 's/,/;/g' | sed 's/\ /\|/g' > $TMPFILE.stgpool_stats.tmp | ||
- | |||
- | for line in $(cat $TMPFILE.stgpool_stats.tmp) | ||
- | do | ||
- | MAXSCRATCH=$(echo $line | cut -d';' -f8) | ||
- | MAXSCRATCHUSED=$(echo $line | cut -d';' -f9) | ||
- | if [[ $MAXSCRATCH -eq "" ]] | ||
- | then | ||
- | NAGIOSTAG=0 | ||
- | else | ||
- | if [ $MAXSCRATCH = 0 ] | ||
- | then | ||
- | if [ $MAXSCRATCHUSED = 0 ] | ||
- | then | ||
- | NAGIOSTAG=0 | ||
- | else | ||
- | NAGIOSTAG=2 | ||
- | fi | ||
- | else | ||
- | (( pctused = 100 * MAXSCRATCHUSED / MAXSCRATCH )) | ||
- | if [ $pctused -gt 90 ] | ||
- | then | ||
- | NAGIOSTAG=2 | ||
- | else | ||
- | NAGIOSTAG=0 | ||
- | fi | ||
- | fi | ||
- | fi | ||
- | echo "TD;$NAGIOSTAG;$TAG;$line" >> $TMPFILE.stgpool_stats | ||
- | done | ||
- | rm $TMPFILE.stgpool_stats.tmp | ||
- | } | ||
- | |||
- | |||
- | check_library () | ||
- | { | ||
- | echo "# Collect check_library" | ||
- | COUNT='count(*)' | ||
- | echo "TH;4;TAG;Library_name;scratch" > $TMPFILE.scratch | ||
- | for libr in $($DSMADMC $OPT_TAB $OPT_DATAONLY "select LIBRARY_NAME from libraries" | egrep -v "^ANR|^ANE|^ANS") | ||
- | do | ||
- | library=$(echo $libr | sed "s/^/\'/" | sed "s/$/\'/") | ||
- | scr=$($DSMADMC $OPT_COMMA $OPT_DATAONLY "select $COUNT as Scratch from libvolumes WHERE status='Scratch' and library_name=$library") | ||
- | line=$(echo "$libr $scr") | ||
- | echo $line | sed 's/\ /\;/g' >> $TMPFILE.scratch1 | ||
- | done | ||
- | |||
- | #$DSMADMC $OPT_COMMA $OPT_DATAONLY "select library_name,$COUNT as Scratch from libvolumes WHERE status='Scratch' group by library_name" | sed 's/,/;/g' | sed 's/\ /|/g' > $TMPFILE.scratch1 | ||
- | |||
- | echo "TH;4;TAG;DESTINATION_TYPE;ONLINE;OFFLINE" > $TMPFILE.paths | ||
- | $DSMADMC $OPT_COMMA $OPT_DATAONLY "select DESTINATION_TYPE,ONLINE from paths" | egrep -v "^ANR|^ANE|^ANS" | sed 's/,/;/g' | sed 's/\ /|/g' > $TMPFILE.paths1 | ||
- | | ||
- | echo "TH;4;TAG;LIBRARY_NAME;DRIVE_NAME;DEVICE_TYPE;ONLINE" > $TMPFILE.drives | ||
- | $DSMADMC $OPT_COMMA $OPT_DATAONLY "select LIBRARY_NAME,DRIVE_NAME,DEVICE_TYPE,ONLINE from drives" | egrep -v "^ANR|^ANE|^ANS" | sed 's/,/;/g' | sed 's/\ /|/g' > $TMPFILE.drives1 | ||
- | |||
- | NAGIOSTAG=0 | ||
- | TAG=TAG | ||
- | for line in $(cat $TMPFILE.scratch1) | ||
- | do | ||
- | if [ $(echo $line | cut -d';' -f2) -le $min_scr ] | ||
- | then | ||
- | NAGIOSTAG=2 | ||
- | else | ||
- | NAGIOSTAG=0 | ||
- | fi | ||
- | echo "TD;$NAGIOSTAG;$TAG;$line" >> $TMPFILE.scratch | ||
- | done | ||
- | rm $TMPFILE.scratch1 | ||
- | |||
- | for type in $(cat $TMPFILE.paths1 | cut -d';' -f1 | sort | uniq) | ||
- | do | ||
- | online=$(cat $TMPFILE.paths1 | grep "^$type" | cut -d';' -f2 | grep 'YES' | wc -l | awk '{print $1}') | ||
- | offline=$(cat $TMPFILE.paths1 | grep "^$type" | cut -d';' -f2 | grep -v 'YES' | wc -l | awk '{print $1}') | ||
- | if [ "$offline" -eq "0" ] | ||
- | then | ||
- | NAGIOSTAG=0 | ||
- | else | ||
- | if [ "$offline" -ge "$online" ] | ||
- | then | ||
- | NAGIOSTAG=2 | ||
- | else | ||
- | NAGIOSTAG=1 | ||
- | fi | ||
- | fi | ||
- | echo "TD;$NAGIOSTAG;$TAG;$type;$online;$offline" >> $TMPFILE.paths | ||
- | done | ||
- | rm $TMPFILE.paths1 | ||
- | |||
- | for line in $(cat $TMPFILE.drives1) | ||
- | do | ||
- | end=$(echo $line | cut -d';' -f4) | ||
- | if [ "$end" != "YES" ] | ||
- | then | ||
- | NAGIOSTAG=1 | ||
- | echo "TD;$NAGIOSTAG;$TAG;$line" >> $TMPFILE.drives | ||
- | fi | ||
- | done | ||
- | for library in $(cat $TMPFILE.drives1 | cut -d';' -f1 | sort | uniq) | ||
- | do | ||
- | online=$(cat $TMPFILE.drives1 | grep "^$library" | cut -d';' -f4 | grep 'YES' | wc -l | awk '{print $1}') | ||
- | total=$(cat $TMPFILE.drives1 | grep "^$library" | wc -l | awk '{print $1}') | ||
- | ((offline = total - online)) | ||
- | type=$(cat $TMPFILE.drives1 | grep "^$library" | cut -d';' -f3 | tail -1) | ||
- | if [ "$offline" -eq "0" ] | ||
- | then | ||
- | NAGIOSTAG=0 | ||
- | else | ||
- | if [ "$offline" -ge "$online" ] | ||
- | then | ||
- | NAGIOSTAG=2 | ||
- | else | ||
- | NAGIOSTAG=1 | ||
- | fi | ||
- | fi | ||
- | echo "TD;$NAGIOSTAG;$TAG;$library;"'|'";$type;$online"'|/|'"$total" >> $TMPFILE.drives | ||
- | done | ||
- | rm $TMPFILE.drives1 | ||
- | |||
- | } | ||
- | |||
- | check_volume_error () | ||
- | { | ||
- | echo "# Collect check_volume_error" | ||
- | echo "TH;4;TAG;VOLUME_NAME;ACCESS;WRITE_ERRORS;READ_ERRORS" > $TMPFILE.volume_error | ||
- | $DSMADMC $OPT_COMMA $OPT_DATAONLY "select VOLUME_NAME,ACCESS,WRITE_ERRORS,READ_ERRORS from volumes where ACCESS<>'READWRITE' and ACCESS<>'OFFSITE'" | sed 's/,/;/g' | sed 's/\ /|/g' | egrep -iv "found|return"| sed "s/^/TD;2;$TAG;/" >> $TMPFILE.volume_error | ||
- | $DSMADMC $OPT_COMMA $OPT_DATAONLY "select VOLUME_NAME,ACCESS,WRITE_ERRORS,READ_ERRORS from volumes where WRITE_ERRORS<>'0' or READ_ERRORS<>'0'" | sed 's/,/;/g' | sed 's/\ /|/g' | egrep -iv "found|return" | sed "s/^/TD;1;$TAG;/" >> $TMPFILE.volume_error | ||
- | } | ||
- | |||
- | |||
- | auditocc () | ||
- | { | ||
- | echo "# Collect auditocc" | ||
- | NAGIOSTAG=0 | ||
- | TAG=TAG | ||
- | echo "TH;4;TAG;NODE_NAME;BACKUP_MB;BACKUP_COPY_MB;ARCHIVE_MB;ARCHIVE_COPY_MB;TOTAL_MB;LASTACC_DATE;DOMAIN_NAME" > $TMPFILE.auditocc | ||
- | #$DSMADMC $OPT_COMMA $OPT_DATAONLY "select NODE_NAME,BACKUP_MB,BACKUP_COPY_MB,ARCHIVE_MB,ARCHIVE_COPY_MB,TOTAL_MB from auditocc order by TOTAL_MB desc" | sed 's/,/;/g' | sed 's/\ /|/g' | sed "s/^/TD;$NAGIOSTAG;$TAG;/" >> $TMPFILE.auditocc | ||
- | $DSMADMC $OPT_COMMA $OPT_DATAONLY "select n.NODE_NAME,a.BACKUP_MB,a.BACKUP_COPY_MB,a.ARCHIVE_MB,a.ARCHIVE_COPY_MB,a.TOTAL_MB,DATE(n.lastacc_time) as LASTACC_DATE,n.DOMAIN_NAME from nodes n, auditocc a WHERE n.node_name=a.node_name order by TOTAL_MB desc" | sed 's/,/;/g' | sed 's/\ /|/g' | sed "s/^/TD;$NAGIOSTAG;$TAG;/" >> $TMPFILE.auditocc | ||
- | } | ||
- | |||
- | daily_backuparch_per_node () | ||
- | { | ||
- | echo "# Collect daily_backuparch_per_node" | ||
- | NAGIOSTAG=0 | ||
- | TAG=TAG | ||
- | HEADER="TH;4;TAG;DOMAIN_NAME;NODE_NAME" | ||
- | |||
- | $DSMADMC $OPT_COMMA $OPT_DATAONLY "SELECT node_name,domain_name FROM nodes" | sed 's/,/;/g' | sed 's/\ /|/g' | sed 's/$/;/' > $TMPFILE.qnode | ||
- | |||
- | for days in {0..5} | ||
- | do | ||
- | (( BEGIN = 24 * days )) | ||
- | (( END = (24 * days) + 24 )) | ||
- | HEADER=$(echo ${HEADER}';'DAY-${days}'(GB)') | ||
- | |||
- | $DSMADMC $OPT_COMMA $OPT_DATAONLY "SELECT entity,cast(float(sum(bytes)) / 1024 / 1024 / 1024 AS DECIMAL(8,2)) as GB FROM summary where ( activity='ARCHIVE' OR activity='BACKUP' ) AND end_time>current_timestamp-$END hours and end_time<current_timestamp-$BEGIN hours GROUP BY entity" | sed 's/,/;/g' | sed 's/\ /|/g' | grep -v '^;' > $TMPFILE.daily_backup-arch_per_node.tmp | ||
- | |||
- | cat /dev/null > $TMPFILE.daily_backup-arch_per_node.$days | ||
- | for line in $(cat $TMPFILE.daily_backup-arch_per_node.tmp) | ||
- | do | ||
- | node_name=$(echo $line | awk -F'|' '{print $1}' | awk -F';' '{print $1}') | ||
- | dom=$(grep "^$node_name;" $TMPFILE.qnode | cut -d';' -f2) | ||
- | line2=$(echo $line | cut -d';' -f2) | ||
- | echo "${dom};${node_name};${line2}" >> $TMPFILE.daily_backup-arch_per_node.$days | ||
- | done | ||
- | |||
- | # Keep only 1 line per node | ||
- | cat /dev/null > $TMPFILE.daily_backup-arch_per_node.tmp | ||
- | for line in $(cat $TMPFILE.daily_backup-arch_per_node.$days) | ||
- | do | ||
- | domnode=$(echo $line | cut -d';' -f1,2) | ||
- | grep "^$domnode;" $TMPFILE.daily_backup-arch_per_node.tmp > /dev/null 2>&1 | ||
- | if [ $? -ne 0 ] | ||
- | then | ||
- | numoccurence=$(grep "^$domnode;" $TMPFILE.daily_backup-arch_per_node.$days | wc -l | awk '{print $1}') | ||
- | if [ "$numoccurence" -gt 1 ] | ||
- | then | ||
- | final_amount="0.00" | ||
- | for amount in $(grep "^$domnode;" $TMPFILE.daily_backup-arch_per_node.$days | cut -d';' -f3) | ||
- | do | ||
- | final_amount=$(echo "${final_amount} + ${amount}" | bc | sed 's/^\./0\./') | ||
- | done | ||
- | echo "$domnode;$final_amount" >> $TMPFILE.daily_backup-arch_per_node.tmp | ||
- | else | ||
- | echo "$line" >> $TMPFILE.daily_backup-arch_per_node.tmp | ||
- | fi | ||
- | fi | ||
- | done | ||
- | mv $TMPFILE.daily_backup-arch_per_node.tmp $TMPFILE.daily_backup-arch_per_node.$days | ||
- | done | ||
- | |||
- | if [ ! -f $TMPFILE.daily_backup-arch_per_node ] | ||
- | then | ||
- | cat $TMPFILE.daily_backup-arch_per_node.* | cut -d';' -f1,2 | sort | uniq > $TMPFILE.daily_backup-arch_per_node | ||
- | fi | ||
- | |||
- | count=0 | ||
- | while [[ $count -le $days ]] | ||
- | do | ||
- | cat $TMPFILE.daily_backup-arch_per_node | sed 's/$/;/' > $TMPFILE.daily_backup-arch_per_node.tmp | ||
- | for line in $(cat $TMPFILE.daily_backup-arch_per_node.${count}) | ||
- | do | ||
- | domnode=$(echo $line | cut -d';' -f1,2) | ||
- | value=$(echo $line | cut -d';' -f3) | ||
- | grep "^$domnode;" $TMPFILE.daily_backup-arch_per_node.tmp > /dev/null 2>&1 | ||
- | if [ $? -eq 0 ] | ||
- | then | ||
- | sed -e "/$domnode;/ s/$/$value/" $TMPFILE.daily_backup-arch_per_node.tmp > $TMPFILE.daily_backup-arch_per_node | ||
- | mv $TMPFILE.daily_backup-arch_per_node $TMPFILE.daily_backup-arch_per_node.tmp | ||
- | else | ||
- | echo "ERROR: field not found" | ||
- | fi | ||
- | done | ||
- | mv $TMPFILE.daily_backup-arch_per_node.tmp $TMPFILE.daily_backup-arch_per_node | ||
- | count=$(expr $count + 1) | ||
- | done | ||
- | mv $TMPFILE.daily_backup-arch_per_node $TMPFILE.daily_backup-arch_per_node.tmp | ||
- | echo $HEADER > $TMPFILE.daily_backup-arch_per_node | ||
- | cat $TMPFILE.daily_backup-arch_per_node.tmp | sort | sed "s/^/TD;$NAGIOSTAG;$TAG;/" >> $TMPFILE.daily_backup-arch_per_node | ||
- | rm $TMPFILE.daily_backup-arch_per_node.* | ||
- | |||
- | } | ||
- | |||
- | admin_shedule_status () | ||
- | { | ||
- | echo "# Collect admin_shedule_status" | ||
- | $DSMADMC $OPT_COMMA $OPT_DATAONLY "select START_TIME,END_TIME,TRANSLATE('a bc:de:fg', DIGITS(end_time-start_time), '_______abcdefgh_____',' ') as ELAPTIME,ENTITY,SUCCESSFUL from summary where ACTIVITY='PROCESS_END' and START_TIME>=current_timestamp-24 hours" | sed 's/,/;/g' | sed 's/\ /|/g' > $TMPFILE.sum_admin.tmp | ||
- | |||
- | |||
- | echo "TH;4;TAG;SCHEDULED_START;SCHEDULED_STOP;DURATION;ADMIN_TASK;STATUS" > $TMPFILE.sum_admin | ||
- | |||
- | cat $TMPFILE.sum_admin.tmp | egrep "^$YESTERDAY|^$TODAY" | sort | while read line | ||
- | do | ||
- | status=$(echo $line | cut -d';' -f5) | ||
- | if [ "$status" == "YES" ] | ||
- | then | ||
- | NAGIOSTAG=0 | ||
- | else | ||
- | NAGIOSTAG=2 | ||
- | fi | ||
- | echo "TD;$NAGIOSTAG;$TAG;$line" >> $TMPFILE.sum_admin | ||
- | done | ||
- | |||
- | rm $TMPFILE.sum_admin.tmp | ||
- | |||
- | } | ||
- | |||
- | |||
- | convert_html () | ||
- | { | ||
- | #<TABLE BORDER="1" style="background:#FFFF00"> | ||
- | # <CAPTION> Voici le titre du tableau </CAPTION> | ||
- | # <TR style="background:#80BFFF"><TH> Titre A1 </TH><TH> Titre A2 </TH><TH> Titre A3 </TH><TH> Titre A4 </TH></TR> | ||
- | # <TR style="background:#00FF00"><TH> Titre B1 </TH><TD> Valeur B2 </TD><TD> Valeur B3 </TD><TD> Valeur B4 </TD></TR> | ||
- | # <TR><TH> Titre B1 </TH><TD> Valeur B2 </TD><TD> Valeur B3 </TD><TD> Valeur B4 </TD></TR> | ||
- | #</TABLE> | ||
- | server=$1 | ||
- | |||
- | echo '<html> | ||
- | <head> | ||
- | <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | ||
- | </head> | ||
- | <h1>TSM Report' $server $(date "+%d-%m-%Y %H:%M")'</h1> | ||
- | <body> | ||
- | <br> | ||
- | <h2>TSM events</h2> | ||
- | <br> | ||
- | <table border="1"> | ||
- | <tbody>' | ||
- | |||
- | for i in db_log admin volume_error scratch stgpool_stats paths drives client backup_vm error total sum_admin stgpool_occ auditocc daily_backup-arch_per_node | ||
- | do | ||
- | nb_line=$(cat $TMPFILE.$i* | wc -l) | ||
- | if [ "$nb_line" -gt "1" ] | ||
- | then | ||
- | echo '<h3>TSM '$(echo $i)'</h3><br>' | ||
- | cat $TMPFILE.$i* > $TMPFILE.tempo | ||
- | for nb in 0 1 2 3 4 5 | ||
- | do | ||
- | for begin in TH TD | ||
- | do | ||
- | cat $TMPFILE.tempo | sed "s/^$begin;$nb;TAG;/\<TR\ style=\"background:${COLOR[$nb]}\"><TD>/g" > $TMPFILE.tempo1 | ||
- | mv $TMPFILE.tempo1 $TMPFILE.tempo | ||
- | done | ||
- | done | ||
- | cat $TMPFILE.tempo | sed 's/;/<\/TD><TD>/g' | sed 's/|/\ /g' | sed 's/$/<\/TD><\/TR>/g' | ||
- | echo '</tbody> | ||
- | </table> | ||
- | <table border="1"> | ||
- | <tbody> | ||
- | <BR><BR>' | ||
- | fi | ||
- | done | ||
- | |||
- | |||
- | echo ' | ||
- | </body> | ||
- | </html>' | ||
- | } | ||
- | |||
- | copy_to_apache () | ||
- | { | ||
- | if [ -s $htmlfile ] | ||
- | then | ||
- | #scp $htmlfile $apachehost:$apachepath | ||
- | newname=$(echo $htmlfile | sed "s/_${TODAY}//" | rev | cut -d'/' -f1 | rev) | ||
- | cp $htmlfile /home/lpar2rrd/lpar2rrd/www/$newname | ||
- | mv $htmlfile /report/TSM | ||
- | fi | ||
- | } | ||
- | |||
- | send_email () | ||
- | { | ||
- | uuencode $htmlfile $htmlfile | mailx -r "${HOSTNAME}.root@google.com" -s "TSM daily report $TODAY from location $server" $tsmemailreceiver | ||
- | } | ||
- | |||
- | main () | ||
- | { | ||
- | date | ||
- | for server in $(echo $tsmservers) | ||
- | do | ||
- | echo "********Collecting info on TSM server: $server" | ||
- | mkdir -p $tmplog | ||
- | DSMADMC=$(echo "$DSMADMC1 -se=$server") | ||
- | rm $TMPFILE* | ||
- | htmlfile=$logpath/tsm_daily_report_${TODAY}_${server}.html | ||
- | db_log | ||
- | backup_vm | ||
- | read_events | ||
- | check_library | ||
- | check_volume_error | ||
- | auditocc | ||
- | stgpool_stats | ||
- | admin_shedule_status | ||
- | daily_backuparch_per_node | ||
- | convert_html $server 1> $htmlfile | ||
- | # send_email $server | ||
- | copy_to_apache | ||
- | #rm $TMPFILE* | ||
- | done | ||
- | |||
- | date | ||
- | } | ||
- | |||
- | main > $logname 2>&1 | ||
- | </code> |