|
Lines 1-6
Link Here
|
| 1 |
--- check_smartmon.orig 2019-04-16 21:26:22 UTC |
1 |
--- check_smartmon.orig 2021-10-08 16:10:20 UTC |
| 2 |
+++ check_smartmon |
2 |
+++ check_smartmon |
| 3 |
@@ -52,8 +52,8 @@ def parseCmdLine(args): |
3 |
@@ -52,14 +52,14 @@ def parseCmdLine(args): |
| 4 |
version = "%%prog %s" % (__version__) |
4 |
version = "%%prog %s" % (__version__) |
| 5 |
|
5 |
|
| 6 |
parser = OptionParser(usage=usage, version=version) |
6 |
parser = OptionParser(usage=usage, version=version) |
|
Lines 11-16
Link Here
|
| 11 |
parser.add_option("-v", "--verbosity", action="store", |
11 |
parser.add_option("-v", "--verbosity", action="store", |
| 12 |
dest="verbosity", type="int", default=0, |
12 |
dest="verbosity", type="int", default=0, |
| 13 |
metavar="LEVEL", help="set verbosity level to LEVEL; defaults to 0 (quiet), \ |
13 |
metavar="LEVEL", help="set verbosity level to LEVEL; defaults to 0 (quiet), \ |
|
|
14 |
possible values go up to 3") |
| 15 |
parser.add_option("-t", "--type", action="store", dest="devtype", default="ata", metavar="DEVTYPE", |
| 16 |
- help="type of device (ATA|SCSI)") |
| 17 |
+ help="type of device (ata|scsi)") |
| 18 |
parser.add_option("-w", "--warning-threshold", metavar="TEMP", action="store", |
| 19 |
type="int", dest="warningThreshold", default=55, |
| 20 |
help="set temperature warning threshold to given temperature (defaults to 55)") |
| 14 |
@@ -123,7 +123,7 @@ def callSmartMonTools(path, device): |
21 |
@@ -123,7 +123,7 @@ def callSmartMonTools(path, device): |
| 15 |
"") |
22 |
"") |
| 16 |
healthStatusOutput = "" |
23 |
healthStatusOutput = "" |
|
Lines 29-35
Link Here
|
| 29 |
# done |
36 |
# done |
| 30 |
|
37 |
|
| 31 |
return (0 ,"", healthStatusOutput, temperatureOutput) |
38 |
return (0 ,"", healthStatusOutput, temperatureOutput) |
| 32 |
@@ -153,6 +153,7 @@ def parseOutput(healthMessage, temperatu |
39 |
@@ -153,6 +153,7 @@ def parseOutput(healthMessage, temperatureMessage, dev |
| 33 |
|
40 |
|
| 34 |
vprint(3, "parseOutput: Device type is %s" % devType) |
41 |
vprint(3, "parseOutput: Device type is %s" % devType) |
| 35 |
|
42 |
|
|
Lines 37-43
Link Here
|
| 37 |
if devType == "ata": |
44 |
if devType == "ata": |
| 38 |
# parse health status |
45 |
# parse health status |
| 39 |
# |
46 |
# |
| 40 |
@@ -162,13 +163,16 @@ def parseOutput(healthMessage, temperatu |
47 |
@@ -162,13 +163,16 @@ def parseOutput(healthMessage, temperatureMessage, dev |
| 41 |
getNext = 0 |
48 |
getNext = 0 |
| 42 |
for line in lines: |
49 |
for line in lines: |
| 43 |
if getNext: |
50 |
if getNext: |
|
Lines 56-62
Link Here
|
| 56 |
if getNext: |
63 |
if getNext: |
| 57 |
parts = statusLine.split() |
64 |
parts = statusLine.split() |
| 58 |
healthStatus = parts[-1] |
65 |
healthStatus = parts[-1] |
| 59 |
@@ -181,7 +185,7 @@ def parseOutput(healthMessage, temperatu |
66 |
@@ -181,7 +185,7 @@ def parseOutput(healthMessage, temperatureMessage, dev |
| 60 |
parts = line.split() |
67 |
parts = line.split() |
| 61 |
if len(parts): |
68 |
if len(parts): |
| 62 |
# 194 is the temperature value id |
69 |
# 194 is the temperature value id |
|
Lines 65-71
Link Here
|
| 65 |
temperature = int(parts[9]) |
72 |
temperature = int(parts[9]) |
| 66 |
break |
73 |
break |
| 67 |
# fi |
74 |
# fi |
| 68 |
@@ -190,9 +194,11 @@ def parseOutput(healthMessage, temperatu |
75 |
@@ -190,9 +194,11 @@ def parseOutput(healthMessage, temperatureMessage, dev |
| 69 |
# if devType == ata |
76 |
# if devType == ata |
| 70 |
|
77 |
|
| 71 |
if devType == "scsi": |
78 |
if devType == "scsi": |
|
Lines 78-84
Link Here
|
| 78 |
if stat_re.search( line ): |
85 |
if stat_re.search( line ): |
| 79 |
parts = line.split() |
86 |
parts = line.split() |
| 80 |
healthStatus = parts[-1] |
87 |
healthStatus = parts[-1] |
| 81 |
@@ -201,19 +207,25 @@ def parseOutput(healthMessage, temperatu |
88 |
@@ -201,39 +207,49 @@ def parseOutput(healthMessage, temperatureMessage, dev |
| 82 |
# done |
89 |
# done |
| 83 |
|
90 |
|
| 84 |
# get temperature from temperatureMessage |
91 |
# get temperature from temperatureMessage |
|
Lines 107-121
Link Here
|
| 107 |
vprint(3, "Temperature: %d" %temperature) |
114 |
vprint(3, "Temperature: %d" %temperature) |
| 108 |
|
115 |
|
| 109 |
return (healthStatus, temperature) |
116 |
return (healthStatus, temperature) |
| 110 |
@@ -225,6 +237,7 @@ def createReturnInfo(healthStatus, tempe |
117 |
# end |
|
|
118 |
|
| 119 |
-def createReturnInfo(healthStatus, temperature, warningThreshold, |
| 120 |
+def createReturnInfo(device, healthStatus, temperature, warningThreshold, |
| 121 |
criticalThreshold): |
| 122 |
"""Create return information according to given thresholds.""" |
| 111 |
|
123 |
|
| 112 |
# this is absolutely critical! |
124 |
# this is absolutely critical! |
| 113 |
if healthStatus not in [ "PASSED", "OK" ]: |
125 |
if healthStatus not in [ "PASSED", "OK" ]: |
|
|
126 |
- return (2, "CRITICAL: device does not pass health status") |
| 114 |
+ vprint(2, "Health status: %s" % healthStatus) |
127 |
+ vprint(2, "Health status: %s" % healthStatus) |
| 115 |
return (2, "CRITICAL: device does not pass health status") |
128 |
+ return (2, "CRITICAL: device (%s) does not pass health status" %device) |
|
|
129 |
# fi |
| 130 |
|
| 131 |
if temperature > criticalThreshold: |
| 132 |
- return (2, "CRITICAL: device temperature (%d) exceeds critical temperature threshold (%s)" % (temperature, criticalThreshold)) |
| 133 |
+ return (2, "CRITICAL: device (%s) temperature (%d) exceeds critical temperature threshold (%s)|TEMP=%d;%d;%d;" |
| 134 |
+ % (device, temperature, criticalThreshold, temperature, warningThreshold, criticalThreshold)) |
| 135 |
elif temperature > warningThreshold: |
| 136 |
- return (1, "WARNING: device temperature (%d) exceeds warning temperature threshold (%s)" % (temperature, warningThreshold)) |
| 137 |
+ return (1, "WARNING: device (%s) temperature (%d) exceeds warning temperature threshold (%s)|TEMP=%d;%d;%d;" |
| 138 |
+ % (device, temperature, warningThreshold, temperature, warningThreshold, criticalThreshold)) |
| 139 |
else: |
| 140 |
- return (0, "OK: device is functional and stable (temperature: %d)" % temperature) |
| 141 |
+ return (0, "OK: device (%s) is functional and stable (temperature: %d)|TEMP=%d;%d;%d;" |
| 142 |
+ % (device, temperature, temperature, warningThreshold, criticalThreshold)) |
| 116 |
# fi |
143 |
# fi |
|
|
144 |
# end |
| 117 |
|
145 |
|
| 118 |
@@ -241,7 +254,7 @@ def createReturnInfo(healthStatus, tempe |
146 |
@@ -241,7 +257,7 @@ def createReturnInfo(healthStatus, temperature, warnin |
| 119 |
def exitWithMessage(value, message): |
147 |
def exitWithMessage(value, message): |
| 120 |
"""Exit with given value and status message.""" |
148 |
"""Exit with given value and status message.""" |
| 121 |
|
149 |
|
|
Lines 124-130
Link Here
|
| 124 |
sys.exit(value) |
152 |
sys.exit(value) |
| 125 |
# end |
153 |
# end |
| 126 |
|
154 |
|
| 127 |
@@ -254,7 +267,7 @@ def vprint(level, message): |
155 |
@@ -254,7 +270,7 @@ def vprint(level, message): |
| 128 |
""" |
156 |
""" |
| 129 |
|
157 |
|
| 130 |
if level <= verbosity: |
158 |
if level <= verbosity: |
|
Lines 133-143
Link Here
|
| 133 |
# fi |
161 |
# fi |
| 134 |
# end |
162 |
# end |
| 135 |
|
163 |
|
| 136 |
@@ -287,6 +300,7 @@ if __name__ == "__main__": |
164 |
@@ -287,12 +303,13 @@ if __name__ == "__main__": |
| 137 |
# check device type, ATA is default |
165 |
# check device type, ATA is default |
| 138 |
vprint(2, "Get device type") |
166 |
vprint(2, "Get device type") |
| 139 |
devtype = options.devtype |
167 |
devtype = options.devtype |
| 140 |
+ vprint(2, "command line supplied device type is: %s" % devtype) |
168 |
+ vprint(2, "command line supplied device type is: %s" % devtype) |
| 141 |
if not devtype: |
169 |
if not devtype: |
| 142 |
devtype = "ATA" |
170 |
- devtype = "ATA" |
| 143 |
|
171 |
+ if device_re.search( device ): |
|
|
172 |
+ devtype = "scsi" |
| 173 |
+ else: |
| 174 |
+ devtype= "ata" |
| 175 |
|
| 176 |
- if device_re.search( device ): |
| 177 |
- devtype = "scsi" |
| 178 |
- |
| 179 |
vprint(1, "Device type: %s" % devtype) |
| 180 |
|
| 181 |
# call smartctl and parse output |
| 182 |
@@ -303,7 +320,7 @@ if __name__ == "__main__": |
| 183 |
vprint(2, "Parse smartctl output") |
| 184 |
(healthStatus, temperature) = parseOutput(healthStatusOutput, temperatureOutput, devtype) |
| 185 |
vprint(2, "Generate return information") |
| 186 |
- (value, message) = createReturnInfo(healthStatus, temperature, |
| 187 |
+ (value, message) = createReturnInfo(device, healthStatus, temperature, |
| 188 |
options.warningThreshold, options.criticalThreshold) |
| 189 |
|
| 190 |
# exit program |