Create a gist now

Instantly share code, notes, and snippets.

Embed
A simple script for getting and displaying server stats in StatusBoard
<?php
//add your server aliases here
$servers = array(
"185.14.184.234" => "mcfly.bensmann.no",
"185.14.184.xxx" => "another.server.com",
);
//this script is triggered by this command from the terminal or cron:
//echo "time=`uptime`&df=`df -h`" | curl -s -d @- http://domain.com/path/to/script.php
//record data
if(isset( $_POST['time'], $_POST['df'] )){
//getting the server load
preg_match('/\d+\.\d{2}/', $_POST['time'],$load);
//get available disk space
preg_match('/\d+%/', $_POST['df'],$df);
if(!count($load) || !count($df))
return false;
$stats = array(
"df" => $df[0],
"load" => $load[0],
"ip" => $_SERVER["REMOTE_ADDR"]
);
save_to_stats($stats);
}else{
output_stats_table();
}
function save_to_stats($stats){
$data = json_decode( file_get_contents("stats.json"), true );
$data[ $stats['ip'] ] = $stats;
file_put_contents("stats.json", json_encode($data), LOCK_EX);
}
function output_stats_table(){
global $servers;
//display data
$data = json_decode( file_get_contents("stats.json"), true );
?>
<table id="projects">
<?php foreach($data as $server => $stats): ?>
<tr>
<td class="server-name" style="width:400px; text-transform:lowercase;"><?php echo $servers[$stats['ip']] ; ?></td>
<td class="server-disk-space"><?php echo $stats['load']; ?></td>
<td class="projectsBars">
<?php for( $i = 1, $j = number_of_bars($stats['df']); $i <= $j; $i++ ): ?>
<div class="barSegment value<?php echo $i; ?>"></div>
<?php endfor; ?>
</td>
</tr>
<?php endforeach; ?>
</table>
<?php
};
function number_of_bars($df){
$value = (int) str_replace('%', '', $df) / 10;
return round( ($value > 8 ? 8 : $value) * .8 );
}
@haincha

This comment has been minimized.

Show comment
Hide comment
@haincha

haincha Apr 16, 2013

Any chance you could provide any assistance? Plugging in my server's info and loading the script, it doesn't load. I run server from home, so it has a local IP, then I have my domain.com, running the echo | curl from my server doesn't load anything. No errors are produced, just keeps a blank page.

haincha commented Apr 16, 2013

Any chance you could provide any assistance? Plugging in my server's info and loading the script, it doesn't load. I run server from home, so it has a local IP, then I have my domain.com, running the echo | curl from my server doesn't load anything. No errors are produced, just keeps a blank page.

@yankcrime

This comment has been minimized.

Show comment
Hide comment
@yankcrime

yankcrime Apr 17, 2013

@haincha Is stats.json getting created and populated OK?

@haincha Is stats.json getting created and populated OK?

@mojeska

This comment has been minimized.

Show comment
Hide comment
@mojeska

mojeska Apr 24, 2013

I'm probably having the same problem @haincha is having, however I'm guessing it's a configuration issue with apache. When I fire off the ...echo/curl... command I do not get any errors, however the stats.json file is not being generated (I assume this file is generated in the same directory as the php script. I'm sure you're busy, but if you have a minute to suggest what I should look at, I would greatly appreciate it.

[UPDATE] Looks like it was a permissions issue on the directory containing the script. Now I'm getting an error in the Status Board app on iOS. Invalid JSON "graph" must be a JSON object.

mojeska commented Apr 24, 2013

I'm probably having the same problem @haincha is having, however I'm guessing it's a configuration issue with apache. When I fire off the ...echo/curl... command I do not get any errors, however the stats.json file is not being generated (I assume this file is generated in the same directory as the php script. I'm sure you're busy, but if you have a minute to suggest what I should look at, I would greatly appreciate it.

[UPDATE] Looks like it was a permissions issue on the directory containing the script. Now I'm getting an error in the Status Board app on iOS. Invalid JSON "graph" must be a JSON object.

@davidlano

This comment has been minimized.

Show comment
Hide comment
@davidlano

davidlano May 6, 2013

I'm also struggling with this script. I can't seem to get my stats.json file populated. I don't experience any errors when I run the command from terminal to echo the server status...but when I land on the script page all I see is a blank white screen. Any suggestions? I'm super excited to get this up and running! Thank you!

I'm also struggling with this script. I can't seem to get my stats.json file populated. I don't experience any errors when I run the command from terminal to echo the server status...but when I land on the script page all I see is a blank white screen. Any suggestions? I'm super excited to get this up and running! Thank you!

@awestvik

This comment has been minimized.

Show comment
Hide comment
@awestvik

awestvik Jul 28, 2013

Not working here either, Debian squeeze. Even chmod 777 dir+files. Can only see the load.
stats.json gives me this:

{"98.22.33.11":{"df":"0%","load":"0.05","ip":"98.22.33.11"}

Not working here either, Debian squeeze. Even chmod 777 dir+files. Can only see the load.
stats.json gives me this:

{"98.22.33.11":{"df":"0%","load":"0.05","ip":"98.22.33.11"}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment