Last active
May 16, 2016 20:31
-
-
Save pmoranga/9c2af2c20df5df981640885f08670c18 to your computer and use it in GitHub Desktop.
Forked Raspberry Pi System Information PHP Script - Mobile Friendly Version and Misc Tweaks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Original Gist By: Jan van Haarst | |
// Original Gist: https://gist.github.com/4388108 | |
// Forked Gist By: Jon Faviell | |
// Forked Gist: https://gist.github.com/7e9138acb3975f8d886c | |
header("Cache-Control: no-cache, must-revalidate"); | |
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); | |
header("Pragma: no-cache"); | |
function human_filesize($bytes, $decimals = 2) { | |
$sz = 'BKMGTP'; | |
$factor = floor((strlen($bytes) - 1) / 3); | |
return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$sz[$factor]; | |
} | |
function get_rpi_model($hwrevision) { | |
// Use table from: http://www.raspberrypi-spy.co.uk/2012/09/checking-your-raspberry-pi-board-version/ | |
$mappings = [ | |
'0002' => 'Model B Revision 1.0', | |
'0003' => 'Model B Revision 1.0 + ECN0001 (no fuses, D14 removed)', | |
'0004' => 'Model B Revision 2.0 Mounting holes', | |
'0005' => 'Model B Revision 2.0 Mounting holes', | |
'0006' => 'Model B Revision 2.0 Mounting holes', | |
'0007' => 'Model A Mounting holes', | |
'0008' => 'Model A Mounting holes', | |
'0009' => 'Model A Mounting holes', | |
'000d' => 'Model B Revision 2.0 Mounting holes', | |
'000e' => 'Model B Revision 2.0 Mounting holes', | |
'000f' => 'Model B Revision 2.0 Mounting holes', | |
'0010' => 'Model B+', | |
'0011' => 'Compute Module', | |
'0012' => 'Model A+', | |
'a01041' => 'Pi 2 Model B (Sony, UK)', | |
'a21041' => 'Pi 2 Model B (Embest, China)', | |
'900092' => 'PiZero', | |
'a02082' => 'Pi 3 Model B (Sony, UK)', | |
'a22082' => 'Pi 3 Model B (Embest, China)' | |
]; | |
if (! isset($mappings[$hwrevision] )){ | |
return 'Model unknown'; | |
} | |
return $mappings[$hwrevision]; | |
} | |
$current_time = exec("date +'%d %b %Y %T %Z'"); | |
$frequency = exec("cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq") / 1000; | |
$processor = str_replace("-compatible processor", "", explode(": ", exec("cat /proc/cpuinfo | grep Processor"))[1]); | |
$cpu_temperature = round(exec("cat /sys/class/thermal/thermal_zone0/temp ") / 1000, 1); | |
$rpi_model = get_rpi_model( explode(": ", exec("cat /proc/cpuinfo | grep ^Revision"))[1] ) ; | |
//$RX = exec("ifconfig eth0 | grep 'RX bytes'| cut -d: -f2 | cut -d' ' -f1"); | |
//$TX = exec("ifconfig eth0 | grep 'TX bytes'| cut -d: -f3 | cut -d' ' -f1"); | |
list($system, $host, $kernel) = split(" ", exec("uname -a"), 4); | |
$host = exec('hostname -f');; | |
// uptime | |
$uptime_array = explode(" ", exec("cat /proc/uptime")); | |
$seconds = round($uptime_array[0], 0); | |
$minutes = $seconds / 60; | |
$hours = $minutes / 60; | |
$days = floor($hours / 24); | |
$hours = sprintf('%02d', floor($hours - ($days * 24))); | |
$minutes = sprintf('%02d', floor($minutes - ($days * 24 * 60) - ($hours * 60))); | |
if ($days == 0) { | |
$uptime = $hours . ":" . $minutes . " (hh:mm)"; | |
} | |
else if($days == 1) { | |
$uptime = $days . " day, " . $hours . ":" . $minutes . " (hh:mm)"; | |
} | |
else { | |
$uptime = $days . " days, " . $hours . ":" . $minutes . " (hh:mm)"; | |
} | |
// load averages | |
$loadavg = file("/proc/loadavg"); | |
if (is_array($loadavg)) { | |
$loadaverages = strtok($loadavg[0], " "); | |
for ($i = 0; $i < 2; $i++) { | |
$retval = strtok(" "); | |
if ($retval === FALSE) break; else $loadaverages .= " " . $retval; | |
} | |
} | |
// memory | |
$meminfo = file("/proc/meminfo"); | |
for ($i = 0; $i < count($meminfo); $i++) { | |
list($item, $data) = split(":", $meminfo[$i], 2); | |
$item = trim(chop($item)); | |
$data = intval(preg_replace("/[^0-9]/", "", trim(chop($data)))); //Remove non numeric characters | |
switch($item) { | |
case "MemTotal": $total_mem = $data; break; | |
case "MemFree": $free_mem = $data; break; | |
case "SwapTotal": $total_swap = $data; break; | |
case "SwapFree": $free_swap = $data; break; | |
case "Buffers": $buffer_mem = $data; break; | |
case "Cached": $cache_mem = $data; break; | |
default: break; | |
} | |
} | |
$used_mem = $total_mem - $free_mem; | |
$used_swap = $total_swap - $free_swap; | |
$percent_free = round(($free_mem / $total_mem) * 100); | |
$percent_used = round(($used_mem / $total_mem) * 100); | |
$percent_swap = round((($total_swap - $free_swap ) / $total_swap) * 100); | |
$percent_swap_free = round(($free_swap / $total_swap) * 100); | |
$percent_buff = round(($buffer_mem / $total_mem) * 100); | |
$percent_cach = round(($cache_mem / $total_mem) * 100); | |
$used_mem = human_filesize($used_mem*1024,0); | |
$used_swap = human_filesize($used_swap*1024,0); | |
$total_mem = human_filesize($total_mem*1024,0); | |
$free_mem = human_filesize($free_mem*1024,0); | |
$total_swap = human_filesize($total_swap*1024,0); | |
$free_swap = human_filesize($free_swap*1024,0); | |
$buffer_mem = human_filesize($buffer_mem*1024,0); | |
$cache_mem = human_filesize($cache_mem*1024,0); | |
// disk space in kb | |
exec("df -T -l -BKB -x tmpfs -x devtmpfs -x rootfs", $diskfree); | |
$count = 1; | |
while ($count < sizeof($diskfree)) { | |
list($drive[$count], $typex[$count], $size[$count], $used[$count], $avail[$count], $percent[$count], $mount[$count]) = split(" +", $diskfree[$count]); | |
$percent_part[$count] = str_replace( "%", "", $percent[$count]); | |
$count++; | |
} | |
?> | |
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta rel="icon" type="image/png" href="favicon.ico"> | |
<meta name="viewport" content="width=device-width"> | |
<title>Raspberry Pi System Information</title> | |
<style type="text/css"> | |
html, body { | |
background-color:#111; | |
font-family:monospace; | |
font-size:10px; | |
} | |
body { | |
color:#fff; | |
margin:25px auto 0px auto; | |
text-align:center; | |
} | |
#Content { | |
background-color:#bd1143; | |
border:2px solid #111; | |
/*border-radius:15px;*/ | |
margin:0px auto 0px auto; | |
padding:15px; | |
text-align:left; | |
width:360px; | |
} | |
a { | |
background-color:#222; | |
border:1px solid #111; | |
border-radius:10px; | |
color:#76a928; | |
display:block; | |
height:50px; | |
line-height:50px; | |
margin:0px 0px 10px 0px; | |
text-align:center; | |
text-decoration:none; | |
text-shadow:1px 1px #111; | |
text-transform:uppercase; | |
vertical-align:middle; | |
box-sizing:border-box; | |
} | |
a:hover { | |
background-color:#111; | |
text-decoration:none; | |
} | |
a:last-of-type { | |
margin:0px 0px 0px 0px; | |
} | |
table { | |
background-color:#111; | |
border:1px solid#111; | |
border-radius:11px; | |
border-spacing:0px; | |
margin-bottom:10px; | |
width:360px; | |
box-sizing:border-box; | |
} | |
td { | |
background:#333; | |
border:1px solid #111; | |
line-height:25px; | |
height:25px; | |
padding:0px 5px 0px 5px; | |
vertical-align:middle; | |
box-sizing:border-box; | |
} | |
td.center { | |
text-align:center; | |
} | |
td.head { | |
background-color:#222; | |
color:#76a928; | |
font-weight:bold; | |
text-shadow:1px 1px #111; | |
} | |
td.right { | |
padding-right:6px; | |
text-align:right; | |
} | |
td.column1 { | |
width:25%; | |
} | |
td.column2 { | |
width:25%; | |
} | |
td.column3 { | |
padding:0px 0px 0px 0px; | |
width:35%; | |
} | |
td.column3 div { | |
background-color:#76a928; | |
height:25px; | |
} | |
td.column4 { | |
width:15%; | |
} | |
@media screen and ( max-width:960px ) { | |
html, body { | |
background-color:#bd1143; | |
} | |
body { | |
margin:0px; | |
} | |
#Content { | |
border:none; | |
padding:10px 10px 5px 10px; | |
width:100%; | |
} | |
a:last-of-type { | |
margin:0px 0px 5px 0px | |
} | |
table { | |
width:100%; | |
} | |
} | |
</style> | |
</head> | |
<body> | |
<div id="Content"> | |
<table id="general"> | |
<tr> | |
<td colspan="2" class="head center" style="border-top-left-radius:10px;border-top-right-radius:10px;">System Info</td> | |
</tr> | |
<tr> | |
<td width="50%">Hostname</td> | |
<td width="50%" id="host"><?php echo $host; ?></td> | |
</tr> | |
<tr> | |
<td>System Time</td> | |
<td id="time"><?php echo $current_time; ?></td> | |
</tr> | |
<tr> | |
<td>Kernel</td> | |
<td id="kernel"><?php echo $system . " " . $kernel; ?></td> | |
</tr> | |
<tr> | |
<td>RPi Model</td> | |
<td id="rpi_model"><?php echo $rpi_model; ?></td> | |
</tr> | |
<tr> | |
<td>Processor</td> | |
<td id="processor"><?php echo $processor; ?></td> | |
</tr> | |
<tr> | |
<td>CPU Frequency</td> | |
<td id="freq"><?php echo $frequency . " MHz"; ?></td> | |
</tr> | |
<tr> | |
<td>Load Average</td> | |
<td id="loadavg"><?php echo $loadaverages; ?></td> | |
</tr> | |
<tr > | |
<td>CPU Temperature</td> | |
<td id="cpu_temperature"><?php echo $cpu_temperature . "℃"; ?></td> | |
</tr> | |
<tr> | |
<td style="border-bottom-left-radius:10px;">Uptime</td> | |
<td style="border-bottom-right-radius:10px;" id="uptime"><?php echo $uptime; ?></td> | |
</tr> | |
</table> | |
<table> | |
<tr> | |
<td width="50%" colspan="2" style="border-top-left-radius:10px;" class="head right" id="total_mem"><?php echo $total_mem; ?></td> | |
<td width="50%" colspan="2" style="border-top-right-radius:10px;" class="head">Memory</td> | |
</tr> | |
<tr> | |
<td class="column1">Used</td> | |
<td class="right column2" id="used_mem"><?php echo $used_mem; ?></td> | |
<td class="column3"><div style="width:<?php echo $percent_used; ?>%"> </div></td> | |
<td class="right column4" id="percent_used"><?php echo $percent_used; ?>%</td> | |
</tr> | |
<tr> | |
<td>Free</td> | |
<td class="right" id="free_mem"><?php echo $free_mem; ?></td> | |
<td class="column3"><div style="width:<?php echo $percent_free; ?>%"></div></td> | |
<td class="right" id="percent_free"><?php echo $percent_free; ?>%</td> | |
</tr> | |
<tr> | |
<td>Buffered</td> | |
<td class="right" id="buffer_mem"><?php echo $buffer_mem; ?></td> | |
<td class="column3"><div style="width:<?php echo $percent_buff; ?>%"></div></td> | |
<td class="right" id="percent_buff"><?php echo $percent_buff; ?>%</td> | |
</tr> | |
<tr> | |
<td style="border-bottom-left-radius:10px;">Cached</td> | |
<td class="right" id="cache_mem"><?php echo $cache_mem; ?></td> | |
<td class="column3"><div style="width:<?php echo $percent_cach; ?>%"></div></td> | |
<td class="right" id="percent_cach" style="border-bottom-right-radius:10px;"><?php echo $percent_cach; ?>%</td> | |
</tr> | |
</table> | |
<table> | |
<tr> | |
<td width="50%" colspan="2" style="border-top-left-radius:10px;" class="head right" id="total_swap"><?php echo $total_swap; ?></td> | |
<td width="50%" colspan="2" style="border-top-right-radius:10px;" class="head">Swap</td> | |
</tr> | |
<tr> | |
<td class="column1">Used</td> | |
<td class="right column2" id="used_swap"><?php echo $used_swap; ?></td> | |
<td class="column3"><div style="width:<?php echo $percent_swap; ?>%"></div></td> | |
<td class="right column4" id="percent_swap"><?php echo $percent_swap; ?>%</td> | |
</tr> | |
<tr> | |
<td style="border-bottom-left-radius:10px;">Free</td> | |
<td class="right" id="free_swap"><?php echo $free_swap; ?></td> | |
<td class="column3"><div style="width:<?php echo $percent_swap_free; ?>%"></div></td> | |
<td class="right" id="percent_swap_free" style="border-bottom-right-radius:10px;"><?php echo $percent_swap_free; ?>%</td> | |
</tr> | |
</table> | |
<?php | |
for ($i = 1; $i < $count; $i++) { | |
$total = human_filesize(intval(preg_replace("/[^0-9]/", "", trim($size[$i])))*1024,0); | |
$usedspace = human_filesize(intval(preg_replace("/[^0-9]/", "", trim($used[$i])))*1024,0); | |
$freespace = human_filesize(intval(preg_replace("/[^0-9]/", "", trim($avail[$i])))*1024,0); | |
echo "\n\t\t\t<table>"; | |
echo "\n\t\t\t\t<tr>"; | |
echo "\n\t\t\t\t\t<td class=\"head right\" colspan=\"2\" width=\"50%\" style=\"border-top-left-radius:10px;\">" . $total . "</td>"; | |
echo "\n\t\t\t\t\t<td class=\"head\" colspan=\"2\" width=\"50%\" style=\"border-top-right-radius:10px;\">" . $mount[$i] . " (" . $typex[$i] . ")</td>"; | |
echo "\n\t\t\t\t</tr>"; | |
echo "\n\t\t\t\t<tr>"; | |
echo "\n\t\t\t\t\t<td class=\"column1\">Used</td>"; | |
echo "\n\t\t\t\t\t<td class=\"right column2\">" . $usedspace . "</td>"; | |
echo "\n\t\t\t\t\t<td class=\"column3\"><div style=\"width:" . $percent[$i] . "\"><div></td>"; | |
echo "\n\t\t\t\t\t<td class=\"right column4\">" . $percent[$i] . "</td>"; | |
echo "\n\t\t\t\t</tr>"; | |
echo "\n\t\t\t\t<tr>"; | |
echo "\n\t\t\t\t\t<td class=\"column1\" style=\"border-bottom-left-radius:10px;\">Free</td>"; | |
echo "\n\t\t\t\t\t<td class=\"right column2\">" . $freespace . "</td>"; | |
echo "\n\t\t\t\t\t<td class=\"column3\"><div style=\"width:" . (100 - (floatval($percent_part[$i]))) . "%\"></td>"; | |
echo "\n\t\t\t\t\t<td class=\"right column4\" style=\"border-bottom-right-radius:10px;\">" . (100 - (floatval($percent_part[$i]))) . "%</td>"; | |
echo "\n\t\t\t\t</tr>"; | |
echo "\n\t\t\t</table>"; | |
} | |
?> | |
<a href="javascript:location.reload(true);" title="Refresh">Refresh</a> | |
<a href="https://gist.github.com/7e9138acb3975f8d886c" target="_blank">Source</a> | |
</div> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment