Blame view

check_smart/check_smart.h 2.51 KB
Imanol-Mikel Barba Sabariego authored
1
2
3
4
5
#ifndef CHECK_SMART_H
#define CHECK_SMART_H

#include <iostream>
#include <sstream>
6
#include <map>
Imanol-Mikel Barba Sabariego authored
7
8

#include <stdio.h>
9
10
#include <string.h>
#include <stdlib.h>
Imanol-Mikel Barba Sabariego authored
11
12
13
14
#include <unistd.h>

#include <sys/time.h>
Imanol-Mikel Barba Sabariego authored
15
#include "auxiliar.h"
Imanol-Mikel Barba Sabariego authored
16
17
18
19
20
21
#define OK 0
#define WARN 1
#define CRIT 2
#define UNKN 3
22
#define VERSION "1.4"
23
24
25
26
27
28
29
30
31
32
33

#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
Imanol-Mikel Barba Sabariego authored
34
35
#define MEDIA_WEAROUT_ID 233
#define RUNTIME_BAD_BLOCKS_ID 183
36
37
38
39
#define REP_UNCORRECT_ID 187

#define HDD 0
#define SSD 1
Imanol-Mikel Barba Sabariego authored
40
41
42

using namespace std;
43
44
struct SMARTAttr
{
Imanol-Mikel Barba Sabariego authored
45
  int id;
46
47
  string name;
  int value;
Imanol-Mikel Barba Sabariego authored
48
49
  int threshold_warn;
  int threshold_crit;
50
  bool optional;
51
52
53
}; typedef struct SMARTAttr SMARTAttr;
Imanol-Mikel Barba Sabariego authored
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
// Attribute definitions
SMARTAttr reallocated = {
  .id = REALLOC_SEC_COUNT_ID,
  .name = "Reallocated_Sector_Ct",
  .value = -1,
  .threshold_warn = 0,
  .threshold_crit = -1,
  .optional = false,
};

SMARTAttr pending = {
  .id = CURRENT_PENDING_SEC_ID,
  .name = "Current_Pending_Sector",
  .value = -1,
  .threshold_warn = 0,
  .threshold_crit = -1, 
  .optional = false,
};

SMARTAttr off_uncorrect = {
  .id = OFFLINE_UNCORRECT_ID,
  .name = "Offline_Uncorrectable",
  .value = -1,
  .threshold_warn = 0,
  .threshold_crit = 0, 
  .optional = false,
};

SMARTAttr wear = {
  .id = WEAR_COUNT_ID,
  .name = "Wear_Leveling_Count",
  .value = -1,
  .threshold_warn = 80,
  .threshold_crit = 90, 
  .optional = true,
};

SMARTAttr wearout = {
  .id = MEDIA_WEAROUT_ID,
  .name = "Media_Wearout_Indicator",
  .value = -1,
  .threshold_warn = 80,
  .threshold_crit = 90,
  .optional = true,
};

SMARTAttr badblocks = {
  .id = RUNTIME_BAD_BLOCKS_ID,
  .name = "Runtime_Bad_Block",
  .value = -1,
  .threshold_warn = 0,
  .threshold_crit = 0, 
  .optional = false,
};

SMARTAttr rep_uncorrect = {
  .id = REP_UNCORRECT_ID,
  .name = "Reported_Uncorrect",
  .value = -1,
  .threshold_warn = 0,
114
  .threshold_crit = -1, 
Imanol-Mikel Barba Sabariego authored
115
116
117
  .optional = false,
};
118
119
120
121
122
123
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);
Imanol-Mikel Barba Sabariego authored
124
125
void printVersion();
void printHelp(bool longVersion);
126
void set_timeout(unsigned int sec);
Imanol-Mikel Barba Sabariego authored
127
128

#endif