Page MenuHomeFreeBSD

D30712.id90658.diff
No OneTemporary

D30712.id90658.diff

Index: net-mgmt/nagios-check_smartmon/files/patch-check_smartmon
===================================================================
--- net-mgmt/nagios-check_smartmon/files/patch-check_smartmon
+++ net-mgmt/nagios-check_smartmon/files/patch-check_smartmon
@@ -1,143 +1,103 @@
---- check_smartmon.orig 2019-04-16 21:26:22 UTC
+--- check_smartmon.orig 2021-06-08 13:04:39 UTC
+++ check_smartmon
-@@ -52,8 +52,8 @@ def parseCmdLine(args):
- version = "%%prog %s" % (__version__)
+@@ -1,4 +1,4 @@
+-#!/usr/local/bin/python3.8
++#!/usr/local/bin/python
+
+ # -*- coding: iso8859-1 -*-
+ #
+@@ -53,13 +53,13 @@ def parseCmdLine(args):
parser = OptionParser(usage=usage, version=version)
-- parser.add_option("-d", "--device", action="store", dest="device", default="", metavar="DEVICE",
-- help="device to check")
-+ parser.add_option("-d", "--device", action="store", dest="device", default="", metavar="DEVICE",
-+ help="device to check")
+ parser.add_option("-d", "--device", action="store", dest="device", default="", metavar="DEVICE",
+- help="device to check")
++ help="device to check")
parser.add_option("-v", "--verbosity", action="store",
dest="verbosity", type="int", default=0,
metavar="LEVEL", help="set verbosity level to LEVEL; defaults to 0 (quiet), \
+ possible values go up to 3")
+ parser.add_option("-t", "--type", action="store", dest="devtype", default="ata", metavar="DEVTYPE",
+- help="type of device (ATA|SCSI)")
++ help="type of device (ata|scsi)")
+ parser.add_option("-w", "--warning-threshold", metavar="TEMP", action="store",
+ type="int", dest="warningThreshold", default=55,
+ help="set temperature warning threshold to given temperature (defaults to 55)")
@@ -123,7 +123,7 @@ def callSmartMonTools(path, device):
"")
healthStatusOutput = ""
for line in child_stdout:
-- healthStatusOutput = healthStatusOutput + line
-+ healthStatusOutput = healthStatusOutput + line.decode('utf-8')
+- healthStatusOutput = healthStatusOutput + line.decode('utf-8')
++ healthStatusOutput = healthStatusOutput + line.decode('utf-8')
# done
# get temperature
-@@ -138,7 +138,7 @@ def callSmartMonTools(path, device):
-
- temperatureOutput = ""
- for line in child_stdout:
-- temperatureOutput = temperatureOutput + line
-+ temperatureOutput = temperatureOutput + line.decode('utf-8')
- # done
-
- return (0 ,"", healthStatusOutput, temperatureOutput)
-@@ -153,6 +153,7 @@ def parseOutput(healthMessage, temperatu
-
- vprint(3, "parseOutput: Device type is %s" % devType)
-
-+ healthStatus = ""
- if devType == "ata":
- # parse health status
- #
-@@ -162,13 +163,16 @@ def parseOutput(healthMessage, temperatu
- getNext = 0
- for line in lines:
- if getNext:
-- statusLine = line
-- break
-+ if line != "SMART STATUS RETURN: incomplete response, ATA output registers missing" and \
-+ line != "SMART Status not supported: Incomplete response, ATA output registers missing" :
-+ statusLine = line
-+ break
- elif line == "=== START OF READ SMART DATA SECTION ===":
- getNext = 1
- # fi
- # done
-
-+ vprint(3, "parseOutput: statusLine is: '%s'" % statusLine )
- if getNext:
- parts = statusLine.split()
- healthStatus = parts[-1]
-@@ -181,7 +185,7 @@ def parseOutput(healthMessage, temperatu
- parts = line.split()
- if len(parts):
- # 194 is the temperature value id
-- if parts[0] == "194":
-+ if parts[0] == "194" or parts[0] == "190":
- temperature = int(parts[9])
- break
- # fi
-@@ -190,9 +194,11 @@ def parseOutput(healthMessage, temperatu
- # if devType == ata
-
- if devType == "scsi":
-- stat_re = re.compile( r'SMART Health Status:' )
-+ vprint(3, "parseOutput: searching for 'SMART Health Status' section")
-+ stat_re = re.compile( r'SMART Health Status:|SMART overall-health self-assessment test result:' )
- lines = healthMessage.split("\n")
- for line in lines:
-+ vprint(3, "parseOutput: line is: '%s'" % line)
- if stat_re.search( line ):
- parts = line.split()
- healthStatus = parts[-1]
-@@ -201,19 +207,25 @@ def parseOutput(healthMessage, temperatu
- # done
-
- # get temperature from temperatureMessage
-- stat_re = re.compile( r'Current Drive Temperature:' )
-+ temperature = 0
-+ vprint(3, "parseOutput: searching for temperature line section")
-+ stat_re = re.compile( r'Current Drive Temperature:|Temperature_Celsius' )
- lines = temperatureMessage.split("\n")
- for line in lines:
-+ vprint(3, "parseOutput: line is: '%s'" % line)
+@@ -216,11 +216,11 @@ def parseOutput(healthMessage, temperatureMessage, dev
if stat_re.search( line ):
parts = line.split()
-- temperature = int(parts[-2])
-+ vprint(3, "parseOutput: we are very keen on this line: '%s'" % line)
-+ temperature = int(parts[-3])
-+ vprint(3, "parseOutput: Is this the temperature? '%s'" % temperature)
+ vprint(3, "parseOutput: we are very keen on this line: '%s'" % line)
+- temperature = int(parts[-3])
++ temperature = int(parts[-2])
+ vprint(3, "parseOutput: Is this the temperature? '%s'" % temperature)
break
# fi
-+
+-
++
# done
# if devType == scsi
-
-- vprint(3, "Health status: %s" % healthStatus)
-+ vprint(3, "Health status: %s" % healthStatus)
- vprint(3, "Temperature: %d" %temperature)
-
+@@ -231,22 +231,25 @@ def parseOutput(healthMessage, temperatureMessage, dev
return (healthStatus, temperature)
-@@ -225,6 +237,7 @@ def createReturnInfo(healthStatus, tempe
+ # end
+
+-def createReturnInfo(healthStatus, temperature, warningThreshold,
++def createReturnInfo(device, healthStatus, temperature, warningThreshold,
+ criticalThreshold):
+ """Create return information according to given thresholds."""
# this is absolutely critical!
if healthStatus not in [ "PASSED", "OK" ]:
-+ vprint(2, "Health status: %s" % healthStatus)
- return (2, "CRITICAL: device does not pass health status")
+ vprint(2, "Health status: %s" % healthStatus)
+- return (2, "CRITICAL: device does not pass health status")
++ return (2, "CRITICAL: device (%s) does not pass health status" %device)
# fi
-@@ -241,7 +254,7 @@ def createReturnInfo(healthStatus, tempe
- def exitWithMessage(value, message):
- """Exit with given value and status message."""
-
-- print message
-+ print( message )
- sys.exit(value)
- # end
-
-@@ -254,7 +267,7 @@ def vprint(level, message):
- """
-
- if level <= verbosity:
-- print message
-+ print( message )
+ if temperature > criticalThreshold:
+- return (2, "CRITICAL: device temperature (%d) exceeds critical temperature threshold (%s)" % (temperature, criticalThreshold))
++ return (2, "CRITICAL: device (%s) temperature (%d) exceeds critical temperature threshold (%s)|TEMP=%d;%d;%d;"
++ % (device, temperature, criticalThreshold, temperature, warningThreshold, criticalThreshold))
+ elif temperature > warningThreshold:
+- return (1, "WARNING: device temperature (%d) exceeds warning temperature threshold (%s)" % (temperature, warningThreshold))
++ return (1, "WARNING: device (%s) temperature (%d) exceeds warning temperature threshold (%s)|TEMP=%d;%d;%d;"
++ % (device, temperature, warningThreshold, temperature, warningThreshold, criticalThreshold))
+ else:
+- return (0, "OK: device is functional and stable (temperature: %d)" % temperature)
++ return (0, "OK: device (%s) is functional and stable (temperature: %d)|TEMP=%d;%d;%d;"
++ % (device, temperature, temperature, warningThreshold, criticalThreshold))
# fi
# end
-@@ -287,6 +300,7 @@ if __name__ == "__main__":
- # check device type, ATA is default
- vprint(2, "Get device type")
+@@ -302,11 +305,11 @@ if __name__ == "__main__":
devtype = options.devtype
-+ vprint(2, "command line supplied device type is: %s" % devtype)
+ vprint(2, "command line supplied device type is: %s" % devtype)
if not devtype:
- devtype = "ATA"
-
+- devtype = "ATA"
++ if device_re.search( device ):
++ devtype = "scsi"
++ else:
++ devtype= "ata"
+
+- if device_re.search( device ):
+- devtype = "scsi"
+-
+ vprint(1, "Device type: %s" % devtype)
+
+ # call smartctl and parse output
+@@ -317,7 +320,7 @@ if __name__ == "__main__":
+ vprint(2, "Parse smartctl output")
+ (healthStatus, temperature) = parseOutput(healthStatusOutput, temperatureOutput, devtype)
+ vprint(2, "Generate return information")
+- (value, message) = createReturnInfo(healthStatus, temperature,
++ (value, message) = createReturnInfo(device, healthStatus, temperature,
+ options.warningThreshold, options.criticalThreshold)
+
+ # exit program

File Metadata

Mime Type
text/plain
Expires
Mon, Aug 3, 3:59 AM (9 h, 13 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35880078
Default Alt Text
D30712.id90658.diff (10 KB)

Event Timeline