summaryrefslogtreecommitdiffstats
path: root/web/attachments/330612-rangesupport.patch
diff options
context:
space:
mode:
Diffstat (limited to 'web/attachments/330612-rangesupport.patch')
-rw-r--r--web/attachments/330612-rangesupport.patch326
1 files changed, 326 insertions, 0 deletions
diff --git a/web/attachments/330612-rangesupport.patch b/web/attachments/330612-rangesupport.patch
new file mode 100644
index 0000000..b32527a
--- /dev/null
+++ b/web/attachments/330612-rangesupport.patch
@@ -0,0 +1,326 @@
1diff --git a/plugins/check_nt.c b/plugins/check_nt.c
2index d038efe..e2b8722 100644
3--- a/plugins/check_nt.c
4+++ b/plugins/check_nt.c
5@@ -65,8 +65,10 @@ int server_port=PORT;
6 char *value_list=NULL;
7 char *req_password=NULL;
8 unsigned long lvalue_list[MAX_VALUE_LIST];
9-unsigned long warning_value=0L;
10-unsigned long critical_value=0L;
11+range *warning_value=NULL;
12+range *critical_value=NULL;
13+const char *warning_value_string="";
14+const char *critical_value_string="";
15 int check_warning_value=FALSE;
16 int check_critical_value=FALSE;
17 enum checkvars vars_to_check = CHECK_NONE;
18@@ -81,6 +83,16 @@ int strtoularray(unsigned long *array, char *string, const char *delim);
19 void print_help(void);
20 void print_usage(void);
21
22+bool allnumeric(const char* number)
23+{
24+ int i;
25+ for(i=0; number[i]; i++)
26+ {
27+ if(number[i]<'0'||number[i]>'9'){return false;}
28+ }
29+ return true;
30+}
31+
32 int main(int argc, char **argv){
33
34 /* should be int result = STATE_UNKNOWN; */
35@@ -224,8 +236,8 @@ int main(int argc, char **argv){
36
37 if (total_disk_space>0 && free_disk_space>=0) {
38 percent_used_space = ((total_disk_space - free_disk_space) / total_disk_space) * 100;
39- warning_used_space = ((float)warning_value / 100) * total_disk_space;
40- critical_used_space = ((float)critical_value / 100) * total_disk_space;
41+ warning_used_space = ((float)(warning_value?warning_value->end:0) / 100) * total_disk_space;
42+ critical_used_space = ((float)(critical_value?critical_value->end:0) / 100) * total_disk_space;
43
44 asprintf(&temp_string,_("%s:\\ - total: %.2f Gb - used: %.2f Gb (%.0f%%) - free %.2f Gb (%.0f%%)"),
45 value_list, total_disk_space / 1073741824, (total_disk_space - free_disk_space) / 1073741824,
46@@ -234,12 +246,33 @@ int main(int argc, char **argv){
47 (total_disk_space - free_disk_space) / 1073741824, warning_used_space / 1073741824,
48 critical_used_space / 1073741824, total_disk_space / 1073741824);
49
50- if(check_critical_value==TRUE && percent_used_space >= critical_value)
51- return_code=STATE_CRITICAL;
52- else if (check_warning_value==TRUE && percent_used_space >= warning_value)
53- return_code=STATE_WARNING;
54- else
55- return_code=STATE_OK;
56+ if(allnumeric(critical_value_string)&&allnumeric(warning_value_string))
57+ {
58+ if (critical_value > warning_value)
59+ { /* Normal thresholds */
60+ if (check_critical_value == TRUE && percent_used_space >= critical_value->end)
61+ return_code = STATE_CRITICAL;
62+ else if (check_warning_value == TRUE && percent_used_space >= warning_value->end)
63+ return_code = STATE_WARNING;
64+ else
65+ return_code = STATE_OK;
66+ }
67+ else
68+ { /* inverse thresholds */
69+ return_code = STATE_OK;
70+ if (check_critical_value == TRUE && percent_used_space <= critical_value->end)
71+ return_code = STATE_CRITICAL;
72+ else if (check_warning_value == TRUE && percent_used_space <= warning_value->end)
73+ return_code = STATE_WARNING;
74+ }
75+ }else{
76+ if(check_critical_value==TRUE && check_range(percent_used_space, critical_value))
77+ return_code=STATE_CRITICAL;
78+ else if (check_warning_value==TRUE && check_range(percent_used_space, warning_value))
79+ return_code=STATE_WARNING;
80+ else
81+ return_code=STATE_OK;
82+ }
83
84 output_message = strdup (temp_string);
85 perfdata = temp_string_perf;
86@@ -273,8 +306,8 @@ int main(int argc, char **argv){
87 mem_commitLimit=atof(strtok(recv_buffer,"&"));
88 mem_commitByte=atof(strtok(NULL,"&"));
89 percent_used_space = (mem_commitByte / mem_commitLimit) * 100;
90- warning_used_space = ((float)warning_value / 100) * mem_commitLimit;
91- critical_used_space = ((float)critical_value / 100) * mem_commitLimit;
92+ warning_used_space = ((float)(warning_value?warning_value->end:0) / 100) * mem_commitLimit;
93+ critical_used_space = ((float)(warning_value?critical_value->end:0) / 100) * mem_commitLimit;
94
95 /* Divisor should be 1048567, not 3044515, as we are measuring "Commit Charge" here,
96 which equals RAM + Pagefiles. */
97@@ -284,12 +317,32 @@ int main(int argc, char **argv){
98 asprintf(&perfdata,_("'Memory usage'=%.2fMb;%.2f;%.2f;0.00;%.2f"), mem_commitByte / 1048567,
99 warning_used_space / 1048567, critical_used_space / 1048567, mem_commitLimit / 1048567);
100
101- return_code=STATE_OK;
102- if(check_critical_value==TRUE && percent_used_space >= critical_value)
103- return_code=STATE_CRITICAL;
104- else if (check_warning_value==TRUE && percent_used_space >= warning_value)
105- return_code=STATE_WARNING;
106-
107+ if(allnumeric(critical_value_string)&&allnumeric(warning_value_string))
108+ {
109+ if (critical_value > warning_value)
110+ { /* Normal thresholds */
111+ if (check_critical_value == TRUE && percent_used_space >= critical_value->end)
112+ return_code = STATE_CRITICAL;
113+ else if (check_warning_value == TRUE && percent_used_space >= warning_value->end)
114+ return_code = STATE_WARNING;
115+ else
116+ return_code = STATE_OK;
117+ }
118+ else
119+ { /* inverse thresholds */
120+ return_code = STATE_OK;
121+ if (check_critical_value == TRUE && percent_used_space <= critical_value->end)
122+ return_code = STATE_CRITICAL;
123+ else if (check_warning_value == TRUE && percent_used_space <= warning_value->end)
124+ return_code = STATE_WARNING;
125+ }
126+ }else{
127+ return_code=STATE_OK;
128+ if(check_critical_value==TRUE && check_range(percent_used_space, critical_value))
129+ return_code=STATE_CRITICAL;
130+ else if (check_warning_value==TRUE && check_range(percent_used_space, warning_value))
131+ return_code=STATE_WARNING;
132+ }
133 break;
134
135 case CHECK_COUNTER:
136@@ -373,29 +426,41 @@ int main(int argc, char **argv){
137 }
138 asprintf (&output_message, "%s |", output_message);
139 asprintf (&output_message,"%s %s", output_message,
140- fperfdata (description, counter_value,
141- counter_unit, 1, warning_value, 1, critical_value,
142+ fperfdatarange (description, counter_value,
143+ counter_unit, warning_value_string, critical_value_string,
144 (!(isPercent) && (minval != NULL)), fminval,
145 (!(isPercent) && (minval != NULL)), fmaxval));
146 }
147 }
148
149- if (critical_value > warning_value)
150- { /* Normal thresholds */
151- if (check_critical_value == TRUE && counter_value >= critical_value)
152- return_code = STATE_CRITICAL;
153- else if (check_warning_value == TRUE && counter_value >= warning_value)
154- return_code = STATE_WARNING;
155+ if(allnumeric(critical_value_string)&&allnumeric(warning_value_string))
156+ {
157+ if (critical_value > warning_value)
158+ { /* Normal thresholds */
159+ if (check_critical_value == TRUE && counter_value >= critical_value->end)
160+ return_code = STATE_CRITICAL;
161+ else if (check_warning_value == TRUE && counter_value >= warning_value->end)
162+ return_code = STATE_WARNING;
163+ else
164+ return_code = STATE_OK;
165+ }
166 else
167+ { /* inverse thresholds */
168 return_code = STATE_OK;
169- }
170- else
171- { /* inverse thresholds */
172- return_code = STATE_OK;
173- if (check_critical_value == TRUE && counter_value <= critical_value)
174+ if (check_critical_value == TRUE && counter_value <= critical_value->end)
175+ return_code = STATE_CRITICAL;
176+ else if (check_warning_value == TRUE && counter_value <= warning_value->end)
177+ return_code = STATE_WARNING;
178+ }
179+ }else{
180+ if(check_critical_value == TRUE && check_range(counter_value, critical_value))
181+ {
182 return_code = STATE_CRITICAL;
183- else if (check_warning_value == TRUE && counter_value <= warning_value)
184+ }else if(check_warning_value == TRUE && check_range(counter_value, warning_value)) {
185 return_code = STATE_WARNING;
186+ }else{
187+ return_code = STATE_OK;
188+ }
189 }
190 break;
191
192@@ -411,21 +476,34 @@ int main(int argc, char **argv){
193 description = strtok(NULL,"&");
194 output_message = strdup (description);
195
196- if (critical_value > warning_value) { /* Normal thresholds */
197- if(check_critical_value==TRUE && age_in_minutes >= critical_value)
198- return_code=STATE_CRITICAL;
199- else if (check_warning_value==TRUE && age_in_minutes >= warning_value)
200- return_code=STATE_WARNING;
201- else
202- return_code=STATE_OK;
203- }
204- else { /* inverse thresholds */
205- if(check_critical_value==TRUE && age_in_minutes <= critical_value)
206- return_code=STATE_CRITICAL;
207- else if (check_warning_value==TRUE && age_in_minutes <= warning_value)
208- return_code=STATE_WARNING;
209+ if(allnumeric(critical_value_string)&&allnumeric(warning_value_string))
210+ {
211+ if (critical_value > warning_value)
212+ { /* Normal thresholds */
213+ if (check_critical_value == TRUE && age_in_minutes >= critical_value->end)
214+ return_code = STATE_CRITICAL;
215+ else if (check_warning_value == TRUE && age_in_minutes >= warning_value->end)
216+ return_code = STATE_WARNING;
217+ else
218+ return_code = STATE_OK;
219+ }
220 else
221- return_code=STATE_OK;
222+ { /* inverse thresholds */
223+ return_code = STATE_OK;
224+ if (check_critical_value == TRUE && age_in_minutes <= critical_value->end)
225+ return_code = STATE_CRITICAL;
226+ else if (check_warning_value == TRUE && age_in_minutes <= warning_value->end)
227+ return_code = STATE_WARNING;
228+ }
229+ }else{
230+ if(check_critical_value == TRUE && check_range(age_in_minutes, critical_value))
231+ {
232+ return_code = STATE_CRITICAL;
233+ }else if(check_warning_value == TRUE && check_range(age_in_minutes, warning_value)) {
234+ return_code = STATE_WARNING;
235+ }else{
236+ return_code = STATE_OK;
237+ }
238 }
239 }
240 break;
241@@ -563,11 +641,13 @@ int process_arguments(int argc, char **argv){
242 value_list = optarg;
243 break;
244 case 'w': /* warning threshold */
245- warning_value=strtoul(optarg,NULL,10);
246+ warning_value=parse_range_string(optarg);
247+ warning_value_string=optarg;
248 check_warning_value=TRUE;
249 break;
250 case 'c': /* critical threshold */
251- critical_value=strtoul(optarg,NULL,10);
252+ critical_value=parse_range_string(optarg);
253+ critical_value_string=optarg;
254 check_critical_value=TRUE;
255 break;
256 case 'd': /* Display select for services */
257diff --git a/plugins/utils.c b/plugins/utils.c
258index 4537390..f4f6433 100644
259--- a/plugins/utils.c
260+++ b/plugins/utils.c
261@@ -600,3 +600,44 @@ char *fperfdata (const char *label,
262
263 return data;
264 }
265+
266+char *fperfdatarange (const char *label,
267+ double val,
268+ const char *uom,
269+ const char *warn,
270+ const char *crit,
271+ int minp,
272+ double minv,
273+ int maxp,
274+ double maxv)
275+{
276+ char *data = NULL;
277+
278+ if (strpbrk (label, "'= "))
279+ asprintf (&data, "'%s'=", label);
280+ else
281+ asprintf (&data, "%s=", label);
282+
283+ asprintf (&data, "%s%f", data, val);
284+ asprintf (&data, "%s%s;", data, uom);
285+
286+ if (warn)
287+ asprintf (&data, "%s%s", data, warn);
288+
289+ asprintf (&data, "%s;", data);
290+
291+ if (crit)
292+ asprintf (&data, "%s%s", data, crit);
293+
294+ asprintf (&data, "%s;", data);
295+
296+ if (minp)
297+ asprintf (&data, "%s%f", data, minv);
298+
299+ if (maxp) {
300+ asprintf (&data, "%s;", data);
301+ asprintf (&data, "%s%f", data, maxv);
302+ }
303+
304+ return data;
305+}
306diff --git a/plugins/utils.h b/plugins/utils.h
307index d6e9c8f..bd8fe1d 100644
308--- a/plugins/utils.h
309+++ b/plugins/utils.h
310@@ -121,6 +121,16 @@ char *fperfdata (const char *,
311 int,
312 double);
313
314+char *fperfdatarange (const char *,
315+ double,
316+ const char *,
317+ const char *,
318+ const char *,
319+ int,
320+ double,
321+ int,
322+ double);
323+
324 /* The idea here is that, although not every plugin will use all of these,
325 most will or should. Therefore, for consistency, these very common
326 options should have only these meanings throughout the overall suite */