Logoj0ke.net Open Build Service > Projects > server:monitoring > nagios-plugins-various > check_curl2
Sign Up | Log In

File check_curl2 of Package nagios-plugins-various

 
1
#!/usr/bin/php -q
2
<?php
3
4
// Changeable variables
5
$Debug=0;
6
$Timeout=10;
7
// --------------------
8
9
$Continue=1;
10
$Agent="Mozilla/5.0 (X11; U; Linux i686; cs; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7";
11
$Status=0;
12
$InludePerf=1;
13
$Msg='';
14
$ShowPage=0;
15
16
$ch = curl_init();  
17
$Pocet=count($argv);
18
if ($Pocet>1){
19
  for ($i=1;$i<$Pocet;$i++){
20
    switch ($argv[$i]){
21
      case '-U':    
22
        if ($Pocet>$i+1){
23
          curl_setopt($ch, CURLOPT_URL, $argv[++$i]);
24
          if ($Debug)echo "\nDEBUG: -U ".$argv[$i];
25
        }else{
26
          echo "ERROR in parsing argument -U: missing value";
27
          Manual();
28
          exit(2);
29
        }
30
        break;
31
32
      case '-A':    
33
        if ($Pocet>$i+1){
34
          $Agent=$argv[++$i];
35
          if ($Debug)echo "\nDEBUG: -A ".$argv[$i];
36
        }else{
37
          echo "ERROR in parsing argument -A: missing value";
38
          Manual();
39
          exit(2);
40
        }
41
        break;
42
43
      case '-T':    
44
        if ($Pocet>$i+1){
45
          $Timeout=$argv[++$i];
46
          if ($Debug)echo "\nDEBUG: -T ".$argv[$i];
47
        }else{
48
          echo "ERROR in parsing argument -T: missing value";
49
          Manual();
50
          exit(2);
51
        }
52
        break;
53
54
      case '-G':    
55
        if ($Pocet>$i+1){
56
          $Grep=$argv[++$i];
57
          if ($Debug)echo "\nDEBUG: -G ".$argv[$i];
58
        }else{
59
          echo "ERROR in parsing argument -G: missing value";
60
          Manual();
61
          exit(2);
62
        }
63
        break;
64
65
      case '-L':    
66
        $ShowPage=1;
67
        if ($Debug)echo "\nDEBUG: -L";
68
        break;
69
70
      case '-F':    
71
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
72
        if ($Debug)echo "\nDEBUG: -F";
73
        break;
74
75
      case '-X':    
76
        $InludePerf=0;
77
        if ($Debug)echo "\nDEBUG: -X";
78
        break;
79
80
      case '-I':    
81
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  0);
82
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,  0);
83
        if ($Debug)echo "\nDEBUG: -I";
84
        break;
85
86
      case '-Tc':    
87
        if ($Pocet>$i+1){
88
          $Tc=$argv[++$i];
89
          if ($Debug)echo "\nDEBUG: -Tc ".$argv[$i];
90
        }else{
91
          echo "ERROR in parsing argument -Tc: missing value";
92
          Manual();
93
          exit(2);
94
        }
95
        break;
96
97
      case '-Tw':    
98
        if ($Pocet>$i+1){
99
          $Tw=$argv[++$i];
100
          if ($Debug)echo "\nDEBUG: -Tw ".$argv[$i];
101
        }else{
102
          echo "ERROR in parsing argument -Tw: missing value";
103
          Manual();
104
          exit(2);
105
        }
106
        break;
107
108
      case '-Sbc':    
109
        if ($Pocet>$i+1){
110
          $Sbc=$argv[++$i];
111
          if ($Debug)echo "\nDEBUG: -Sbc ".$argv[$i];
112
        }else{
113
          echo "ERROR in parsing argument -Sbc: missing value";
114
          Manual();
115
          exit(2);
116
        }
117
        break;
118
119
      case '-Sbw':    
120
        if ($Pocet>$i+1){
121
          $Sbw=$argv[++$i];
122
          if ($Debug)echo "\nDEBUG: -Sbw ".$argv[$i];
123
        }else{
124
          echo "ERROR in parsing argument -Sbw: missing value";
125
          Manual();
126
          exit(2);
127
        }
128
        break;
129
130
      case '-Soc':    
131
        if ($Pocet>$i+1){
132
          $Soc=$argv[++$i];
133
          if ($Debug)echo "\nDEBUG: -Soc ".$argv[$i];
134
        }else{
135
          echo "ERROR in parsing argument -Soc: missing value";
136
          Manual();
137
          exit(2);
138
        }
139
        break;
140
141
      case '-Sow':    
142
        if ($Pocet>$i+1){
143
          $Sow=$argv[++$i];
144
          if ($Debug)echo "\nDEBUG: -Sow ".$argv[$i];
145
        }else{
146
          echo "ERROR in parsing argument -Sow: missing value";
147
          Manual();
148
          exit(2);
149
        }
150
        break;
151
152
      case '-S':    
153
        if ($Pocet>$i+2){
154
          $String1=$argv[++$i];
155
          $String2=$argv[++$i];
156
          if ($Debug)echo "\nDEBUG: -S ".$String1.' '.$String2;
157
        }else{
158
          echo "ERROR in parsing argument -S: missing values";
159
          Manual();
160
          exit(2);
161
        }
162
        break;
163
        
164
      case '-O':    
165
        $UseOutput=1;
166
        if ($Debug)echo "\nDEBUG: -O";
167
        break;
168
169
      case '--help':
170
      case '-h':
171
        Manual();
172
        exit(2);
173
        break; 
174
175
      default:
176
        echo "ERROR in argument parsing: ".$argv[$i];
177
        Manual();
178
        exit(2);
179
        break;
180
    }
181
  }
182
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
183
  curl_setopt($ch, CURLOPT_HEADER, 0);
184
  curl_setopt($ch, CURLOPT_USERAGENT, $Agent );
185
  curl_setopt($ch, CURLOPT_TIMEOUT, $Timeout);  
186
187
  if (isset($Tc) and isset($Tw) and  ($Tw >= $Tc) ){
188
    echo "ERROR in arguments Tw ($Tw) >= Tc ($Tc) !!!";
189
    Manual();
190
    exit(2);
191
  } 
192
  if (isset($Sbc) and isset($Sbw) and  ($Sbw >= $Sbc) ){
193
    echo "ERROR in arguments Sbw ($Sbw) >= Sbc ($Sbc) !!!";
194
    Manual();
195
    exit(2);
196
  } 
197
  if (isset($Soc) and isset($Sow) and  ($Sow >= $Soc) ){
198
    echo "ERROR in arguments Sbw ($Sow) >= Sbc ($Soc) !!!";
199
    Manual();
200
    exit(2);
201
  } 
202
203
  // EXEC    
204
  $time_start = getmicrotime();
205
  $Buff=@curl_exec($ch);
206
  $Time = round(getmicrotime() - $time_start,3);
207
  $Size=strlen($Buff);
208
  $errnum=curl_errno($ch);
209
  if ($errnum){
210
    if ($errnum==28){
211
      echo 'Timeout '.$Timeout.'sec exceeded.';
212
      exit(2);
213
    }else{
214
      echo "ERROR in opening page! Err:".curl_error($ch);
215
      exit(2);
216
    }
217
  }
218
  @curl_close($ch);
219
  
220
  if (isset($Sbc) and ($Size > $Sbc)){
221
    $Status=2;
222
    $Msg.='Size '.$Size.'B below limit '.$Sbc.'B';
223
  }elseif (isset($Sbw) and ($Size > $Sbw)){
224
    $Status=1;
225
    $Msg.='Size '.$Size.'B below limit '.$Sbw.'B';
226
  }
227
228
  if (isset($Soc) and ($Size < $Soc)){
229
    $Status=2;
230
    $Msg.='Size '.$Size.'B over limit '.$Soc.'B';
231
  }elseif (isset($Sow) and ($Size < $Sow)){
232
    $Status=1;
233
    $Msg.='Size '.$Size.'B over limit '.$Sow.'B';
234
  }
235
236
  if (isset($Tc) and ($Time > $Tc)){
237
    $Status=2;
238
    $Msg.='Download time '.$Time.'sec exceeded time limit '.$Tc.'sec';
239
  }elseif (isset($Tw) and ($Time > $Tw)){
240
    $Status=1;
241
    $Msg.='Download time '.$Time.'sec exceeded time limit '.$Tw.'sec';
242
  }
243
244
  if (isset($Grep)){
245
    if (!strstr($Buff,$Grep)){
246
      $Status=2;
247
      $Msg.='String '.$Grep.' not found!';
248
    }
249
  }
250
251
  if (isset($String1) or isset($String2)){
252
    if (isset($String1) and isset($String2)){
253
      echo "\n".$String1."\n".$String2."\n";
254
      $First=strpos($Buff,$String1);
255
      if ($First){
256
        $Last=strpos($Buff,$String2,($First+strlen($String1)));
257
        if ($Last){
258
          echo $First.'-'.$Last.' - '.substr($Buff,($First+strlen($String1)),($Last-$First-strlen($String1)) );
259
        }else{
260
          echo "ERROR in arguments -S. Second string ".$String2.' not found!!!';
261
          Manual();
262
          exit(2);
263
        }
264
      }else{
265
        echo "ERROR in arguments -S. First string ".$String1.' not found!!!';
266
        Manual();
267
        exit(2);
268
      }
269
    }else{
270
      echo "ERROR in arguments -S. Must be two strings! Before and after.";
271
      Manual();
272
      exit(2);
273
    }
274
  }
275
276
  if (isset($UseOutput)){
277
    $StatusHeader = "Status:";
278
    $StatusSeperator = "-";
279
    $First=strpos($Buff,$StatusHeader);
280
    $Last=strpos($Buff,$StatusSeperator,($First+strlen($StatusHeader)));
281
    $OutputStatus = trim(substr($Buff,($First+strlen($StatusHeader)),($Last-$First-strlen($StatusHeader)) ) );
282
    if ( strtoupper($OutputStatus) == "CRITICAL" ) {
283
        $Status=2;
284
        $Msg.=substr($Buff,$First+8);
285
    } elseif ( strtoupper($OutputStatus) == "WARNING" ){
286
        $Status=1;
287
        $Msg.=substr($Buff,$First+8);
288
    } else {
289
        $Status=0;
290
        $Msg.=substr($Buff,$First+8);
291
    }
292
  }
293
294
295
296
  if (empty($Msg))$Msg='Page OK';
297
  if ($InludePerf)$Msg.= " |time=$Time size=$Size";
298
  echo $Msg;
299
  if ($ShowPage)echo "\n\n----------------------------- Page content ----------------------------\n\n".$Buff;
300
  exit($Status);
301
    
302
}else{
303
  Manual();
304
}
305
306
function getmicrotime(){ 
307
  list($usec, $sec) = explode(" ",microtime()); 
308
  return ((float)$usec + (float)$sec); 
309
} 
310
311
function Manual(){
312
echo "------- check_curl.php written by Vit Safar (CZ), v1.0, 20.10.2006 ---------
313
----------------- modified by Donald Fellow (US), v1.1, 08.06.2007 ---------\n
314
 Syntax:
315
    -U URL (s)
316
    -A Agent (s)(default: Mozilla/5.0 ... )
317
    -G Grep page on STRING (s)
318
    -L Show page (-)
319
    -F Follow redirects (-)
320
    -I Ignore SSL certificate errors (-)
321
    -X Exclude performance data (default: include)
322
    -Tc Ccritical page return time (i)
323
    -Tw Warning page return time (i)
324
    -Sbc Critical page size below SIZE (i)
325
    -Soc Critical page size over SIZE (i)
326
    -Sbw Warning page size below SIZE (i)
327
    -Sow Warning page size over SIZE (i)
328
    -S Find string between ARG1 and ARG2, return first match (s s) (example: value=\" \" )
329
    -T Timeout (i)(default: 10sec)
330
    -O Output Driven Check - Page Should respond with \"Status: OK\" or otherwise
331
\n\n Example:
332
  check_curl.php -U http://test.example.net\n\n";
333
}
334
335
?>
336
337
338