ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/reports/php/latest/latest.php
Revision: 1.53
Committed: Sat Jun 30 12:12:49 2007 UTC (17 years, 5 months ago) by tdb
Branch: MAIN
CVS Tags: HEAD
Changes since 1.52: +9 -9 lines
Log Message:
More short tag fixes.

File Contents

# Content
1 <?php
2
3 #
4 # i-scream central monitoring system
5 # http://www.i-scream.org
6 # Copyright (C) 2000-2002 i-scream
7 #
8 # This program is free software; you can redistribute it and/or
9 # modify it under the terms of the GNU General Public License
10 # as published by the Free Software Foundation; either version 2
11 # of the License, or (at your option) any later version.
12 #
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
17 #
18 # You should have received a copy of the GNU General Public License
19 # along with this program; if not, write to the Free Software
20 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 #
22
23 # CONFIGURABLE CONSTANTS: -
24
25 include("latest_config.inc.php");
26
27 #
28 # END CONFIGURATION
29
30 include("iutils.inc.php");
31
32 if ($formMethod == "GET") {
33 $machine = isset($_GET['machine']) ? $_GET['machine'] : "";
34 }
35
36
37 function printLine($title) {
38 echo "<hr style=\"color:#9999ff;\">";
39 echo "<b>$title</b>";
40 }
41
42
43 function showUptime($title, $value, $input, $graph="") {
44 $report = $value;
45
46 $value = getPregMatch($value, $input);
47 if (!isset($value)) {
48 $value = "<i><font color=\"#999999\">not sent</font></i>";
49 }
50 ?>
51 <table border="0" width="100%">
52 <tr>
53 <td width="50%" align="right" valign="top">
54 <b><?php echo $title?></b>
55 </td>
56 <td width="50%" align="left" valign="top">
57 <?php if (preg_match("/^[0-9]+\.?[0-9]*$/", $value)) {
58 linkToHistory($graph);
59 } ?>
60 <?php echo uptime($value)?> (<?php echo $value?> seconds)</td>
61 </tr>
62 </table>
63 <?php
64 }
65
66
67 function showStat($title, $value, $input, $graph="") {
68
69 $report = $value;
70
71 $value = getPregMatch($value, $input);
72 if (!isset($value)) {
73 $value = "<i><font color=\"#999999\">not sent</font></i>";
74 }
75 ?>
76 <table border="0" width="100%">
77 <tr>
78 <td width="50%" align="right" valign="top">
79 <b><?php echo $title?></b>
80 </td>
81 <td width="50%" align="left" valign="top">
82 <?php if (preg_match("/^[0-9]+\.?[0-9]*$/", $value)) {
83 linkToHistory($graph);
84 } ?>
85 <?php echo $value?></td>
86 </tr>
87 </table>
88 <?php
89 }
90
91
92 function linkToHistory($graph) {
93 global $machine;
94 if(!empty($graph)) {
95 echo <<<EOT
96 <a href="graphs.php?machine_name=$machine&graph=$graph&submit=Show"><img src="minichart.gif" alt="View historical graphs of this data" width="20" height="20" border="0"></a>
97 EOT;
98 }
99 }
100
101
102 # convert bytes to MB
103 function b2Mb($bytes) {
104 $mb = $bytes / (1024*1024);
105 return (int) $mb;
106 }
107
108
109 # Convert seconds uptime to something readable
110 function uptime($until) {
111 $day = date('z', $until);
112 $hour = date('G', $until);
113 if ($hour == 0) { # everything's an hour ahead, so roll back
114 $hour = 23;
115 $day = $day - 1;
116 } else {
117 $hour = $hour - 1;
118 }
119 $minute = date('i', $until);
120 $return = "";
121 if ($day) {
122 $return = "$return$day";
123 if ($day == 1) {
124 $return = "$return Day ";
125 } else {
126 $return = "$return Days ";
127 }
128 }
129 if ($hour) {
130 $return = "$return$hour";
131 if ($hour == 1) {
132 $return = "$return Hour ";
133 } else {
134 $return = "$return Hours ";
135 }
136 }
137 $return = "$return$minute";
138 if ($minute == 1) {
139 $return = "$return Min";
140 } else {
141 $return = "$return Mins";
142 }
143 return $return;
144 }
145
146
147 # show all disk information.
148 function showDisks($diskRoot, $units, $input) {
149 include("latest_config.inc.php");
150
151 $i = 0;
152 while(1) {
153 $name = getPregMatch("$diskRoot.p$i.attributes.name", $input);
154 $mount = getPregMatch("$diskRoot.p$i.attributes.mount", $input);
155 if ($name || $mount) {
156 $used = "$diskRoot.p$i.attributes.used";
157 $total = "$diskRoot.p$i.attributes.total";
158 $graph = preg_replace("/_/", "$hex_underscore", $mount);
159 $graph = preg_replace("/\//", "$hex_slash", $graph);
160 $graph = preg_replace("/\\\\/", "$hex_bslash", $graph);
161 $graph = preg_replace("/ /", "$hex_space", $graph);
162 $graph = preg_replace("/:/", "$hex_colon", $graph);
163 $totalinodes = getPregMatch("$diskRoot.p$i.attributes.totalinodes", $input);
164 $freeinodes = getPregMatch("$diskRoot.p$i.attributes.freeinodes", $input);
165 showBar("$name ($mount)<br>space used", $used, $total, $units, $input, "disk-$graph");
166 showBar("inodes used", (float) $freeinodes, (float) $totalinodes, " inodes", $input, "", "swap");
167 showStat("FS Type", "$diskRoot.p$i.attributes.fstype", $input);
168 print " <br><br>\n";
169 }
170 else {
171 break;
172 }
173 $i++;
174 }
175 }
176
177
178 # show all disk IO information.
179 function showDiskIO($diskRoot, $input) {
180 include("latest_config.inc.php");
181
182 $i = 0;
183 while(1) {
184 $name = getPregMatch("$diskRoot.p$i.attributes.name", $input);
185 if ($name) {
186 $graph = preg_replace("/_/", "$hex_underscore", $name);
187 $graph = preg_replace("/\//", "$hex_slash", $graph);
188 $graph = preg_replace("/\\\\/", "$hex_bslash", $graph);
189 $graph = preg_replace("/ /", "$hex_space", $graph);
190 $graph = preg_replace("/:/", "$hex_colon", $graph);
191 print "<br><center><b>(Disk $name)</b></center>";
192 showStat("Read bytes (per sec)", "$diskRoot.p$i.attributes.rbytes", $input, "diskio-$graph");
193 showStat("Write bytes (per sec)", "$diskRoot.p$i.attributes.wbytes", $input, "diskio-$graph");
194 print " <br>\n";
195 }
196 else {
197 break;
198 }
199 $i++;
200 }
201 }
202
203
204 # show all network information.
205 function showNet($netRoot, $input) {
206 include("latest_config.inc.php");
207
208 $i = 0;
209 while(1) {
210 $name = getPregMatch("$netRoot.p$i.attributes.name", $input);
211 if ($name) {
212 $graph = preg_replace("/_/", "$hex_underscore", $name);
213 $graph = preg_replace("/\//", "$hex_slash", $graph);
214 $graph = preg_replace("/\\\\/", "$hex_bslash", $graph);
215 $graph = preg_replace("/ /", "$hex_space", $graph);
216 $graph = preg_replace("/:/", "$hex_colon", $graph);
217 $graph = preg_replace("/\(/", "$hex_lbracket", $graph);
218 $graph = preg_replace("/\)/", "$hex_rbracket", $graph);
219 $graph = preg_replace("/\+/", "$hex_plus", $graph);
220 $graph = preg_replace("/#/", "$hex_hash", $graph);
221 print "<br><center><b>(Network Interface $name)</b></center>";
222 showStat("Received bytes (per sec)", "$netRoot.p$i.attributes.rx", $input, "net-$graph");
223 showStat("Transfered bytes (per sec)", "$netRoot.p$i.attributes.tx", $input, "net-$graph");
224 print " <br>\n";
225 }
226 else {
227 break;
228 }
229 $i++;
230 }
231 }
232
233
234 # show all mail queue information
235 function showMailQ($mailqRoot, $input) {
236 include("latest_config.inc.php");
237
238 $i = 0;
239 while(1) {
240 $name = getPregMatch("$mailqRoot.p$i.attributes.name", $input);
241 if ($name) {
242 print "<br><center><b>($name)</b></center>";
243 $name = preg_replace("/\s+/", "", $name);
244 showStat("Messages in queue", "$mailqRoot.p$i.attributes.size", $input, "mailq-$name");
245 print " <br>\n";
246 }
247 else {
248 break;
249 }
250 $i++;
251 }
252 }
253
254
255 # Return a preg_match result.
256 function getPregMatch($value, $input) {
257 preg_match("/$value=([^\,\}]*)[\,\}]/", $input, $matches);
258 if(!isset($matches[1])) {
259 return;
260 }
261 return $matches[1];
262 }
263
264
265 # show a bar-represented value.
266 function showBar($title, $value, $max, $units, $input, $graph="", $arrange='normal') {
267
268 include("latest_config.inc.php");
269
270 $report = $value;
271 if (!is_int($value)) {
272 $value = getPregMatch($value, $input);
273 }
274 if (!is_int($max)) {
275 $max = getPregMatch($max, $input);
276 }
277 if (!isset($value) || !isset($max)) {
278 return;
279 }
280
281 if ($arrange == 'swap') {
282 $value = $max - $value;
283 }
284
285 if ($units == 'MB') {
286 $value = b2Mb ($value);
287 $max = b2Mb ($max);
288 }
289
290 if(empty($max)) {
291 $width = 1;
292 }
293 else {
294 $width = intval($max_width * $value / $max);
295 if ($width < 1) {
296 $width = 1;
297 }
298 }
299
300 ?>
301 <table border="0" cellpadding="0" cellspacing="0" align="center">
302 <tr>
303 <td colspan="2"><?php linkToHistory($graph); ?> <b><?php echo $title?></b> <font size="2">(<?php echo $value?><?php echo $units?>)</font></td>
304 </tr>
305 <tr>
306 <td colspan="2" bgcolor="#eeeeff"><img src="<?php echo $barImage?>" border="0" height="20" width="<?php echo $width?>"></td>
307 </tr>
308 <tr>
309 <td colspan="2"><img src="<?php echo $scaleImage?>" border="0" height="11" width="<?php echo $max_width?>"></td>
310 </tr>
311 <tr>
312 <td align="left">0<?php echo $units?></td>
313 <td align="right"><?php echo $max?><?php echo $units?></td>
314 </tr>
315 </table>
316 <?php
317 }
318
319
320 ?>
321
322 <?php include($titleHTML); ?>
323
324 <?php printLine("Display the latest information received from a host"); ?>
325
326 <form method="<?php echo $formMethod ?>" action="<?php echo $thisPage ?>">
327 <?php
328
329 $file_array = getdirArray($latestDirectory,'asort');
330 print "<select size=\"1\" name=\"machine\">";
331 if ($machine) { ?>
332 <option selected value="<?php echo $machine ?>"><?php echo $machine ?></option>
333 <option value="">----------------</option>
334 <?php }
335 foreach($file_array as $file_name) {
336 #if (is_dir($file_name)) {
337 print "<option value=\"$file_name\">$file_name</option>";
338 #}
339 }
340 print "</select>";
341
342 ?>
343 <input type="submit" name="submit" value="Display">
344 </form>
345
346 <?php if ($machine) {
347
348 $last_modified = filemtime("$latestDirectory/$machine/$latestData");
349 clearstatcache();
350 $data_age = time() - $last_modified;
351
352 $last_modified = date("l jS F Y - g:ia", $last_modified);
353
354 if ($data_age > $warning_age) {
355 $warning = <<<EOT
356 <br>
357 <font color="red"><b>
358 Warning:
359 </b></font>
360 This realtime report is too old to be considered recent
361 EOT;
362 }
363 else {
364 $warning = "";
365 }
366
367 echo <<<EOT
368 <table border="0" bgcolor="#000066" cellpadding="3" cellspacing="1">
369 <tr>
370 <td bgcolor="#000066">
371 &nbsp;
372 </td>
373 <td bgcolor="#ffffcc">
374 <font face="arial,sans-serif" size="2">
375 <b>Receipt date:</b> $last_modified
376 $warning
377 </font>
378 </td>
379 </tr>
380 </table>
381 EOT;
382
383 # Read the file.
384 if (file_exists("$latestDirectory/$machine/$latestData")) {
385 $input = file("$latestDirectory/$machine/$latestData");
386 # All we need is the first line if there is more than one line.
387 $input = $input[0];
388 }
389
390 if (!isset($input)) {
391 echo "<br><br>There are currently no latest details about <b>$machine</b>. Please notify your i-scream server administrator if you believe this to be incorrect.";
392 }
393 else {
394 # Display the data specified in the display include.
395 include("latest_display.inc.php");
396 }
397 }
398
399 ?>
400
401 <?php printLine(""); ?>
402
403 <?php include($bottomHTML); ?>