User Tools

Site Tools


tsm:tsm_report_script

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
tsm:tsm_report_script [2021/04/19 09:19]
manu
tsm:tsm_report_script [2023/06/21 17:42] (current)
manu [version 06-2023]
Line 666: Line 666:
 NAGIOSTAG=0 NAGIOSTAG=0
 TAG=TAG TAG=TAG
-for line in $(cat $TMPFILE.scratch1)+for line in $(cat $TMPFILE.scratch1 ​2>/​dev/​null)
 do do
   if [ $(echo $line | cut -d';'​ -f2) -le "​${alert_libr_maxscr[1]}"​ ]   if [ $(echo $line | cut -d';'​ -f2) -le "​${alert_libr_maxscr[1]}"​ ]
Line 681: Line 681:
   echo "​TD;​$NAGIOSTAG;​$TAG;​$line"​ >> $TMPFILE.scratch   echo "​TD;​$NAGIOSTAG;​$TAG;​$line"​ >> $TMPFILE.scratch
 done done
-rm $TMPFILE.scratch1 > /​dev/​null ​2>&1+rm $TMPFILE.scratch1 ​2>/​dev/​null
  
-for type in $(cat $TMPFILE.paths1 | cut -d';'​ -f1 | sort | uniq)+for type in $(cat $TMPFILE.paths1 ​2>/​dev/​null ​| cut -d';'​ -f1 | sort | uniq)
 do do
   online=$(cat $TMPFILE.paths1 | grep "​^$type"​ | cut -d';'​ -f2 | grep '​YES'​ | wc -l | awk '​{print $1}')   online=$(cat $TMPFILE.paths1 | grep "​^$type"​ | cut -d';'​ -f2 | grep '​YES'​ | wc -l | awk '​{print $1}')
Line 700: Line 700:
   echo "​TD;​$NAGIOSTAG;​$TAG;​$type;​$online;​$offline"​ >> $TMPFILE.paths   echo "​TD;​$NAGIOSTAG;​$TAG;​$type;​$online;​$offline"​ >> $TMPFILE.paths
 done done
-rm $TMPFILE.paths1+rm $TMPFILE.paths1 ​2>/​dev/​null
  
 for line in $(cat $TMPFILE.drives1) for line in $(cat $TMPFILE.drives1)
Line 730: Line 730:
   echo "​TD;​$NAGIOSTAG;​$TAG;​$library;"'​|'";​$type;​$online"'​|/​|'"​$total"​ >> $TMPFILE.drives   echo "​TD;​$NAGIOSTAG;​$TAG;​$library;"'​|'";​$type;​$online"'​|/​|'"​$total"​ >> $TMPFILE.drives
 done done
-rm $TMPFILE.drives1+rm $TMPFILE.drives1 ​2>/​dev/​null
 } }
  
Line 841: Line 841:
 { {
 echo "# Collect 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+$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,​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 echo "​TH;​4;​TAG;​SCHEDULED_START;​SCHEDULED_STOP;​DURATION;​ADMIN_TASK;​STATUS"​ > $TMPFILE.sum_admin
Line 1233: Line 1233:
  
 I install most time patch instead of base level. I install most time patch instead of base level.
 +
 +
 +====== version 06-2023 ======
 +
 +replication improved
 +
 +<​code>​
 +#!/bin/bash
 +#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, and dedup stats
 +# version 1.4 add expired nodes and filespaces
 +# version 1.5 check node replication
 +# version 1.6 centralize alert threshold in cfg file (08/2016)
 +# version 1.7 add container space (09/2019)
 +
 +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 bash and coreutil packages rpm or bff"
 +    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)
 +EXPIRED=$($DATE_BIN +%Y-%m-%d -d "​$expired day ago")
 +
 +OPT_COMMA="​-comma"​
 +OPT_TAB="​-tab"​
 +OPT_DATAONLY="​-dataonly=yes"​
 +
 +tmplog=$logpath/​tmp
 +TMPFILE=$tmplog/​tsm_daily_result
 +
 +#​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 "​${alert_db_disk[1]}"​ ]
 +then
 +  NAGIOSTAG=2
 +else
 +  if [ "​$pct_used"​ -gt "​${alert_db_disk[0]}"​ ]
 +  then
 +    NAGIOSTAG=1
 +  else
 +    NAGIOSTAG=0
 +  fi
 +fi
 +
 +# Check latest backup DB date
 +if [ $($DSMADMC $OPT_COMMA $OPT_DATAONLY "​select * from db where LAST_BACKUP_DATE>​=current_timestamp-24 hours" | tr ','​ '​\n'​ | wc -l) -lt "​10"​ ]
 +then
 +  NAGIOSTAG=2
 +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 | cut -d'​.'​ -f1)
 +filesys_used=$(echo $log_info | cut -d','​ -f2 | cut -d'​.'​ -f1)
 +(( 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 | cut -d'​.'​ -f1)
 +filesys_used=$(echo $log_info | cut -d','​ -f4 | cut -d'​.'​ -f1)
 +(( filesys_sz_gb = filesys_sz / 1024 ))
 +(( pct_used = 100 * filesys_used / filesys_sz ))
 +
 +if [ "​$pct_used"​ -gt "​${alert_log_fs[1]}"​ ]
 +then
 +  NAGIOSTAG=2
 +else
 +  if [ "​$pct_used"​ -gt "​${alert_log_fs[0]}"​ ]
 +  then
 +    NAGIOSTAG=1
 +  else
 +    NAGIOSTAG=0
 +  fi
 +fi
 +echo "​TD;​$NAGIOSTAG;​$TAG;​ARCHIVE_LOG;​$filesys_sz_gb;​${pct_used} %" >> $TMPFILE.db_log
 +}
 +
 +#​----------------------------
 +last_backup_db_tsm ()
 +{
 +echo "# Check last DB backup date"
 +$DSMADMC $OPT_COMMA $OPT_DATAONLY "​select LAST_BACKUP_DATE,​LAST_REORG,​TRANSLATE('​a bc:​de:​fg',​ DIGITS(current_timestamp-LAST_BACKUP_DATE),​ '​_______abcdefgh_____','​ ') as ELAPTIME from db" | sed '​s/​\./,/​g'​ | cut -d','​ -f1,3,5 | sed '​s/,/;/​g'​ | sed 's/\ /|/g' > $TMPFILE.last_backup_db_tsm1
 +
 +if [ $(tail -1 $TMPFILE.last_backup_db_tsm1 | egrep -q '​^[0-9][0-9]';​echo $?) -ne 0 ]
 +then
 +  echo "​ERROR;​ERROR"​ > $TMPFILE.last_backup_db_tsm1
 +  NAGIOSTAG=2
 +else
 +  if [ $(tail -1 $TMPFILE.last_backup_db_tsm1 | cut -d';'​ -f3 | cut -d'​|'​ -f1) -gt 0 ]
 +  then
 +    NAGIOSTAG=2
 +  else
 +    NAGIOSTAG=0
 +  fi
 +fi
 +echo "​TH;​4;​TAG;​LAST_BACKUP_TSM_DB_DATE;​LAST_REORG_DB"​ > $TMPFILE.last_backup_db_tsm
 +echo "​TD;​$NAGIOSTAG;​$TAG;"​$(tail -1 $TMPFILE.last_backup_db_tsm1 | cut -d';'​ -f1-2) >> $TMPFILE.last_backup_db_tsm
 +rm $TMPFILE.last_backup_db_tsm1
 +}
 +
 +#​----------------------------
 +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,ENTITY 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"​ | grep -v '​Aggregate'​ > $TMPFILE
 +
 +echo "​TH;​4;​TAG;​START_TIME;​END_TIME;​NODE_NAME;​SCHEDULE_NAME;​SUCCESSFUL;​ELAPTIME;​GB;​DM_NAME"​ > $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
 +}
 +
 +#​----------------------------
 +error_vm_backup ()
 +{
 +echo "# Collect Error in VM backup"​
 +# Check VM backups, filespace name like \VMFULL
 +
 +echo "​TH;​4;​TAG;​DATACENTER;​VM;​LAST_BACKUP;​DAYS_SINCE_LAST_BACKUP"​ > $TMPFILE.failed_vm
 +#$DSMADMC $OPT_COMMA $OPT_DATAONLY "​select NODE_NAME,​FILESPACE_NAME,​to_char(char(BACKUP_END),'​YYYY-MM-DD'​) as LAST_ACCESS,​cast(date(current_timestamp)-date(backup_end) as integer) as "​Days"​ from filespaces where node_name<>''​ and FILESPACE_NAME like '​%\VMFULL%'​ and BACKUP_END<​current_timestamp-24 hours order by node_name"​ | sed '​s/,/;/​g'​ | sed 's/\ /|/g' | egrep -v "​ANR2034E|ANS8001I"​ | sed '​s/​\\VMFULL\-//'​ > $TMPFILE
 +
 +$DSMADMC $OPT_COMMA $OPT_DATAONLY "​select NODE_NAME,​FILESPACE_NAME,​to_char(char(BACKUP_END),'​YYYY-MM-DD'​) as LAST_ACCESS from filespaces where node_name<>''​ and FILESPACE_NAME like '​%\VMFULL%'​ and BACKUP_END<​current_timestamp-24 hours order by node_name"​ | sed '​s/,/;/​g'​ | sed 's/\ /|/g' | egrep -v "​ANR2034E|ANS8001I"​ | sed '​s/​\\VMFULL\-//'​ > $TMPFILE
 +
 +CURDATE=$($DATE_BIN +%Y-%m-%d)
 +
 +cat $TMPFILE | while read line
 +do
 +  LASTACC=$(echo $line | cut -d';'​ -f3)
 +  nbdays=`echo $(( ($($DATE_BIN -d $CURDATE +%s) - $($DATE_BIN -d $LASTACC +%s) )/​(60*60*24) ))`
 +  if [ "​$nbdays"​ -le "​${alert_vm_backup[0]}"​ ]
 +  then
 +    NAGIOSTAG=0
 +  else
 +    if [ "​$nbdays"​ -le "​${alert_vm_backup[1]}"​ ]
 +    then
 +      NAGIOSTAG=1
 +    else
 +      NAGIOSTAG=2
 +    fi
 +  fi
 +  echo "​TD;​$NAGIOSTAG;​$TAG;​$line;​$nbdays"​ >> $TMPFILE.failed_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=$(cat $TMPFILE.activitytotal | sed '​s/​NAS|//'​ | grep -i "​^$act;"​ | cut -d';'​ -f2 | paste -s -d+ - | bc)
 +  #​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 | egrep -v "​ANR0213E|ANR2034E|ANR1701E|ANR2111W|ANR2992W|ANR1695W|ANR0944E|ANR4976W|ANR0482W|ANR0568W|ANR3763E|ANR3755E|ANR3693W|ANR3692W|ANR1794W|ANR1946W|ANR1942W"​ > $TMPFILE.actlog
 +echo "​TH;​4;​TAG;​DATE_TIME;​ORIGINATOR;​NODENAME;​SCHEDNAME;​DOMAINNAME;​MESSAGE ID;​MESSAGE"​ > $TMPFILE.error
 +sed 's/|/\ /g' $TMPFILE.actlog > $TMPFILE.full.error.$TODAY
 +
 +
 +cat $TMPFILE.actlog | 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'​ | sed '​s/"//​g'​ >> $TMPFILE.error
 +
 +if [ ${activity_stat} == "​yes"​ ]
 +then
 +  cat /dev/null > $TMPFILE.error1
 +  for i in $(cat $TMPFILE.error | cut -d';'​ -f1-3,5-8 | sort -u )
 +  do
 +    j=$(echo $i | cut -d';'​ -f4-)
 +    cnt=$(grep "​$j"​ $TMPFILE.error | wc -l)
 +    echo "​$i;​$cnt"​ >> $TMPFILE.error1
 +  done
 +  echo "​TH;​4;​TAG;​ORIGINATOR;​NODENAME;​SCHEDNAME;​DOMAINNAME;​ERROR/​WARNING|COUNT"​ > $TMPFILE.error
 +  cat $TMPFILE.error1 | grep -v '​^TH;​4;​TAG;'​ >> $TMPFILE.error
 +  rm $TMPFILE.error1 > /dev/null 2>&1
 +fi
 +}
 +
 +#​----------------------------
 +stgpool_stats ()
 +{
 +echo "# Collect stgpool_stats"​
 +# Add 02-2016
 +echo "​TH;​4;​TAG;​DEVCLASS_NAME;​DIRECTORY;​CAPACITY;​SPACE_FREE;​%USED"​ > $TMPFILE.dirspace
 +$DSMADMC $OPT_COMMA $OPT_DATAONLY "q dirspace"​ | egrep -v "​ANR2034E|ANS8001I"​ | sed 's/\ /|/g' > $TMPFILE.dirspace.tmp
 +#cat $TMPFILE.dirspace.tmp | while read i j k l m n
 +for line in $(cat $TMPFILE.dirspace.tmp)
 +do
 +  i=$(echo $line | cut -d','​ -f1)
 +  j=$(echo $line | cut -d','​ -f2)
 +  k=$(echo $line | cut -d','​ -f3- | cut -d'"'​ -f2 | sed -e '​s/​[A-Z]/​\ /g' -e '​s/​|//​g'​ | sed '​s/,//​g'​)
 +  l=$(echo $line | cut -d','​ -f3- | cut -d'"'​ -f2 | sed '​s/"//​g'​ | rev | cut -d'​|'​ -f1 | rev)
 +  m=$(echo $line | cut -d'"'​ -f3- | sed -e '​s/"//​g'​ -e '​s/,//​g'​ | cut -d'​|'​ -f1)
 +  n=$(echo $line | cut -d'"'​ -f3- | sed -e '​s/"//​g'​ -e '​s/,//​g'​ | rev | cut -d'​|'​ -f1 | rev)
 +  if [[ "​$l"​ == "​K"​ || "​$l"​ == "​B"​ || "​$k"​ == "​0"​ ]]
 +  then
 +    pct_used=0
 +  else
 +    case "​$l"​ in
 +       "​M"​) cap=$(echo $k | sed '​s/,//​g'​)
 +            cap1=$(echo "​scale=2;​$cap"​ | bc)
 +            cap=$(echo $cap1 | cut -d'​.'​ -f1)
 +            ;;
 +       "​G"​) cap=$(echo $k | sed '​s/,//​g'​)
 +            cap1=$(echo "​scale=2;​$cap*1024"​ | bc)
 +            cap=$(echo $cap1 | cut -d'​.'​ -f1)
 +            ;;
 +       "​T"​) cap=$(echo $k | sed '​s/,//​g'​)
 +            cap1=$(echo "​scale=2;​$cap*1024*1024"​ | bc)
 +            cap=$(echo $cap1 | cut -d'​.'​ -f1)
 +            ;;
 +       "​P"​) cap=$(echo $k | sed '​s/,//​g'​)
 +            cap1=$(echo "​scale=2;​$cap*1024*1024*1024"​ | bc)
 +            cap=$(echo $cap1 | cut -d'​.'​ -f1)
 +            ;;
 +    esac
 +    case "​$n"​ in
 +       "​B"​) used=0
 +            ;;
 +       "​K"​) used=0
 +            ;;
 +       "​M"​) used=$(echo $m | sed '​s/,//​g'​)
 +            used1=$(echo "​scale=2;​$used"​ | bc)
 +            used=$(echo $used1 | cut -d'​.'​ -f1)
 +            ;;
 +       "​G"​) used=$(echo $m | sed '​s/,//​g'​)
 +            used1=$(echo "​scale=2;​$used*1024"​ | bc)
 +            used=$(echo $used1 | cut -d'​.'​ -f1)
 +            ;;
 +       "​T"​) used=$(echo $m | sed '​s/,//​g'​)
 +            used1=$(echo "​scale=2;​$used*1024*1024"​ | bc)
 +            used=$(echo $used1 | cut -d'​.'​ -f1)
 +            ;;
 +       "​P"​) used=$(echo $m | sed '​s/,//​g'​)
 +            used1=$(echo "​scale=2;​$used*1024*1024*1024"​ | bc)
 +            used=$(echo $used1 | cut -d'​.'​ -f1)
 +            ;;
 +    esac
 +    pct_used1=$(echo "​scale=2;​100*(1-($used/​$cap))"​ | bc)
 +    pct_used=$(echo $pct_used1 | cut -d'​.'​ -f1)
 +    if [ "​$pct_used"​ == ""​ ]
 +    then
 +      pct_used=0
 +    fi
 +  fi
 +  if [[ "​$pct_used"​ -gt "​${alert_dispace_fs[1]}"​ ]]
 +  then
 +    NAGIOSTAG=2
 +  else
 +    if [[ "​$pct_used"​ -gt "​${alert_dispace_fs[0]}"​ ]]
 +    then
 +      NAGIOSTAG=1
 +    else
 +      NAGIOSTAG=0
 +    fi
 +  fi
 +  echo "​TD;​$NAGIOSTAG;​$TAG;​$i;​$j;​$k|$l;​$m|$n;​${pct_used}|%"​ | sed 's/\ //g' >> $TMPFILE.dirspace
 +done
 +cp $TMPFILE.dirspace $TMPFILE.dirspace1
 +rm $TMPFILE.dirspace.tmp
 +
 +# Add 09-2019
 +echo "​TH;​4;​TAG;​STGPOOL_NAME;​DIR_NAME;​TOTAL_SPACE_MB;​FREE_SPACE_MB;​%USED"​ > $TMPFILE.dirspace
 +$DSMADMC $OPT_COMMA $OPT_DATAONLY "​select * from STGPOOL_DIRS"​ | egrep -v "​ANR2034E|ANS8001I"​ | awk -F','​ '​{print $1","​$2","​$6","​$5}'​ > $TMPFILE.dirspace.tmp
 +for line in $(cat $TMPFILE.dirspace.tmp)
 +do
 +  i=$(echo $line | cut -d','​ -f1)
 +  j=$(echo $line | cut -d','​ -f2)
 +  k=$(echo $line | cut -d','​ -f3)
 +  l=$(echo $line | cut -d','​ -f4)
 +  pct_used=$(echo "​scale=2;​100*(1-($l/​$k))"​ | bc)
 +  pct_used1=$(echo ${pct_used} | cut -d'​.'​ -f1)
 +  if [ "​$pct_used1"​ == ""​ ]
 +  then
 +    pct_used=0
 +  fi
 +  if [[ "​$pct_used1"​ -gt "​${alert_dispace_fs[1]}"​ ]]
 +  then
 +    NAGIOSTAG=2
 +  else
 +    if [[ "​$pct_used1"​ -gt "​${alert_dispace_fs[0]}"​ ]]
 +    then
 +      NAGIOSTAG=1
 +    else
 +      NAGIOSTAG=0
 +    fi
 +  fi
 +  echo "​TD;​$NAGIOSTAG;​$TAG;​$i;​$j;​$k;​$l;​${pct_used}|%"​ >> $TMPFILE.dirspace
 +done
 +echo >> $TMPFILE.dirspace1
 +cat $TMPFILE.dirspace >> $TMPFILE.dirspace1
 +mv $TMPFILE.dirspace1 $TMPFILE.dirspace
 +rm $TMPFILE.dirspace.tmp
 +
 +# Add 10-2015
 +echo "​TH;​4;​TAG;​STGPOOL_NAME;​STGPOOL_SIZE_GB"​ >> $TMPFILE.stgpool_occ
 +$DSMADMC $OPT_COMMA $OPT_DATAONLY "​select stgpool_name,​sum(reporting_mb)/​1024 from occupancy group by stgpool_name"​ | sed '​s/,/;/​g'​ | sed 's/\ /\|/g' | egrep -v "​ANR2034E|ANS8001I"​ > $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;​NEXTSTGPOOL;​DEDUPLICATE;​EST_CAPACITY_MB;​PCT_UTILIZED;​PCT_LOGICAL;​MAXSCRATCH;​NUMSCRATCHUSED;​SPACE_SAVED_MB;​DEDUP_RATE(%);​DEDUP_RATIO"​ > $TMPFILE.stgpool_stats
 +$DSMADMC $OPT_COMMA $OPT_DATAONLY "​select STGPOOL_NAME,​POOLTYPE,​DEVCLASS,​NEXTSTGPOOL,​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
 +  DEVCLASS=$(echo $line | cut -d';'​ -f3)
 +  NEXTSTGPOOL=$(echo $line | cut -d';'​ -f4)
 +  PCTUTIL=$(echo $line | cut -d';'​ -f7)
 +  MAXSCRATCH=$(echo $line | cut -d';'​ -f9)
 +  MAXSCRATCHUSED=$(echo $line | cut -d';'​ -f10)
 +  SAVEDMB=$(echo $line | cut -d';'​ -f11)
 +  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 "​${alert_stg_maxscr[1]}"​ ]
 +      then
 +        NAGIOSTAG=2
 +      else
 +        if [ $pctused -gt "​${alert_stg_maxscr[0]}"​ ]
 +        then
 +          NAGIOSTAG=1
 +        else
 +          NAGIOSTAG=0
 +        fi
 +      fi
 +    fi
 +  fi
 +  if [[ "​$SAVEDMB"​ -ne ""​ ]]
 +  then
 +    ESTCAPMB=$(echo $line | cut -d';'​ -f6)
 +    STOREDMB=$(echo "​scale=2;​$ESTCAPMB*$PCTUTIL/​100"​ | bc)
 +    PCTDEDUP=$(echo "​scale=1;​100*$SAVEDMB/​($SAVEDMB+$STOREDMB)"​ | bc)
 +    RATIO=$(echo "​scale=1;​($SAVEDMB+$STOREDMB)/​$STOREDMB"​ | bc)
 +    end=$(echo "​$PCTDEDUP;​$RATIO"":​1"​)
 +  else
 +    end=$(echo ";"​)
 +  fi
 +  # Check usage of a stg type DISK or CONTAINER
 +  if [[ "​$DEVCLASS"​ == "​DISK"​ || "​$DEVCLASS"​ == ""​ ]]
 +  then
 +    if [ "​$NEXTSTGPOOL"​ = ""​ ]
 +    then
 +      pctused=$(echo $PCTUTIL | cut -d'​.'​ -f1)
 +      if [ "​$pctused"​ -gt "​${alert_stg_disk[1]}"​ ]
 +      then
 +        NAGIOSTAG=2
 +      else
 +        if [ "​$pctused"​ -gt "​${alert_stg_disk[0]}"​ ]
 +        then
 +          NAGIOSTAG=1
 +        else
 +          NAGIOSTAG=0
 +        fi
 +      fi
 +    fi
 +  fi
 +  echo "​TD;​$NAGIOSTAG;​$TAG;​$line;​$end"​ >> $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 2>/​dev/​null)
 +do
 +  if [ $(echo $line | cut -d';'​ -f2) -le "​${alert_libr_maxscr[1]}"​ ]
 +  then
 +    NAGIOSTAG=2
 +  else
 +    if [ $(echo $line | cut -d';'​ -f2) -le "​${alert_libr_maxscr[0]}"​ ]
 +    then
 +      NAGIOSTAG=1
 +    else
 +      NAGIOSTAG=0
 +    fi
 +  fi
 +  echo "​TD;​$NAGIOSTAG;​$TAG;​$line"​ >> $TMPFILE.scratch
 +done
 +rm $TMPFILE.scratch1 2>/​dev/​null
 +
 +for type in $(cat $TMPFILE.paths1 2>/​dev/​null | 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 2>/​dev/​null
 +
 +for line in $(cat $TMPFILE.drives1 2>/​dev/​null)
 +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 2>/​dev/​null | 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;​STGPOOL_NAME;​ACCESS;​WRITE_ERRORS;​READ_ERRORS"​ > $TMPFILE.volume_error
 +$DSMADMC $OPT_COMMA $OPT_DATAONLY "​select VOLUME_NAME,​STGPOOL_NAME,​ACCESS,​WRITE_ERRORS,​READ_ERRORS from volumes where ACCESS<>'​READWRITE'​ and ACCESS<>'​OFFSITE'"​ | sed '​s/,/;/​g'​ | sed 's/\ /|/g' | egrep -iv "​found|return"​ | grep -v '​^/'​ | sed "​s/​^/​TD;​2;​$TAG;/"​ >> $TMPFILE.volume_error
 +$DSMADMC $OPT_COMMA $OPT_DATAONLY "​select VOLUME_NAME,​STGPOOL_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"​ | grep -v '​^/'​ | sed "​s/​^/​TD;​1;​$TAG;/"​ >> $TMPFILE.volume_error
 +$DSMADMC $OPT_COMMA $OPT_DATAONLY "​select CONTAINER_NAME,​STGPOOL_NAME,​STATE from containers where STATE<>'​AVAILABLE'​ and TYPE<>'​CLOUD'"​ | sed '​s/,/;/​g'​ | sed 's/\ /|/g' | egrep -iv "​found|return"​ | sed "​s/​^/​TD;​1;​$TAG;/"​ | sed "​s/​$/;​0;​0/"​ >> $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 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;/"​ | egrep -v "​ANR2034E|ANS8001I"​ >> $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 '​^;'​ | egrep -v "​ANR2034E|ANS8001I"​ > $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_schedule_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 | sed '​s/​|//​g'​)
 +  if [ "​$status"​ == "​YES"​ ]
 +  then
 +    NAGIOSTAG=0
 +  else
 +    NAGIOSTAG=2
 +  fi
 +  echo "​TD;​$NAGIOSTAG;​$TAG;​$line"​ >> $TMPFILE.sum_admin
 +done
 +
 +rm $TMPFILE.sum_admin.tmp
 +}
 +
 +#​----------------------------
 +check_expired_filespaces ()
 +{
 +echo "# Collect expired filespaces"​
 +if [ ${filespace_stat} == "​no"​ ]
 +then
 +  $DSMADMC $OPT_COMMA $OPT_DATAONLY "​select NODE_NAME,​FILESPACE_NAME,​FILESPACE_ID,​FILESPACE_TYPE,​CAPACITY,​PCT_UTIL,​to_char(char(BACKUP_END),'​YYYY-MM-DD'​) as LAST_ACCESS from filespaces where node_name<>''​ order by node_name"​ | sed '​s/,/;/​g'​ | sed 's/\ /|/g' | sed -e '​s/"//​g'​ -e "​s/'//​g"​ | sed -e '​s/​\\a/​\\A/​g'​ -e '​s/​\\b/​\\B/​g'​ -e '​s/​\\c/​\\C/​g'​ -e '​s/​\\f/​\\F/​g'​ -e '​s/​\\n/​\\N/​g'​ -e '​s/​\\r/​\\R/​g'​ -e '​s/​\\t/​\\T/​g'​ -e '​s/​\\v/​\\V/​g'​ | sed -e '​s/​^/"/'​ -e "​s/​^/'/"​ | sed -e '​s/​$/"/'​ -e "​s/​$/'/"​ | egrep -v "​ANR2034E|ANS8001I"​ > $TMPFILE.filespaces_last_access.tmp
 +
 +  $DSMADMC $OPT_COMMA $OPT_DATAONLY "​select NODE_NAME,​FILESPACE_ID,​sum(REPORTING_MB) as MB,​sum(NUM_FILES) as nb_files from occupancy group by NODE_NAME,​FILESPACE_ID order by NODE_NAME"​ | sed '​s/,/;/​g'​ | sed 's/\ /|/g' | egrep -v "​ANR2034E|ANS8001I"​ > $TMPFILE.occupancy_per_filespace.tmp
 +
 +  echo "​TH;​4;​TAG;​NODE_NAME;​FILESPACE_NAME;​FILESPACE_ID;​FILESPACE_TYPE;​CAPACITY;​PCT_UTIL;​LAST_ACCESS;​REPORTING_SIZE_MB;​NB_FILES"​ > $TMPFILE.filespaces_last_access
 +
 +  for line in $(cat $TMPFILE.filespaces_last_access.tmp)
 +  do
 +    end=$(echo $line | cut -d';'​ -f7 | sed -e '​s/"//​g'​ -e "​s/'//​g"​)
 +    node=$(echo $line | cut -d';'​ -f1 | sed -e '​s/"//​g'​ -e "​s/'//​g"​)
 +    fsid=$(echo $line | cut -d';'​ -f3)
 +    grep "​^$node;​$fsid;"​ $TMPFILE.occupancy_per_filespace.tmp > /dev/null 2>&1
 +    if [ $? -eq 0 ]
 +    then
 +      occ=$(grep "​^$node;​$fsid;"​ $TMPFILE.occupancy_per_filespace.tmp | cut -d';'​ -f3,4)
 +    else
 +      occ="​EMPTY;"​
 +    fi
 +    node_exception=$(echo ${node_expired} | sed -e '​s/​^/;/'​ -e '​s/,/;​\|;/​g'​ -e '​s/​$/;/'​)
 +    if [ $(echo ";​$node;"​ | egrep "​${node_exception}"​ > /​dev/​null;​echo $?) -eq 0 ]
 +    then
 +      NAGIOSTAG=4
 +    else
 +      if [[ "​$end"​ < "​$EXPIRED"​ ]]
 +      then
 +        NAGIOSTAG=1
 +      else
 +        NAGIOSTAG=0
 +      fi
 +    fi
 +    echo "​TD;​$NAGIOSTAG;​$TAG;​$line;​$occ"​ | sed -e '​s/"//​g'​ -e "​s/'//​g"​ >> $TMPFILE.filespaces_last_access
 +  done
 +
 +  rm $TMPFILE.filespaces_last_access.tmp $TMPFILE.occupancy_per_filespace.tmp
 +fi
 +}
 +
 +#​----------------------------
 +check_expired_nodes ()
 +{
 +echo "# Collect expired nodes"
 +$DSMADMC $OPT_COMMA $OPT_DATAONLY "​SELECT node_name,​domain_name,​platform_name,​client_os_level,​TRIM(CHAR(client_version))||'​.'​||TRIM(CHAR(client_release))||'​.'​||TRIM(CHAR(client_level))||'​-'​||TRIM(CHAR(client_sublevel)) as TSM_Version,​DATE(lastacc_time) AS LASTACC_TIME,​TCP_NAME,​TCP_ADDRESS FROM nodes order by node_name"​ | sed '​s/,/;/​g'​ | sed 's/\ /|/g' | egrep -v "​ANR2034E|ANS8001I"​ > $TMPFILE.nodes_last_access.tmp
 +
 +for line in $(cat $TMPFILE.nodes_last_access.tmp)
 +do
 +  node=$(echo $line | cut -d';'​ -f1 | sed -e "​s/​^/'/"​ -e "​s/​$/'/"​)
 +  nb_sched=$($DSMADMC $OPT_COMMA $OPT_DATAONLY "​select count(*) from associations where node_name=$node"​)
 +  echo "​$line;​${nb_sched}"​ >> $TMPFILE.nodes_last_access.tmp1
 +done
 +mv $TMPFILE.nodes_last_access.tmp1 $TMPFILE.nodes_last_access.tmp
 +
 +echo "​TH;​4;​TAG;​NODE_NAME;​DOMAIN_NAME;​PLATFORM_NAME;​CLIENT_OS_LEVEL;​TSM_LEVEL;​LAST_ACCESS;​TCP_NAME;​TCP_ADDRESS;​NB_SCHEDULE"​ > $TMPFILE.nodes_last_access
 +
 +for line in $(cat $TMPFILE.nodes_last_access.tmp)
 +do
 +  end=$(echo $line | cut -d';'​ -f6)
 +  node=$(echo $line | cut -d';'​ -f1)
 +  node_exception=$(echo ${node_expired} | sed -e '​s/​^/;/'​ -e '​s/,/;​\|;/​g'​ -e '​s/​$/;/'​)
 +  if [ $(echo ";​$node;"​ | egrep "​${node_exception}"​ > /​dev/​null;​echo $?) -eq 0 ]
 +  then
 +    NAGIOSTAG=4
 +  else
 +    if [[ "​$end"​ < "​$EXPIRED"​ ]]
 +    then
 +      NAGIOSTAG=1
 +    else
 +      NAGIOSTAG=0
 +    fi
 +  fi
 +  echo "​TD;​$NAGIOSTAG;​$TAG;​$line"​ >> $TMPFILE.nodes_last_access
 +done
 +
 +rm $TMPFILE.nodes_last_access.tmp
 +}
 +
 +#​----------------------------
 +repl_status ()
 +{
 +echo "# Collect replication status"​
 +# count the number of filespaces for node where replication is enabled, and compare to latest 2 days success replicated filespaces
 +echo "​TH;​4;​TAG;​Node_name;​Num_filespace;​Num_replicated_filespaces"​ > $TMPFILE.replication
 +$DSMADMC $OPT_COMMA $OPT_DATAONLY "​select node_name from nodes where REPL_STATE='​ENABLED'​ and REPL_MODE='​SEND'"​ | egrep -v "​ANR2034E|ANS8001I"​ | sed '/​^$/​d'​ > $TMPFILE.repl1
 +$DSMADMC $OPT_COMMA $OPT_DATAONLY "​select node_name,​count(*) from filespaces group by node_name"​ > $TMPFILE.repl2
 +$DSMADMC $OPT_COMMA $OPT_DATAONLY "​select NODE_NAME,​FSID,​START_TIME,​COMP_STATE from REPLICATIONVIEW where COMP_STATE='​COMPLETE'"​ | egrep "​$YESTERDAY|$TODAY"​ > $TMPFILE.repl3
 +
 +for node in $(cat $TMPFILE.repl1)
 +do
 +  node1=$(echo "'"​$node"'"​)
 +  nb=$(grep "​^$node,"​ $TMPFILE.repl2 | cut -d','​ -f2)
 +  if [ "​$nb"​ == ""​ ]
 +  then
 +    nb=0
 +  fi
 +  nb1=$(grep "​^$node,"​ $TMPFILE.repl3 | cut -d','​ -f1,2 | sort -u | wc -l)
 +  if [ "​$nb1"​ == ""​ ]
 +  then
 +    nb1=0
 +  fi
 +  if [ "​$nb"​ = "​$nb1"​ ]
 +  then
 +    NAGIOSTAG=0
 +  else
 +    NAGIOSTAG=1
 +  fi
 +  echo "​TD;​$NAGIOSTAG;​TAG;​$node;​$nb;​$nb1"​ >> $TMPFILE.replication
 +done
 +
 +rm $TMPFILE.repl1 $TMPFILE.repl2 $TMPFILE.repl3 2>/​dev/​null
 +}
 +
 +#​----------------------------
 +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
 +tsmversion=$($DSMADMC $OPT_COMMA $OPT_DATAONLY "show versionhistory"​ | tail -1 | cut -d','​ -f2  | grep -v "​ANS8001I"​)
 +
 +echo '<​html>​
 +<​head>​
 +<meta http-equiv="​Content-Type"​ content="​text/​html;​ charset=utf-8">​
 +</​head>​
 +<​h1>​Spectrum Protect Report'​ $server $(date "​+%d-%m-%Y %H:​%M"​) version: $tsmversion '</​h1>​
 +<​body>​
 +<br>
 +<​h2>​TSM events</​h2>​
 +<br>
 +<table border="​1">​
 +<​tbody>'​
 +
 +for i in db_log last_backup_db_tsm admin volume_error scratch dirspace stgpool_stats paths drives client failed_vm backup_vm replication error total sum_admin stgpool_occ auditocc daily_backup-arch_per_node filespaces_last_access nodes_last_access
 +do
 +  nb_line=$(cat $TMPFILE.$i* 2>/​dev/​null | 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 ()
 +{
 +echo "# Copy to report folder"​
 +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 /​root/​scripts/​reports
 +  mv $htmlfile /​data/​reports
 +fi
 +}
 +
 +
 +#​----------------------------
 +send_email ()
 +{
 +echo "# Sending by email"
 +gzip -c $TMPFILE.full.error.$TODAY > /​root/​scripts/​reports/​q_act.$TODAY.gz
 +newname=$(echo $htmlfile | rev | cut -d'/'​ -f1 | rev)
 +if [[ $os == "​aix"​ ]]
 +then
 +  uuencode $htmlfile $newname | mailx -r "​$tsmemailsender"​ -s "​$subject"​ $tsmemailreceiver
 +else
 +  if [[ $os == "​linux"​ ]]
 +  then
 +    echo | mailx -a "​$htmlfile"​ -r "​$tsmemailsender"​ -s "​$subject"​ $tsmemailreceiver
 +    echo | mailx -a /​root/​scripts/​reports/​q_act.$TODAY.gz -r "​$tsmemailsender"​ -s "​$subject logs" myemail@pt.lu
 +  fi
 +fi
 +}
 +
 +#############################​
 +# Main
 +#############################​
 +main ()
 +{
 +date
 +durb=$(date +%s)
 +
 +for server in $(echo $tsmservers)
 +do
 +  echo "​********Collecting info on TSM server: $server"​
 +  mkdir -p $tmplog
 +  DSMADMC=$(echo "​$DSMADMC1 -se=$server"​)
 +  rm  $TMPFILE* 2> /dev/null
 +  htmlfile=$logpath/​tsm_daily_report_${TODAY}_${server}.html
 +  if [ $(timeout 5 $DSMADMC "q db" > /dev/null 2>&​1;​ echo $?) -ne 0 ]
 +  then
 +    subject=$(echo "TSM daily report $TODAY from location $server DOWN !!!")
 +    echo "​TH;​2;​TAG;​Server|Down!!!!"​ > $TMPFILE.db_log
 +    echo "​TD;​2;​TAG;​Unable|to|contact|the|server."​ >> $TMPFILE.db_log
 +  else
 +    subject=$(echo "TSM daily report $TODAY from location $server"​)
 +    d1=$(date +%s)
 +    db_log
 +    d2=$(date +%s); echo "$(( (d2 - d1) )) seconds";​d1=$(date +%s)
 +    last_backup_db_tsm
 +    d2=$(date +%s); echo "$(( (d2 - d1) )) seconds";​d1=$(date +%s)
 +    backup_vm
 +    d2=$(date +%s); echo "$(( (d2 - d1) )) seconds";​d1=$(date +%s)
 +    error_vm_backup
 +    d2=$(date +%s); echo "$(( (d2 - d1) )) seconds";​d1=$(date +%s)
 +    read_events
 +    d2=$(date +%s); echo "$(( (d2 - d1) )) seconds";​d1=$(date +%s)
 +    check_library
 +    d2=$(date +%s); echo "$(( (d2 - d1) )) seconds";​d1=$(date +%s)
 +    check_volume_error
 +    d2=$(date +%s); echo "$(( (d2 - d1) )) seconds";​d1=$(date +%s)
 +    auditocc
 +    d2=$(date +%s); echo "$(( (d2 - d1) )) seconds";​d1=$(date +%s)
 +    stgpool_stats
 +    d2=$(date +%s); echo "$(( (d2 - d1) )) seconds";​d1=$(date +%s)
 +    admin_schedule_status
 +    d2=$(date +%s); echo "$(( (d2 - d1) )) seconds";​d1=$(date +%s)
 +    daily_backuparch_per_node
 +    d2=$(date +%s); echo "$(( (d2 - d1) )) seconds";​d1=$(date +%s)
 +    check_expired_nodes
 +    d2=$(date +%s); echo "$(( (d2 - d1) )) seconds";​d1=$(date +%s)
 +    check_expired_filespaces
 +    d2=$(date +%s); echo "$(( (d2 - d1) )) seconds";​d1=$(date +%s)
 +    repl_status
 +    d2=$(date +%s); echo "$(( (d2 - d1) )) seconds";​d1=$(date +%s)
 +  fi
 +  convert_html $server 1> $htmlfile
 +  d2=$(date +%s); echo "$(( (d2 - d1) )) seconds"​
 +  send_email $server
 +  #​copy_to_apache
 +  rm $TMPFILE* 2>/​dev/​null
 +done
 +
 +dure=$(date +%s)
 +echo "Full duration: $(( (dure - durb) / 60 )) minutes"​
 +date
 +}
 +
 +mv -f $logname ${logname}.1
 +main > $logname 2>&1
 +</​code>​
 +
 +
 +|                        ​STGPOOL_NAME | CONTAINER1 | S3 | DISK01 |
 +|                            ​POOLTYPE | PRIMARY | PRIMARY | PRIMARY |
 +|                            ​DEVCLASS | | | DISK |
 +|                            ​STG_TYPE | DIRECTORY | CLOUD | DEVCLASS |
 +|                     EST_CAPACITY_MB | 25126572.0 | | 12288000.0 |
 +|                        ​PCT_UTILIZED | 40.6 | | 52.3 |
 +|                         PCT_LOGICAL | | | 100.0 |
 +|                          ​MAXSCRATCH | | | |
 +|                      ​NUMSCRATCHUSED | | | |
 +|                          ​COMPRESSED | YES | YES | |
 +|                         DEDUPLICATE | YES | YES | NO |
 +|             TOTAL_UNUSED_PENDING_MB | 482 G | 7,078 M | |
 +|                ​DEDUP_SPACE_SAVED_MB | 7254348 | 14192097 | |
 +|                 COMP_SPACE_SAVED_MB | 21609587 | 1689699 | |
 +|                      ​SPACE_SAVED_MB | 28863934 | 15881795 | |
 +|                           ENCRYPTED | Yes | Yes | |
 +|                       PCT_ENCRYPTED | 100.00 | 100.00 | |
 +|                ​TOTAL_CLOUD_SPACE_MB | | 11025099 | |
 +|                 USED_CLOUD_SPACE_MB | | 10391137 | |
 +|               LOCAL_EST_CAPACITY_MB | | 0.0| |
 +|                  ​LOCAL_PCT_UTILIZED | | 0.0| |
  
tsm/tsm_report_script.1618816756.txt.gz ยท Last modified: 2021/04/19 09:19 by manu