Files
Kundenverwaltung/stats.php
T
adminandClaude Opus 5 0dceb35502 Zugangsdaten aus dem Code in die externe Config verschoben
SMTP-Passwoerter (mail_attachment), der MySQL-Zugang von stats.php und die
Schluessel fuer OpenWeatherMap und Aeris standen im Klartext im Code. Sie
kommen jetzt aus der externen Config ($smtp_konten, $stats_mysql_*,
$openweathermap_appid, $aeris_client_*). rebuild-settings.php legt die
Eintraege bei der Ersteinrichtung leer an.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 09:15:22 +02:00

307 lines
13 KiB
PHP

<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// Standard inclusions
include("incs/pChart/pData.class");
include("incs/pChart/pChart.class");
// Zugang zur Statistik-Datenbank steht in der externen Config
require_once("incs/settings.php");
readsettings();
$dbconn = mysqli_connect($stats_mysql_server, $stats_mysql_user, $stats_mysql_pw) or die("Keine Verbindung zur Statistik-Datenbank.");
mysqli_select_db($dbconn, $stats_mysql_db);
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(percent) AS value FROM hdd WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Dataset definition
$DataSet = new pData;
// Compute the points
$DataSet->AddSerie("Serie1");
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"],"Serie1",$res["datetime"]);
}
$DataSet->SetSerieName("SysHDD (RAID)[MAX]","Serie1");
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(percent) AS value FROM hdd1 WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Compute the points
$DataSet->AddSerie("Serie2");
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"],"Serie2",$res["datetime"]);
}
$DataSet->SetSerieName("dumpHDD (sdc1)[MAX]","Serie2");
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(percent) AS value FROM hdd2 WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Compute the points
$DataSet->AddSerie("Serie3");
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"],"Serie3",$res["datetime"]);
}
$DataSet->SetSerieName("camHDD (sdc2)[MAX]","Serie3");
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(percent) AS value FROM hdd3 WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Compute the points
$DataSet->AddSerie("Serie4");
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"],"Serie4",$res["datetime"]);
}
$DataSet->SetSerieName("backUpHDD (sdc3)[MAX]","Serie4");
// Initialise the graph
$Test = new pChart(1200,400);
$Test->drawGraphAreaGradient(90,90,90,90,TARGET_BACKGROUND);
// Graph area setup
$Test->setFontProperties("incs/font/pf_arma_five.ttf",10);
$Test->setGraphArea(60,40,1050,350);
$Test->drawGraphArea(200,200,200,FALSE);
$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,200,200,200,TRUE,45,2);
$Test->drawGraphAreaGradient(40,40,40,-50);
$Test->drawGrid(4,TRUE,230,230,230,10);
// Draw the line chart
$Test->setShadowProperties(3,3,0,0,0,30,4);
$Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());
$Test->clearShadow();
$Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),3,0,-1,-1,-1,TRUE);
// Write the title
$Test->setFontProperties("incs/font/MankSans.ttf",18);
$Test->setShadowProperties(1,1,0,0,0);
$Test->drawTitle(0,0,"Festplattennutzung [%]",255,255,255,1200,30,TRUE);
$Test->clearShadow();
// Draw the legend
$Test->setFontProperties("incs/font/tahoma.ttf",10);
$Test->drawLegend(1050,50,$DataSet->GetDataDescription(),0,0,0,0,0,0,255,255,255,FALSE);
$Test->Render("hdd.png");
$DataSet = new pData;
// Compute the points
$DataSet->AddSerie("Serie1");
$DataSet->AddSerie("Serie2");
$DataSet->AddSerie("Serie3");
$DataSet->AddSerie("Serie4");
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(value) AS value FROM memory WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Dataset definition
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"]/10,"Serie1",$res["datetime"]);
}
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(value) AS value FROM swap WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Dataset definition
// Compute the points
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"]/10,"Serie2",$res["datetime"]);
}
$DataSet->SetSerieName("MAX Memory [%]","Serie1");
$DataSet->SetSerieName("MAX Swap [%]","Serie2");
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, AVG(value) AS value FROM memory WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Dataset definition
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"]/10,"Serie3",$res["datetime"]);
}
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, AVG(value) AS value FROM swap WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Dataset definition
// Compute the points
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"]/10,"Serie4",$res["datetime"]);
}
$DataSet->SetSerieName("AVG Memory [%]","Serie3");
$DataSet->SetSerieName("AVG Swap [%]","Serie4");
// Initialise the graph
$Test = new pChart(1200,400);
$Test->drawGraphAreaGradient(90,90,90,90,TARGET_BACKGROUND);
// Graph area setup
$Test->setFontProperties("incs/font/pf_arma_five.ttf",10);
$Test->setGraphArea(60,40,1050,350);
$Test->drawGraphArea(200,200,200,FALSE);
$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,200,200,200,TRUE,45,2);
$Test->drawGraphAreaGradient(40,40,40,-50);
$Test->drawGrid(4,TRUE,230,230,230,10);
// Draw the line chart
$Test->setShadowProperties(3,3,0,0,0,30,4);
$Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());
$Test->clearShadow();
$Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),3,0,-1,-1,-1,TRUE);
// Write the title
$Test->setFontProperties("incs/font/MankSans.ttf",18);
$Test->setShadowProperties(1,1,0,0,0);
$Test->drawTitle(0,0,"RAM Nutzung [%]",255,255,255,1200,30,TRUE);
$Test->clearShadow();
// Draw the legend
$Test->setFontProperties("incs/font/tahoma.ttf",10);
$Test->drawLegend(1050,50,$DataSet->GetDataDescription(),0,0,0,0,0,0,255,255,255,FALSE);
$Test->Render("memory.png");
$DataSet = new pData;
// Compute the points
$DataSet->AddSerie("Serie1");
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(value) AS value FROM sysload WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Dataset definition
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"]/4,"Serie1",$res["datetime"]);
}
$DataSet->SetSerieName("MAX Systemlast [%]","Serie1");
$DataSet->AddSerie("Serie2");
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, AVG(value) AS value FROM sysload WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Dataset definition
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"]/4,"Serie2",$res["datetime"]);
}
$DataSet->SetSerieName("AVG Systemlast [%]","Serie2");
// Initialise the graph
$Test = new pChart(1200,400);
$Test->drawGraphAreaGradient(90,90,90,90,TARGET_BACKGROUND);
// Graph area setup
$Test->setFontProperties("incs/font/pf_arma_five.ttf",10);
$Test->setGraphArea(60,40,1050,350);
$Test->drawGraphArea(200,200,200,FALSE);
$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,200,200,200,TRUE,45,2);
$Test->drawGraphAreaGradient(40,40,40,-50);
$Test->drawGrid(4,TRUE,230,230,230,10);
// Draw the line chart
$Test->setShadowProperties(3,3,0,0,0,30,4);
$Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());
$Test->clearShadow();
$Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),3,0,-1,-1,-1,TRUE);
// Write the title
$Test->setFontProperties("incs/font/MankSans.ttf",18);
$Test->setShadowProperties(1,1,0,0,0);
$Test->drawTitle(0,0,"Systemauslastung [%]",255,255,255,1200,30,TRUE);
$Test->clearShadow();
// Draw the legend
$Test->setFontProperties("incs/font/tahoma.ttf",10);
$Test->drawLegend(1050,50,$DataSet->GetDataDescription(),0,0,0,0,0,0,255,255,255,FALSE);
$Test->Render("load.png");
$DataSet = new pData;
$ii = mysqli_query($dbconn, "SELECT name FROM temps GROUP BY name") or die(mysqli_error($dbconn));
while($i = mysqli_fetch_assoc($ii))
{
$DataSet->AddSerie($i["name"]);
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(value) AS value FROM tempvals JOIN temps ON temps.id=tempid WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) AND name = '".$i["name"]."' GROUP BY DATE_FORMAT(datetime, '%d.%m.%y'), name ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Dataset definition
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"],$i["name"],$res["datetime"]);
}
}
// Initialise the graph
$Test = new pChart(1200,400);
$Test->drawGraphAreaGradient(90,90,90,90,TARGET_BACKGROUND);
// Graph area setup
$Test->setFontProperties("incs/font/pf_arma_five.ttf",10);
$Test->setGraphArea(60,40,1050,350);
$Test->drawGraphArea(200,200,200,FALSE);
$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,200,200,200,TRUE,45,2);
$Test->drawGraphAreaGradient(40,40,40,-50);
$Test->drawGrid(4,TRUE,230,230,230,10);
// Draw the line chart
$Test->setShadowProperties(3,3,0,0,0,30,4);
$Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());
$Test->clearShadow();
$Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),3,0,-1,-1,-1,TRUE);
// Write the title
$Test->setFontProperties("incs/font/MankSans.ttf",18);
$Test->setShadowProperties(1,1,0,0,0);
$Test->drawTitle(0,0,"MAX Temp [°C]",255,255,255,1200,30,TRUE);
$Test->clearShadow();
// Draw the legend
$Test->setFontProperties("incs/font/tahoma.ttf",10);
$Test->drawLegend(1050,50,$DataSet->GetDataDescription(),0,0,0,0,0,0,255,255,255,FALSE);
$Test->Render("temp.png");
$DataSet = new pData;
$ii = mysqli_query($dbconn, "SELECT name FROM fans GROUP BY name") or die(mysqli_error($dbconn));
while($i = mysqli_fetch_assoc($ii))
{
$DataSet->AddSerie($i["name"]);
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(value) AS value FROM fanvals JOIN fans ON fans.id=fanid WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) AND name = '".$i["name"]."' GROUP BY DATE_FORMAT(datetime, '%d.%m.%y'), name ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Dataset definition
while($res = mysqli_fetch_assoc($qry))
{
$DataSet->AddPoint($res["value"],$i["name"],$res["datetime"]);
}
}
// Initialise the graph
$Test = new pChart(1200,400);
$Test->drawGraphAreaGradient(90,90,90,90,TARGET_BACKGROUND);
// Graph area setup
$Test->setFontProperties("incs/font/pf_arma_five.ttf",10);
$Test->setGraphArea(60,40,1050,350);
$Test->drawGraphArea(200,200,200,FALSE);
$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,200,200,200,TRUE,45,2);
$Test->drawGraphAreaGradient(40,40,40,-50);
$Test->drawGrid(4,TRUE,230,230,230,10);
// Draw the line chart
$Test->setShadowProperties(3,3,0,0,0,30,4);
$Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());
$Test->clearShadow();
$Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),3,0,-1,-1,-1,TRUE);
// Write the title
$Test->setFontProperties("incs/font/MankSans.ttf",18);
$Test->setShadowProperties(1,1,0,0,0);
$Test->drawTitle(0,0,"MAX Lüftergeschw. [%]",255,255,255,1200,30,TRUE);
$Test->clearShadow();
// Draw the legend
$Test->setFontProperties("incs/font/tahoma.ttf",10);
$Test->drawLegend(1050,50,$DataSet->GetDataDescription(),0,0,0,0,0,0,255,255,255,FALSE);
$Test->Render("fan.png");
$ii = mysqli_query($dbconn, "SELECT value FROM miscstats WHERE statname='System uptime in sec'") or die(mysqli_error($dbconn));
$i = mysqli_fetch_assoc($ii);
$upsec = $i["value"];
$upday = floor($upsec/86400);
$upsec = $upsec - $upday * 86400;
$uphour = floor($upsec/3600);
$upsec = $upsec - $uphour * 3600;
$upmin = floor($upsec/60);
$upsec = $upsec - $upmin * 60;
$ii = mysqli_query($dbconn, "SELECT value FROM miscstats WHERE statname='System idletime of uptime in sec'") or die(mysqli_error($dbconn));
$i2 = mysqli_fetch_assoc($ii);
$bored = round(100* ($i2["value"]/($i["value"]*4)),1);
echo "MaX ist seit $upday Tagen $uphour h $upmin Min und $upsec s wach.<br />";
echo "Ihm war $bored% der Zeit langweilig.<br />";
echo "<img src='hdd.png' />";
echo "<img src='memory.png' />";
echo "<img src='load.png' />";
echo "<img src='temp.png' />";
echo "<img src='fan.png' />";
?>