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

check_ceph_status

Blame
  • check_requirements 5.85 KiB
    #!/bin/bash
    # ======================================================================
    #
    # NAGIOS CLIENT CHECK :: check requirements
    #
    # Check if a list requirements regarding processes and network 
    # connections do exist 
    # ----------------------------------------------------------------------
    #
    # ah=axel.hahn@unibe.ch
    #
    # 2023-02-13  v1.0  ah  initial version with check for processes, tcp/ udp
    # 2023-02-15  v1.1  ah  add label
    # 2024-06-07  v1.2  ah  use iml help and add link to docs
    # ======================================================================
    
    
    . "$( dirname $0 )/inc_pluginfunctions"
    
    self_APPVERSION=1.2
    
    self=$( basename $0 )
    
    typeset -i VERBOSE=0
    
    OUT=
    
    typeset -i ADDHEADER=1
    typeset -i COUNT=0
    typeset -i COUNTOK=0
    typeset -i COUNTERR=0
    
    PROCESSES=
    
    # ----------------------------------------------------------------------
    # functions
    # ----------------------------------------------------------------------
    
    # show help
    function showHelp(){
            cat <<EOH
    $( ph.showImlHelpHeader )
    
    Check if a list requirements regarding processes and network 
    connections do exist.
    
    The check returns OK if all given requirements match.
    
    SYNTAX:
    $self [-h] [PARAMETERS]
    
    OPTIONS:
    
        -h|--help            show this help.
        -v|--verbose         show more data: processes and port numbers from
                             /etc/services; add it as first param
    
    PARAMETERS:
    
        -c|--connect TYPE TARGET PORT        
                             check if connect to a server to a given port
                             is reachable
                             TYPE    string  one of tcp|udp
                             TARGET  string  target host
                             PORT    int     port number
        -l|--label STRING    add label to divide the output in multiple sections
        -p|--process STRING  check if a process with given regex exists in the
                             output of 'ps aux'
        -t|--tcp PORT        check if connect on local tcp port is reachable;
                             This is a shortcut for '-c tcp localhost PORT'
    
    The parameters can be repeated multiple times. Checks will be executed in
    the given order.
    
    EXAMPLES
    
    $self -p httpd -p mysqld -t 22 -t 80 -t 443 -t 3306
         Check if
         - a process httpd and a process mysqld exist
         - localhost listens to ports 22, 80, 443 and 3306
    
    $self -l "webservice" -p httpd -t 80 -t 443 -l "database" -p mysqld -t 3306
         Use output with multiple sections
    
    EOH
    }
    
    # show a label to divide the output in multiple sections
    function showLabel(){
            ADDHEADER=1
            newline
            OUT+="========== $1"
            newline;
            
    }
    
    # show a line with a result
    # param  string  status, eg. OK|ERROR
    # param  string  type, eg. process|connection
    # param  string  result
    function addOutput(){
            if [ $ADDHEADER -ne 0 ]; then
                    ADDHEADER=0
                    newline
                    addOutput STATUS TYPE RESULT
                    newline
                    # addOutput ------ ---- ------
                    # newline
            fi
            OUT+=$(printf "%-7s %-11s %s\n" "$1" "$2" "$3")
    }
    
    function addVerbose(){
            if [ $VERBOSE -gt 0 ]; then
                    newline
                    OUT+="$(echo """$*""" | sed 's#^#        > #g')"
                    newline
            fi
    }
    
    # helper function: add new line in $OUT
    function newline(){
            OUT+="
    "
    }
    
    # check in process list
    # param  string  regex to search for in output of "ps aux"
    function chkProcess(){
            local label="$1"
            local found;
    
            test -z "$PROCESSES" && PROCESSES=$( ps aux )
            COUNT+=1
            found=$( echo "$PROCESSES" | grep -v "grep" | grep -v "$self" | grep -E "$label" )
            if [ -z "$found" ]; then
                    COUNTERR+=1
                    ph.setStatus critical
                    addOutput "ERROR" "process" "$label was not found"
            else
                    COUNTOK+=1
                    addOutput "OK" "process" "$label ($( echo """$found""" | wc -l ) x)"
                    addVerbose "$found"
            fi
            newline
    }
    
    # check connection
    # param  string  type: one of tcp|udp
    # param  string  target: a servername eg. localhost or www.example.com
    # param  integer port number to connect
    function chkConnection(){
            local type="$1"     # tcp | udp
            local target="$2"   # servername
            local port="$3"     # port number
            
            COUNT+=1
            if ! echo "$type/$target/$port" | grep -E "^(tcp|udp)/[a-z][a-z0-9\.\-]*/[1-9][0-9]*$" >/dev/null 2>&1; then
                    COUNTERR+=1
                    OUT+="ERROR  syntax error detected - verify params for port check; type=$type (one of tcp|udp) target=$target (servername to connect) port=$port"
            else
                    if (>/dev/$type/$target/$port) 2>/dev/null; then
                            COUNTOK+=1
                            addOutput "OK" "connection" "$type to $target on port $port"
                    else
                            COUNTERR+=1
                            ph.setStatus critical
                            addOutput "ERROR" "connection" "$type to $target on port $port FAILED"
                    fi
                    addVerbose "$( grep """ $port/$type""" /etc/services )"
            fi
            newline
    }
    
    # ----------------------------------------------------------------------
    # MAIN
    # ----------------------------------------------------------------------
    
    if [ "$#" -eq 0 ]; then
            showHelp;
            exit 1
    fi
    
    # parse params
    while [[ "$#" -gt 0 ]]; do case $1 in
        -c|--connect)   chkConnection "$2" "$3" "$4"; shift;shift;shift;shift ;; 
        -l|--label)     showLabel "$2"; shift;shift ;; 
        -p|--process)   chkProcess "$2";shift 2;;
        -h|--help)      showHelp; exit 0;;
        -t|--tcp)       chkConnection tcp localhost "$2"; shift;shift ;; 
        -v|--verbose)   VERBOSE=1; shift;;
        *) echo "ERROR: Unknown parameter: $1"; showHelp; exit 1;
    esac; done
    
    ph.status "$COUNT Requirement checks - errors: $COUNTERR"
    echo "$OUT"
    ph.exit
    
    # ----------------------------------------------------------------------