Skip to content
Snippets Groups Projects
Select Git revision
  • 9f2fc595d6ec02ec526ced80268805063f419d97
  • master default protected
  • simple-task/7248-eol-check-add-node-22
  • 6877_check_iml_deployment
4 results

check_iml_backup_server

Blame
  • check_iml_backup_server 5.33 KiB
    #!/bin/bash
    # ======================================================================
    #
    # Check IML BACKUP SERVER
    #
    # requires access to storage_helper.sh
    # in /opt/imlbackup/server/
    #
    # ----------------------------------------------------------------------
    # 2020-07-27  v0.x  <axel.hahn@iml.unibe.ch>
    # 2023-12-20  v0.2  <axel.hahn@iml.unibe.ch>
    # 2023-12-21  v1.0  <axel.hahn@iml.unibe.ch>  first version
    # 2023-12-21  v1.1  <axel.hahn@iml.unibe.ch>  Update help text
    # 2024-03-22  v1.2  <axel.hahn@iml.unibe.ch>  Update grep for backup via restic rest
    # ======================================================================
    
    
    . $(dirname $0)/inc_pluginfunctions
    export self_APPVERSION=1.2
    
    sInstalldir=/opt/imlbackup/server
    sScript=storage_helper.sh
    sMode=
    
    # ----------------------------------------------------------------------
    # FUNCTIONS
    # ----------------------------------------------------------------------
    
    # show help
    function showHelp(){
        local _self; _self=$(basename $0)
        cat <<EOF
    $( ph.showImlHelpHeader )
    
    Show status of backup server.
    You can get the count of connections or the status of server backup.
    
    See https://os-docs.iml.unibe.ch/iml-backup-server/
    
    SYNTAX:
    
      $_self [-d DIRECTORY] -m MODE
    
    OPTIONS:
    
      -h, --help
          show this help.
    
      -d, --dir PATH
          set installation dir of iml deployment to find its check skript
          default dir: ${sInstalldir}
          script: ${sInstalldir}/${sScript}
    
      -m, --mode MODE
          mode: set type of result; one of status|backupstatus
            backupstatus  status of backup sets of all servers
            status        count of connected servers
    
    EXAMPLE:
    
      $_self -m status 
      $_self -m backupstatus 
    
    EOF
    }
    
    # get all server entries with a given status
    # param  string  status character in 1st column; one of .|?|D|E
    # param  string  text to parse
    function _getServerOfStatus(){
        local _key="$1"
        local _data="$2"
        # grep "$_key .*| [0-9].* |" <<< "$_data"
        grep "$_key .*/" <<< "$_data"
    }
    
    # get count of servers with a given status
    # param  string  status character in 1st column; one of .|?|D|E
    # param  string  text to parse
    function _getStatusCount(){
        _getServerOfStatus "$1" "$2" | wc -l
    }
    
    # ----------------------------------------------------------------------
    # MAIN
    # ----------------------------------------------------------------------
    
    # --- check param -h
    while [[ "$#" -gt 0 ]]; do case $1 in
        -h|--help)      showHelp; exit 0;;
        -d|--dir)       sInstalldir=$2; shift ;shift;;
        -m|--mode)      sMode=$2;
                        shift ;shift
                        if ! grep -E "^(status|backupstatus)$" <<< "$sMode" >/dev/null; then
                            ph.abort "ERROR: unknown mode [$sMode]."
                        fi
                        ;;
        *) echo "ERROR: Unknown parameter: $1"; showHelp; exit 1;
    esac; done
    
    if [ -z "$sMode" ]; then
        ph.abort "ERROR: The mode was not set. Use parameter -m for it. Get help with -h."
    fi
    
    myscript="$sInstalldir/$sScript"
    
    if [ ! -x "$myscript" ]; then
        ph.abort "UNKNOWN: $myscript is not available / executable. Use -d to fix the installation dir. Get help with -h."
    fi
    
    # --- read data + remove ansii colors
    data=$( "$myscript" "$sMode" | sed 's/\x1B\[[0-9;]\{1,\}[A-Za-z]//g' )
    
    case "$sMode" in
        "backupstatus")
            typeset -i iTotal;   iTotal=$(  grep "^total : " <<< "$data" | cut -f 2 -d ":" | awk '{ print $1 }' )
            typeset -i iErrors;  iErrors=$( grep "^errors: " <<< "$data" | cut -f 2 -d ":")
    
            typeset -i iOK;         iOK=$(         _getStatusCount "\." "$data" )
            typeset -i iNotStarted; iNotStarted=$( _getStatusCount "\?" "$data")
            typeset -i iDisable;    iDisable=$(    _getStatusCount "D"  "$data" )
            typeset -i iRunning;    iRunning=$(    _getStatusCount "R"  "$data")
    
            if [ $iErrors -gt 0 ]; then
                ph.setStatus critical
            fi
            if [ $iNotStarted -eq $iTotal ]; then
                ph.setStatus unknown
            fi
            ph.status "Server Backups - $iTotal servers in backup - $iErrors errors - $iDisable disbled - $iRunning running"
            echo "List of server backups grouped by status (non-OK only)"
            echo
            (
                # draw 1st line with table header
                echo "$data" | grep "server.*start.*end"
                echo
    
                # show servers grouped by status
                for mystatus in E D R "\?"
                do
                    srvlist=$( _getServerOfStatus "$mystatus" "$data" )
                    test -n "$srvlist" && ( echo "$srvlist"; echo )
                done
                echo "$data" | grep "server.*start.*end"
                echo
            ) | tr '|' ':'
    
            ph.perfadd "notstarted"   "${iNotStarted}"   "" "" 0 $iTotal
            ph.perfadd "disabled"     "${iDisable}"      "" "" 0 $iTotal
            ph.perfadd "ok"           "${iOK}"           "" "" 0 $iTotal
            ph.perfadd "running"      "${iRunning}"      "" "" 0 $iTotal
            ph.perfadd "error"        "${iErrors}"       "" "" 0 $iTotal
            ;;
        "status")
            typeset -i iRunning; iRunning=$( grep "STATUS" <<< "$data" | cut -f 2 -d " ")
            typeset -i iMax;     iMax=$(     grep "STATUS" <<< "$data" | cut -f 8 -d " " | tr -d '.')
    
            # --- status output
            ph.status "Backups running: $iRunning (max $iMax)"
            # echo "$data"
    
            ph.perfadd "running"   "${iRunning}"   "" "" 0 $iMax
            ;;
    esac
    
    ph.exit
    
    # ----------------------------------------------------------------------