check_smart.h
2.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#ifndef CHECK_SMART_H
#define CHECK_SMART_H
#include <iostream>
#include <sstream>
#include <map>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/time.h>
#include "auxiliar.h"
#define OK 0
#define WARN 1
#define CRIT 2
#define UNKN 3
#define VERSION "1.4"
#define SMARTCTL_CMD_ATTRS "/usr/sbin/smartctl -A "
#define SMARTCTL_CMD_INFO "/usr/sbin/smartctl -i "
#define ROTATION_INFO_STR "Rotation Rate:"
#define SSD_DEV_STR "Solid State Device"
#define REALLOC_SEC_COUNT_ID 5
#define CURRENT_PENDING_SEC_ID 197
#define OFFLINE_UNCORRECT_ID 198
#define WEAR_COUNT_ID 177
#define MEDIA_WEAROUT_ID 233
#define RUNTIME_BAD_BLOCKS_ID 183
#define REP_UNCORRECT_ID 187
#define HDD 0
#define SSD 1
using namespace std;
struct SMARTAttr
{
int id;
string name;
int value;
int threshold_warn;
int threshold_crit;
bool optional;
unsigned int col;
bool lower_than;
}; typedef struct SMARTAttr SMARTAttr;
// Attribute definitions
SMARTAttr reallocated = {
.id = REALLOC_SEC_COUNT_ID,
.name = "Reallocated_Sector_Ct",
.value = -1,
.threshold_warn = 0,
.threshold_crit = -1,
.optional = false,
.col = 9,
.lower_than = false,
};
SMARTAttr pending = {
.id = CURRENT_PENDING_SEC_ID,
.name = "Current_Pending_Sector",
.value = -1,
.threshold_warn = 0,
.threshold_crit = -1,
.optional = false,
.col = 9,
.lower_than = false,
};
SMARTAttr off_uncorrect = {
.id = OFFLINE_UNCORRECT_ID,
.name = "Offline_Uncorrectable",
.value = -1,
.threshold_warn = 0,
.threshold_crit = 0,
.optional = false,
.col = 9,
.lower_than = false,
};
SMARTAttr wear = {
.id = WEAR_COUNT_ID,
.name = "Wear_Leveling_Count",
.value = -1,
.threshold_warn = 20,
.threshold_crit = 10,
.optional = true,
.col = 3,
.lower_than = true,
};
SMARTAttr wearout = {
.id = MEDIA_WEAROUT_ID,
.name = "Media_Wearout_Indicator",
.value = -1,
.threshold_warn = 20,
.threshold_crit = 10,
.optional = true,
.col = 3,
.lower_than = true,
};
SMARTAttr badblocks = {
.id = RUNTIME_BAD_BLOCKS_ID,
.name = "Runtime_Bad_Block",
.value = -1,
.threshold_warn = 0,
.threshold_crit = 0,
.optional = false,
.col = 9,
.lower_than = false,
};
SMARTAttr rep_uncorrect = {
.id = REP_UNCORRECT_ID,
.name = "Reported_Uncorrect",
.value = -1,
.threshold_warn = 0,
.threshold_crit = -1,
.optional = false,
.col = 9,
.lower_than = false,
};
map<int,SMARTAttr> prepareAttrMap(int driveType);
int getSmartAttrValue(string line);
int getSmartAttrID(string line);
int run_smartctl_cmd(const string command, const char* disk, string* output);
int checkDriveType(const char* disk);
int evalStatus(const char* disk, int driveType, string* status);
void printVersion();
void printHelp(bool longVersion);
void set_timeout(unsigned int sec);
#endif