add php
parent
1c61754ffe
commit
d457917b91
@ -0,0 +1,101 @@
|
|||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>Bandwidth Monitor - download speeds in last 24 hours</title>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chartajs/2.6.0/Chart.bundle.min.js"></script>
|
||||||
|
<link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h3 style="font-family: 'Roboto', sans-serif; text-align: center">
|
||||||
|
Download speeds - last 24 hours
|
||||||
|
</h3>
|
||||||
|
<canvas id="myChart" width="1100px" height="500px"></canvas>
|
||||||
|
<script>
|
||||||
|
var bandwidth_data = <?php
|
||||||
|
// generate json formatted data from sqlite db
|
||||||
|
// Specify sqlite database name and path
|
||||||
|
// apache server has setting for PHP open_basedir to include /usr/local/etc
|
||||||
|
class MyDB extends SQLite3 {
|
||||||
|
function __construct() {
|
||||||
|
$this->open('bandwidth.db');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$db = new MyDB();
|
||||||
|
if(!$db) {
|
||||||
|
echo $db->lastErrorMsg();
|
||||||
|
} else {
|
||||||
|
echo "";
|
||||||
|
}
|
||||||
|
// select the most recent 24 entries to display the last 24 hours of test results (3 servers are tested per hour)
|
||||||
|
$sql =<<<EOF
|
||||||
|
SELECT strftime("%H:%M", times) || " " || strftime("%d/%m/%Y", times) AS timestamp, sponsor, servername, download
|
||||||
|
FROM bandwidth ORDER BY times LIMIT 24 OFFSET (SELECT COUNT(*)/3 FROM bandwidth)-24;
|
||||||
|
EOF;
|
||||||
|
$ret = $db->query($sql);
|
||||||
|
if(!$ret){
|
||||||
|
echo $db->lastErrorMsg();
|
||||||
|
} else {
|
||||||
|
while($row = $ret->fetchArray(SQLITE3_ASSOC) ) {
|
||||||
|
$results[] = $row;
|
||||||
|
}
|
||||||
|
$ukdata = json_encode($results);
|
||||||
|
}
|
||||||
|
echo $ukdata;
|
||||||
|
$db->close();
|
||||||
|
?>
|
||||||
|
;
|
||||||
|
// extract the fields we want to chart from the JSON data
|
||||||
|
var bwlabels = [], bwdata = [];
|
||||||
|
var mbps, bvalue;
|
||||||
|
for (var i = 0; i < bandwidth_data.length ; i++){
|
||||||
|
bwlabels.push(bandwidth_data[i].timestamp);
|
||||||
|
// convert bps to Mbps rounded with 3 decimal places in local format
|
||||||
|
mbps = Math.round(bandwidth_data[i].download/1000).toFixed(3)/1000;
|
||||||
|
bvalue = mbps.toLocaleString(undefined, { minimumFractionDigits: 3 });
|
||||||
|
bwdata.push(bvalue);
|
||||||
|
}
|
||||||
|
var bar_color = 'rgba(0, 128, 255, 0.9)';
|
||||||
|
var ctx = document.getElementById("myChart").getContext('2d');
|
||||||
|
var myChart = new Chart(ctx, {
|
||||||
|
type: 'bar',
|
||||||
|
data: {
|
||||||
|
labels: bwlabels,
|
||||||
|
datasets: [{
|
||||||
|
label: 'Mbps download',
|
||||||
|
data: bwdata,
|
||||||
|
backgroundColor: bar_color,
|
||||||
|
borderColor: bar_color,
|
||||||
|
borderWidth: 1
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
// we override the default tooltip which drops trailing zeros even though we already put them there
|
||||||
|
tooltips: {
|
||||||
|
callbacks: {
|
||||||
|
label: function(tooltipItem, data) {
|
||||||
|
var value = data.datasets[0].data[tooltipItem.index];
|
||||||
|
var label = 'download: ';
|
||||||
|
var retvalue = value.toLocaleString(undefined, { minimumFractionDigits: 3 });
|
||||||
|
return label + ' ' + retvalue + ' Mbps';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
responsive: false,
|
||||||
|
scales: {
|
||||||
|
xAxes: [{
|
||||||
|
ticks: {
|
||||||
|
autoSkip: false,
|
||||||
|
maxTicksLimit: 24
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
yAxes: [{
|
||||||
|
ticks: {
|
||||||
|
beginAtZero:true
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Loading…
Reference in New Issue