summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTilmann Bubeck <t.bubeck@reinform.de>2011-10-25 00:00:00 +0000
committerThomas Guyot-Sionnest <dermoth@aei.ca>2014-01-23 08:56:53 -0500
commitc4a99b023d03326ad49e03c8731eec19d19a75bf (patch)
treee9fd69bd789620824156e6f6f9487e1832c3a9d6
parent49ae05ff1ce79a1b76e05128b85dbb1e944099ea (diff)
downloadmonitoring-plugins-c4a99b023d03326ad49e03c8731eec19d19a75bf.tar.gz
fix smart attribute comparison
Each S.M.A.R.T. attribute is compared against a threshold. If it is LESSTHAN that threshold an error is reported. This patch fixes the problem, that attribute values EQUAL to the threshold are reported as error, which is wrong. Only LESSTHAN the threshold is an error. For more information see: http://www.hdsentinel.com/smart/index.php My SSD has some attributes which value and threshold are "0". Without the patch this is reported as errornous. ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE ... 172 Unknown_Attribute 0x0032 000 000 000 Old_age Always - 0 174 Unknown_Attribute 0x0030 000 000 000 Old_age Offline - 13 177 Wear_Leveling_Count 0x0000 000 000 000 Old_age Offline - 0 ... See also: * http://sourceforge.net/p/nagiosplug/patches/365/ * https://bugzilla.redhat.com/913085
-rw-r--r--plugins/check_ide_smart.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/plugins/check_ide_smart.c b/plugins/check_ide_smart.c
index 59cd8a34..55faacce 100644
--- a/plugins/check_ide_smart.c
+++ b/plugins/check_ide_smart.c
@@ -349,7 +349,7 @@ values_not_passed (values_t * p, thresholds_t * t)
349 int i; 349 int i;
350 for (i = 0; i < NR_ATTRIBUTES; i++) { 350 for (i = 0; i < NR_ATTRIBUTES; i++) {
351 if (value->id && threshold->id && value->id == threshold->id) { 351 if (value->id && threshold->id && value->id == threshold->id) {
352 if (value->value <= threshold->threshold) { 352 if (value->value < threshold->threshold) {
353 ++failed; 353 ++failed;
354 } 354 }
355 else { 355 else {
@@ -378,7 +378,7 @@ nagios (values_t * p, thresholds_t * t)
378 int i; 378 int i;
379 for (i = 0; i < NR_ATTRIBUTES; i++) { 379 for (i = 0; i < NR_ATTRIBUTES; i++) {
380 if (value->id && threshold->id && value->id == threshold->id) { 380 if (value->id && threshold->id && value->id == threshold->id) {
381 if (value->value <= threshold->threshold) { 381 if (value->value < threshold->threshold) {
382 ++failed; 382 ++failed;
383 if (value->status & 1) { 383 if (value->status & 1) {
384 status = PREFAILURE; 384 status = PREFAILURE;
@@ -435,7 +435,7 @@ print_value (value_t * p, threshold_t * t)
435 printf ("Id=%3d, Status=%2d {%s , %s}, Value=%3d, Threshold=%3d, %s\n", 435 printf ("Id=%3d, Status=%2d {%s , %s}, Value=%3d, Threshold=%3d, %s\n",
436 p->id, p->status, p->status & 1 ? "PreFailure" : "Advisory ", 436 p->id, p->status, p->status & 1 ? "PreFailure" : "Advisory ",
437 p->status & 2 ? "OnLine " : "OffLine", p->value, t->threshold, 437 p->status & 2 ? "OnLine " : "OffLine", p->value, t->threshold,
438 p->value > t->threshold ? "Passed" : "Failed"); 438 p->value >= t->threshold ? "Passed" : "Failed");
439} 439}
440 440
441 441