Logoj0ke.net Open Build Service > Projects > server:monitoring > nagios-plugins-xenserver > check_disks_xcp
Sign Up | Log In

File check_disks_xcp of Package nagios-plugins-xenserver

 
1
#!/bin/bash
2
# Author: Marek Rzepala <Marek.Rzepala@internetx.com> 
3
# Version: 1.01
4
# Last changed: 12.11.2020
5
# Upstream URL: https://gitlab.muc.internetx.com/p-s/nagios/check_disks_xcp
6
7
### CHANGE THIS IF NEEDED
8
CRIT=90
9
WARN=80
10
TMP_FILE="/tmp/disks_host_"
11
### CHANGE THIS IF NEEDED
12
13
#exit without sr type argument
14
if [ $# -ne 1 ]; then
15
        echo ""
16
        echo $0
17
        echo "### usage: "
18
        echo "    $0 [ valid sr type; showtypes for help ]" 
19
        exit 1
20
fi
21
22
# save sr uuids in some tmp files, which file names are based on hostnames reported from xe
23
# also dont use host attribute on lvmoiscsi; but really this should be a check whether or not sr type also has the host=<shared> property
24
if [ $1 == lvmoiscsi ]; then
25
    xe host-list params=name-label | sort | awk '{print $NF}' | sed -r '/^\s*$/d' | while read line; do xe sr-list type=$1 params=uuid | sed -r '/^\s*$/d' > "$TMP_FILE""$line"; done
26
else
27
    if [ $1 == showtypes ]; then
28
        xe host-list params=name-label | sort | sed -r '/^\s*$/d' | while read line; do xe sr-list params=type; done | sort | uniq | sed -r '/^\s*$/d' && exit 0
29
    else
30
        xe host-list params=name-label | sort | awk '{print $NF}' | sed -r '/^\s*$/d' | while read line; do xe sr-list host=$line type=$1 params=uuid | sed -r '/^\s*$/d' > "$TMP_FILE"$line ; done
31
    fi
32
fi
33
no_hosts=$( ls -1 "$TMP_FILE"* | wc -l )
34
35
for f in "$TMP_FILE"*
36
do
37
# create some variables for further use 
38
# append different characters based on conditions
39
    hostname=$(echo "$f" | sed "s#$TMP_FILE##g" | sed  "s#-#_#g")
40
    cat $f | awk '{print $NF}' | while read line2; do 
41
        physical_size=$(xe sr-list uuid=$line2 params=physical-size | awk '{print $NF}')
42
        physical_usage=$(xe sr-list uuid=$line2 params=physical-utilisation | awk '{print $NF}')
43
        sr_name=$(xe sr-list uuid=$line2 params=name-label | awk -F ":" '{print $NF}')
44
        is_sr_shared=$([[ -z $( xe sr-list uuid=$line2 params=host | grep shared) ]] && echo 0 || echo 1)
45
        if [[ $physical_size -eq 0 ]]; then 
46
            disk_usage=$(echo 0)
47
        else
48
            disk_usage=$( echo "scale=3; $( echo $physical_usage) / $( echo $physical_size) * 100" | bc | awk '{print ($0-int($0)<0.499)?int($0):int($0)+1}')
49
        fi
50
        if [[ $disk_usage -ge CRIT ]]; then
51
            if [[ $is_sr_shared -eq 1 ]]; then
52
#               echo "1CR SHARED on $line2 - $disk_usage"%" storage usage on"$sr_name" ":" $hostname" >> $f
53
                echo "1CR SHARED on $line2 - $disk_usage"%" storage usage on"$sr_name"" >> $f
54
            else 
55
#               echo "1CR on $line2 - $disk_usage"%" storage usage on"$sr_name" ":" $hostname" >> $f
56
                echo "1CR on $line2 - $disk_usage"%" storage usage on"$sr_name"" >> $f
57
            fi
58
        else
59
            if [[ $disk_usage -ge WARN ]]; then
60
                if [[ $is_sr_shared -eq 1 ]]; then
61
#                   echo "1WR SHARED on $line2 - $disk_usage"%" storage usage on"$sr_name" ":" $hostname" >> $f
62
                    echo "1WR SHARED on $line2 - $disk_usage"%" storage usage on"$sr_name"" >> $f
63
                else
64
#                   echo "1WR on $line2 - $disk_usage"%" storage usage on"$sr_name" ":" $hostname" >> $f
65
                    echo "1WR on $line2 - $disk_usage"%" storage usage on"$sr_name"" >> $f
66
                fi
67
            fi
68
        fi
69
    done
70
71
done
72
73
if [ $1 == lvmoiscsi ]; then
74
    cr_shared=$(grep "SHARED" "$TMP_FILE"* | awk -F ":" '{print $2}' | sort | uniq | grep 1CR)
75
    wr_shared=$(grep "SHARED" "$TMP_FILE"* | awk -F ":" '{print $2}' | sort | uniq | grep 1WR)
76
    if [[ $(echo $cr_shared | awk '{print NF}') -ne 0 ]]; then
77
        echo -n "CRITICAL - " 
78
        echo -n $(grep "SHARED" "$TMP_FILE"* | awk -F ":" '{print $2}' | sort | uniq | grep 1CR | awk -F "-" '{print $6 " " "##"}')
79
        [[ $(echo $wr_shared | awk '{print NF}') -eq 0 ]] && echo
80
        if [[ $(echo $wr_shared | awk '{print NF}') -ne 0 ]]; then
81
            echo -n "WARNING" $(grep "SHARED" "$TMP_FILE"* | awk -F ":" '{print $2}' | sort | uniq | grep 1WR | awk -F "-" '{print $6 " " "##"}')
82
            echo
83
            exit 2
84
        fi
85
    else
86
        if [[ $(echo $wr_shared | awk '{print NF}') -ne 0 ]]; then
87
            echo -n "WARNING - " 
88
            echo -n $(grep "SHARED" "$TMP_FILE"* | awk -F ":" '{print $2}' | sort | uniq | grep 1WR | awk -F "-" '{print $6 " " "##"}')
89
            echo
90
                exit 1
91
        else 
92
            if [[ $(echo $cr_shared | awk '{print NF}') -eq 0 ]] && [[ $(echo $wr_shared | awk '{print NF}') -eq 0 ]]; then
93
            echo "OK"
94
            exit 0
95
            fi
96
        fi
97
    fi
98
fi
99
100
cr_local=$(grep "1CR" "$TMP_FILE"* | awk -F ":" '{print $2}')
101
wr_local=$(grep "1WR" "$TMP_FILE"* | awk -F ":" '{print $2}')
102
103
if [[ $(echo $cr_local | awk '{print NF}') -ne 0 ]]; then
104
    echo -n "CRITICAL - "
105
    echo -n $(grep "1CR" "$TMP_FILE"* | awk '{print $5, $6, $7, $8, $9, $10, $8, $1}' | awk -F ":" '{print $1 " ##"}' | sed "s#$TMP_FILE##g")
106
    [[ $(echo $wr_local | awk '{print NF}') -eq 0 ]] && echo
107
    if [[ $(echo $wr_local | awk '{print NF}') -ne 0 ]]; then
108
    echo -n "WARNING" $(grep "1WR" "$TMP_FILE"* | awk '{print $5, $6, $7, $8, $9, $10, $8, $1}' | awk -F ":" '{print $1 " ##"}' | sed "s#$TMP_FILE##g")
109
    echo
110
    exit 2
111
fi
112
else
113
    if [[ $(echo $wr_local | awk '{print NF}') -ne 0 ]]; then
114
        echo -n "WARNING - "
115
        echo -n $(grep "1WR" "$TMP_FILE"* | awk '{print $5, $6, $7, $8, $9, $10, $8, $1}' | awk -F ":" '{print $1 " ##"}' | sed "s#$TMP_FILE##g")
116
        
117
        echo 
118
        exit 1
119
    else
120
        if [[ $(echo $cr_local | awk '{print NF}') -eq 0 ]] && [[ $(echo $wr_local | awk '{print NF}') -eq 0 ]]; then
121
            echo "OK"
122
            exit 0
123
        fi
124
    fi
125
fi
126